113

爱立信的 Erlang 和 Erlang/OTP 实现是用什么编写和编译的?是汇编、C 还是 Erlang 本身?

更新 1:感谢 DrJokepu。如果我理解正确,Erlang source-to-VM 编译器是用 Erlang 本身编写的。但是 VM 是用 C 编写的。

更新 2:Hynek-Pichi-Vychodil 指出了很多细节。

  • VM 和 HW 交互驱动程序:在 C 中。
  • 编译器(到 VM)和库:在 Erlang 中。
  • 扩展:可以通过用该语言编写端口或 Erlang 节点来使用任何语言。
4

4 回答 4

146

Erlang 本身是用 Erlang 编写的。听起来很奇怪?是的,因为它只是部分正确。好的,更详细地看一下:

  1. Erlang 预处理器是用 Erlang 编写的。
  2. Erlang 解析器是用 Erlang 编写的。
  3. Erlang 编译器到 BEAM(字节码 VM)是用 Erlang 编写的。
  4. 到 HiPE(本地 VM 扩展)的 Erlang 编译器是用 Erlang 编写的。
  5. Erlang VM BEAM 和 HiPE 主要是用 C 编写的。
  6. 链接驱动程序主要是用 C 语言编写的。(它们被插入到 VM 并服务于与外部世界的通信。)
  7. OTP 是用 Erlang 编写的。
  8. 另一个端口或节点可以用任何语言编写。
于 2009-02-13T15:05:45.610 回答
93

来自Erlang 常见问题解答

10.6 第一个 Erlang 编译器是如何编写的?

(或者:Erlang 是如何引导的?)用乔的话来说:

首先,我设计了一个抽象机器来执行 Erlang。这被称为 JAM 机器;JAM = 乔的抽象机器。

然后我写了一个从 Erlang 到 JAM 的编译器和一个模拟器,看看机器是否工作。这两个都是用prolog写的。

与此同时,Mike Williams 为 JAM 编写了一个 C 仿真器。

然后我用 Erlang 重写了 erlang-to-jam 编译器,并使用 prolog 编译器进行编译。生成的目标代码在 C 模拟器中运行。然后我们扔掉了序言。

于 2009-02-13T14:50:20.873 回答
15
  • 65.9% 的 Erlang 代码是用 Erlang 编写的。
  • 13.4% 的 erlang 是用 XML 编写的。
  • 13.6% 的 erlang 是用 C 编写的。
  • 1.4% 的 erlang 是用 C++ 编写的
  • ...

您可以在ohloh站点中看到实时和更新统计信息,该报告从主 erlang git 存储库生成。

于 2013-06-11T10:24:58.907 回答
0

我可以说 Erlang 最初是用 C/C++ 编写的,因为我不能说 Java 是用 java 编写的......但它是框架和一些库。关于 Erlang,因为它是首选的编程语言,适用于电信系统......为了保持敏捷性(例如:在聊天机器人中)我知道它的编译器或 PreProcessor 是用 Erlang 编写的。但是语言的其他功能是用低级语言编写的。

于 2019-11-22T12:18:57.477 回答