Objeck
Implementation of programming language ObjeckThe only implementation of the language, written by its author. Includes a compiler which translates programs to bytecode, virtual machine with garbage collector and just-in-time compilation and a command-line debugger.
Features
- Native platform support for Windows, Linux and Mac OS X
- Support for object-oriented programming (virtual classes, interfaces, enums, functions and methods) and functional programming (high-order functions)
- Runtime introspection and object serialization
- Support for polymorphic methods and functions
- Class library support (math, files, sockets, xml, http, collections and etc.)
- Automatic memory management (mark and sweep garbage collection)
- Native runtime JIT support for IA-32 and AMD64 architectures
- Compiler optimizations (short-circuit evaluation, method inlining, constant folding, strength reduction, instruction simplification)
Links:
Examples:
Hello, World!:
Example for versions Objeck 2.0.3bundle Default {
class Hello {
function : Main(args : String[]) ~ Nil {
"Hello, World!"->PrintLine();
}
}
}
Factorial:
Example for versions Objeck 2.0.3This example uses built-in Factorial()
function.
bundle Default {
class Factorial {
function : Main(args : String[]) ~ Nil {
for (i := 0; i <= 16; i += 1;) {
i->Print();
"! = "->Print();
i->Factorial()->PrintLine();
};
}
}
}
Fibonacci numbers:
Example for versions Objeck 2.0.3This example uses recursive definition of Fibonacci numbers.
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();
}
}
}
Quadratic equation:
Example for versions 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();
};
}
}
}
Comments
]]>blog comments powered by Disqus
]]>