]]> ]]>

Objeck

Реализация языка программирования Objeck

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

Особенности

  • Поддержка платформ Windows, Linux и MAC OS X
  • Интроспекция в процессе выполнения программы
  • Сериализация объектов
  • Поддержка полиморфных методов и функций
  • Библиотека классов (математика, файлы, сокеты, XML, HTTP, коллекции и т.д.)
  • Автоматическое управление памятью (использует алгоритм выставления флагов (mark and sweep))
  • Встроенный динамический компилятор для архитектур IA-32 и AMD64
  • Оптимизации компилятора (вычисления короткого замыкания, встраивание методов, свертывание констант, понижение силы операций, упрощение инструкций)

Примеры:

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

]]>

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