Ответ 1
Erjang - это виртуальная машина для Erlang, которая работает на Java ™.
Я только что начал читать книгу Джо Армстронгса об Эрланге и выслушал его прекрасную беседу на Радио Software Engineering.
Его интересный язык/система и тот, чье время, похоже, появилось с появлением многоядерных машин.
Мой вопрос: что там, чтобы остановить его портирование в JVM или CLR? Я понимаю, что обе виртуальные машины не настроены для запуска легких процессов, к которым призывает Эрланг, - но не могли ли они имитировать потоки? Могли бы мы увидеть облегченную или сокращенную версию Erlang на не Erlang VM?
Erjang - это виртуальная машина для Erlang, которая работает на Java ™.
Вы не могли использовать библиотеки JVM/CLR, учитывая их зависимость от изменяемых объектов.
Обработка исключений Erlang сильно отличается от исключений JVM и CLR, вам нужно было бы как-то справиться с этим.
Реализация процессов как потоков будет означать, что любая значительная система Erlang исчерпывает память довольно быстро (размер процесса на моей машине при создании: 1268 байт, размер стека потоков в CLR: 1 МБ), а связь между процессами намного медленнее, чем в Erlang.
То, что вы, вероятно, хотите, это реализация модели Actor на JVM или CLR.
Scala и Clojure уже упомянуты. Кроме того, существует много реализаций Actor для JVM: Kilim, Функциональная Java, Jetlang, Гильдия актеров, ActorFoundry, и по крайней мере один для CLR: Retlang, который может использоваться из любой JVM/CLR язык.
По образовательным причинам мы реализуем подмножество ErlangVM для CLR. Мы были очень вдохновлены Крестен Крабом Торпом и его проектом Erjang, основанной на JVM Erlang VM. В Erjang используется структура kilim для представления легких процессов, и она начинает привлекать внимание.
Javalimit - блог автора Erjang.
Это хорошая дискуссия. Некоторый контекст может быть полезен.
Из списка рассылки Erlang в ноябре прошлого года:
Мой вклад в дискуссию об Эрланге на JVM? Нет, не очень хорошая идея: (
Ничего, на самом деле. Вы можете взглянуть на Clojure, что является интересным функциональным языком, созданным на JVM.
Axum - проект инкубации на CLR - был явно вдохновлен Erlang.
Я не знаю никакой технической проблемы, связанной с этим.
Фактически Scala (функциональный язык JVM) использует так называемую Модель актера, которая очень похожа на, и, как я понимаю, она сильно зависит от Модель Erlang совместно-ничего concurrency. Нити не могли имитировать процессы Erlang. Они слишком тяжелые.
Только для полноты дополнительной источник о теме.
Возможные? Да. Практическая? Ну, наверное, нет; они решают разные проблемы по-разному, и, следовательно, имеют множество существенных различий в том, как они это делают. Это сильно повлияет на перенос, и производительность, скорее всего, сильно пострадает. Это не значит, что это невозможно сделать, просто есть способы сделать то, что такой порт принесет в таблицу.