Erlang在JVM/CLR上的运行

12

我刚开始阅读Joe Armstrong关于Erlang的书,并听了他在Software Engineering Radio上的优秀演讲。

Erlang是一门有趣的语言/系统,它的时代似乎已经随着多核机器的出现而到来。

我的问题是:有什么因素阻止将其移植到JVM或CLR上吗?我知道这两个虚拟机都没有设置来运行Erlang所需要的轻量级进程,但这些进程不能通过线程模拟吗?我们能否在非Erlang VM上看到一个轻量级或简化版本的Erlang?

9个回答

23

由于JVM/CLR库依赖于可变对象,因此您不能使用它们。

Erlang的异常处理与JVM和CLR异常处理非常不同,您需要想办法进行处理。

将进程实现为线程意味着任何规模的Erlang系统都会非常快地耗尽内存(在我的机器上创建进程大小为1268字节,在CLR中的线程堆栈大小为1 MB),并且进程之间的通信比Erlang慢得多。

您可能想要的是在JVM或CLR上的Actor模型实现。

Scala和Clojure已经被提到。此外,JVM有许多Actor实现: Kilim, Functional Java, Jetlang, Actors Guild, ActorFoundry,CLR至少有一个: Retlang,可以从任何JVM/CLR语言中使用。


9
出于教育目的,我们正在为CLR实现ErlangVM的子集。我们受到Kresten Krab Thorup及其项目Erjang的极大启发,Erjang是基于JVM的Erlang VM。Erjang使用kilim框架表示轻量级进程,并开始引起关注。 Javalimit-Erjang的作者博客。 Erjang存储库

7

这是一个经过深入讨论的话题。一些背景信息可能会有所帮助。

去年11月份的 Erlang 邮件列表上:

关于在 JVM 上使用 Erlang,我的贡献是什么?不,这不是一个好主意:(


谢谢您提供的链接。我的意思是我对此非常感兴趣! - Fortyrunner
1
你误解了我的意思,我明白人们为什么感兴趣,我只是想让你/Stackoverflow从更大的讨论中受益... - Gordon Guthrie

4

其实没有什么具体建议。您可以看看Clojure,这是一种有趣的基于JVM的函数式语言。


我也一直在关注Scala。我已经预定了即将出版的Clojure书籍。Clojure看起来很有趣..! - Fortyrunner

3

Axum是一个在CLR上的孵化项目,显然受到了Erlang的启发。


是的。我这周看了一些关于Axum的东西,立刻就想到了Erlang! - Fortyrunner

2

Erjang是Erlang的虚拟机,可在Java™上运行。


2

我不知道有什么技术问题会阻碍这个。

实际上,Scala(一种JVM函数式语言)使用所谓的Actor模型,它非常类似于Erlang的共享无状态并发模型,并且据我所知,它从中借鉴了很多。线程无法模拟Erlang进程,因为它们太重了。


2

为了完整性,有关此主题的其他来源


1
可能吗?是的。实用吗?嗯,很可能不是;它们以非常不同的方式解决不同的问题,因此在做事情的方式上有很多主要差异。这将使移植变得困难,并且性能可能会受到严重影响。这并不意味着不能完成,只是有更好的方法来实现这样一个移植所带来的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接