Objeck
- Дата создания:
- 2008
- Создан под влиянием:
- Парадигма:
- Типизация:
- Реализации и версии (свернуть все | развернуть все):
Objeck — объектно-ориентированный язык с некоторыми функциональными элементами (функции высшего порядка).
Язык был разработан Randy Hollines. Современный вид язык обрел в конце 2008 года; до того был написан ряд прототипов для проверки работы компилятора и виртуальной машины.
Прототип языка был создан для исследования процесса трансляции команд стека в команды регистра и затем в машинные коды. По этому прототипу была создана виртуальная машина с простым ассемблером. Со временем ассемблер был заменен на гораздо более сложный объектно-ориентированный фронт-энд, и проект был переименован в Objeck.
В настоящее время язык считается стабильным, и его развитие фокусируется на дальнейшем упрощении программирования. Язык не проходил стандартизацию, и авторская реализация остается единственной. В нее входят компилятор (в байт-код), виртуальная машина со сборщиком мусора и динамическим компилятором и отладчик с интерфейсом командной строки.
Все типы данных, за исключением функций высшего порядка, считаются объектами.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Objeck 2.0.3bundle 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.3use 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
]]>