我刚开始阅读Joe Armstrong关于Erlang的书,并听了他在Software Engineering Radio上的优秀演讲。
Erlang是一门有趣的语言/系统,它的时代似乎已经随着多核机器的出现而到来。
我的问题是:有什么因素阻止将其移植到JVM或CLR上吗?我知道这两个虚拟机都没有设置来运行Erlang所需要的轻量级进程,但这些进程不能通过线程模拟吗?我们能否在非Erlang VM上看到一个轻量级或简化版本的Erlang?
由于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语言中使用。
其实没有什么具体建议。您可以看看Clojure,这是一种有趣的基于JVM的函数式语言。
Axum是一个在CLR上的孵化项目,显然受到了Erlang的启发。
我不知道有什么技术问题会阻碍这个。
实际上,Scala(一种JVM函数式语言)使用所谓的Actor模型,它非常类似于Erlang的共享无状态并发模型,并且据我所知,它从中借鉴了很多。线程无法模拟Erlang进程,因为它们太重了。