我第一次开始接触Erlang,OTP被爱好者和评论家誉为高可用性、分布式处理的黄金标准。
鉴于OTP已经存在了几十年,并且有公开文档,在支持轻量级线程/进程的其他语言中,为什么没有采用自己的版本呢?是技术/政治上的挑战吗?还是每个人都只是耸耸肩学习Erlang?
谢谢!
鉴于OTP已经存在了几十年,并且有公开文档,在支持轻量级线程/进程的其他语言中,为什么没有采用自己的版本呢?是技术/政治上的挑战吗?还是每个人都只是耸耸肩学习Erlang?
谢谢!
最大的问题是,大多数语言运行时都没有内置轻量级并发和错误隔离以及退出信号传播。如果没有这些东西,你将会在正确移植OTP方面遇到很大的困难。
对于那些拥有正确运行时的语言,我看到一些尝试或者至少计划构建受OTP启发的框架。Cloud Haskell是我首先想到的。我还预计,如果Go和Rust尚未拥有类似OTP的东西,它们最终也会有。
由于Erlang本身是为OTP所知的相同功能而设计的,因此存在技术挑战。例如,Basho Riak是一个用Erlang编写的分布式容错键/值存储。虽然可能可以将其移植到Haskell或某些类似的函数语言中,但这可能需要大量工作。仅供娱乐,您可以查看使用Elixir语言编写的OTP内容。
实际上,它已经被尝试过了。
Akka是一个库,它将一些OTP功能带入Scala for JVM中进行实现。 由于JVM和BEAM(Erlang VM)的基本原理非常不同(主要是GC、调度和消息传递都有根本性的不同),我无法确定该实现有多成功以及它保留了多少原始OTP的优点。在互联网上有很多(激烈的)争论。