Objeck
Реализация языка программирования ObjeckАвторская (и единственная) реализация языка. В реализацию входят компилятор (в байт-код), виртуальная машина со сборщиком мусора и динамическим компилятором и отладчик с интерфейсом командной строки. Распространяется под лицензией BSD
Особенности
- Поддержка платформ Windows, Linux и MAC OS X
- Интроспекция в процессе выполнения программы
- Сериализация объектов
- Поддержка полиморфных методов и функций
- Библиотека классов (математика, файлы, сокеты, XML, HTTP, коллекции и т.д.)
- Автоматическое управление памятью (использует алгоритм выставления флагов (mark and sweep))
- Встроенный динамический компилятор для архитектур IA-32 и AMD64
- Оптимизации компилятора (вычисления короткого замыкания, встраивание методов, свертывание констант, понижение силы операций, упрощение инструкций)
Ссылки:
Примеры:
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
]]>