]]> ]]>
Править | Обсудить | История

Objeck

Дата создания:
2008
Создан под влиянием:
Парадигма:
Типизация:
Реализации и версии (свернуть все | развернуть все):
Язык программирования

Objeck — объектно-ориентированный язык с некоторыми функциональными элементами (функции высшего порядка).

Язык был разработан Randy Hollines. Современный вид язык обрел в конце 2008 года; до того был написан ряд прототипов для проверки работы компилятора и виртуальной машины.

Прототип языка был создан для исследования процесса трансляции команд стека в команды регистра и затем в машинные коды. По этому прототипу была создана виртуальная машина с простым ассемблером. Со временем ассемблер был заменен на гораздо более сложный объектно-ориентированный фронт-энд, и проект был переименован в Objeck.

В настоящее время язык считается стабильным, и его развитие фокусируется на дальнейшем упрощении программирования. Язык не проходил стандартизацию, и авторская реализация остается единственной. В нее входят компилятор (в байт-код), виртуальная машина со сборщиком мусора и динамическим компилятором и отладчик с интерфейсом командной строки.

Все типы данных, за исключением функций высшего порядка, считаются объектами.

Примеры:

Hello, World!:

Пример для версий Objeck 2.0.3
bundle Default {
	class Hello {
		function : Main(args : String[]) ~ Nil {
			"Hello, World!"->PrintLine();
		}
	}
}

Факториал:

Пример для версий Objeck 2.0.3

Используется встроенная функция Factorial.

bundle Default {
    class Factorial {
        function : Main(args : String[]) ~ Nil {
            for (i := 0; i <= 16; i += 1;) {
                i->Print();
                "! = "->Print();
                i->Factorial()->PrintLine();
            };
        }
    }
}

Числа Фибоначчи:

Пример для версий Objeck 2.0.3

Используется рекурсивное определение чисел Фибоначчи.

bundle Default {
    class Fib {
        function :  Fibonacci (n: Int) ~ Int {
            if (n<=2) {
                return 1;
            };
            return Fibonacci(n-1) + Fibonacci(n-2);
        }
        function : Main(args : String[]) ~ Nil {
            for (i := 0; i <= 16; i += 1;) {
                Fibonacci(i)->Print();
                ", "->Print();
            };
            "..."->PrintLine();
        }
    }
}

Квадратное уравнение:

Пример для версий Objeck 2.0.3
use IO;

bundle Default {
    class Quadratic {
        function : Main(args : String[]) ~ Nil {
            A := Console->ReadString()->ToInt();
            if (A=0) {
                "Not a quadratic equation."->PrintLine();
                return;
            };
            B := Console->ReadString()->ToInt();
            C := Console->ReadString()->ToInt();
            D := 1.0*(B*B-4*A*C);
            if (D=0) {
                "x = "->Print();
                (0-B/2.0/A)->PrintLine();
            };
            if (D>0) {
                "x1 = "->Print();
                ((0-B+(D->SquareRoot()))/2.0/A)->PrintLine();
                "x2 = "->Print();
                ((0-B-(D->SquareRoot()))/2.0/A)->PrintLine();
            };
            if (D<0) {
                out := "x1 = (";
                out->Append(0-B/2.0/A);
                out->Append(",");
                out->Append(((D->Abs())->SquareRoot())/2/A);
                out->Append(")");
                out->PrintLine();
                out := "x2 = (";
                out->Append(0-B/2.0/A);
                out->Append(",");
                out->Append(0-((D->Abs())->SquareRoot())/2/A);
                out->Append(")");
                out->PrintLine();
            };
        }
    }
}

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам