为什么还没有将Erlang的开放电信平台(OTP)移植到其他编程语言?

6
我第一次开始接触Erlang,OTP被爱好者和评论家誉为高可用性、分布式处理的黄金标准。
鉴于OTP已经存在了几十年,并且有公开文档,在支持轻量级线程/进程的其他语言中,为什么没有采用自己的版本呢?是技术/政治上的挑战吗?还是每个人都只是耸耸肩学习Erlang?
谢谢!
3个回答

6

最大的问题是,大多数语言运行时都没有内置轻量级并发和错误隔离以及退出信号传播。如果没有这些东西,你将会在正确移植OTP方面遇到很大的困难。

对于那些拥有正确运行时的语言,我看到一些尝试或者至少计划构建受OTP启发的框架。Cloud Haskell是我首先想到的。我还预计,如果Go和Rust尚未拥有类似OTP的东西,它们最终也会有。


更不用说这些都没有提供热代码交换。此外,您还需要“模拟”链接的演员。 - Kaveh Shahbazian
1
热代码交换在大多数编程语言中都存在,但它并不是一个经过精细打磨的功能,你也不被鼓励使用。例如,Facebook在Haxl项目中使用了Haskell中的热代码加载。基本上任何类似C的语言都可以使用dlopen或等效方法,因此也具有(极其不安全且难以使用的)热代码加载功能。 - YOUR ARGUMENT IS VALID

1

由于Erlang本身是为OTP所知的相同功能而设计的,因此存在技术挑战。例如,Basho Riak是一个用Erlang编写的分布式容错键/值存储。虽然可能可以将其移植到Haskell或某些类似的函数语言中,但这可能需要大量工作。仅供娱乐,您可以查看使用Elixir语言编写的OTP内容。


3
Elixir确实是具有另一种语法和一些额外的好特性的Erlang。由于它在Erlang虚拟机上运行,因此支持与Erlang相同的所有功能,并具有相同的限制。正因为如此,Elixir可以轻松融入标准(Erlang)OTP中。您可以使用Elixir编写模块,这些模块可以与OTP一起使用。这是Elixir设计者的明智决策(在我看来)。因此,没有什么特别的Elixir OTP。 - rvirding
Erlang 的哪些特性是为 OTP 的哪些特性设计的? - zslayton
1
主要是因为进程便宜且非常良好隔离。如果没有这个,整个系统就没有多大意义。此外,还可以链接和监视进程,因此有一种非常简单的方法来知道何时进行恢复等操作。 - Zachary K

0

实际上,它已经被尝试过了。

Akka是一个库,它将一些OTP功能带入Scala for JVM中进行实现。 由于JVM和BEAM(Erlang VM)的基本原理非常不同(主要是GC、调度和消息传递都有根本性的不同),我无法确定该实现有多成功以及它保留了多少原始OTP的优点。在互联网上有很多(激烈的)争论。


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