От: | Mamut | http://dmitriid.com | |
Дата: | 05.12.09 07:45 | ||
Оценка: | 29 (4) |
Erjang
Erjang — это виртуальная машина для Эрланга, которая работает на Java.
Как это работает?
Виртуальная машина загружает .beam-файлы, транслирует их в .class-файлы и передает в Java VM.
В будущем планируется сделать Erjang самодостаточной виртуальной машиной для Эрланга (планаруется реализация всех BIF'ов в Java, избавление от внешних рланговских процессов и необходимости использовать jinterface для некоторых участков кода)
Работает ли оно?
Примерно 3/4 из .beam-файлов в стандартной поставке Erlang/OTP успешно конвертируются в .class-файлы. Это конечно не означает, что все из них транслируется корректно, время покажет.
На анный момент запускаются простые примеры из src/main/erl, такие как ring, fib и другие. Это значит, что ключевые моменты (процессы, сообщения, динамическая подгрузка, исключения, трассировка, exit-сигналы, spawn, spawn_link) работают.
Для больших чисел fib в Erjang'е работает в полтора раза быстрее, чем в родной VM (в частности, из-за более эффективной реализации bignum в Java).
— проект на GitHub'е
Так же в вики есть дополнительная информация о том, как реализуются различные тонкости Эрланга (хвостовая рекурсия, паттерн матчинг и т.п.)
— Паттерн матчинг: http://wiki.github.com/krestenkrab/erjang/how-erjang-compiles-pattern-matching
— Хвостовая рекурсия: http://wiki.github.com/krestenkrab/erjang/how-erjang-compiles-tail-recursion
— Процессы: http://wiki.github.com/krestenkrab/erjang/how-erjang-handles-processes