8 Erlang 的实现和端口
8.1 开源 Erlang
开源 Erlang 是 Erlang 的标准实现。您可以使用开源 Erlang 构建商业产品,而无需向爱立信支付版税或许可费。开源 Erlang 使用 Apache 许可证 2.0。
8.2 有哪些实验性、研究性和历史性实现?
高性能 Erlang (HiPE) 是普通开源 Erlang 的一部分。它允许将 Erlang 模块编译为本地代码。
-
Erjang 是用 Java 实现的实验性 Erlang VM。
Erlang 到 Scheme 编译器 (ETOS)。ETOS 是另一个研究项目,通过首先将程序翻译为 Scheme 来将 Erlang 程序编译为本地代码。他们有一些令人印象深刻的基准测试。ETOS 已经不再积极开发了。
Geoff 的 Erlang (GERL) 支持 Erlang 语言的子集。GERL 通过 C 编译为本地代码。GERL 已经不再使用。
安全 Erlang 是通过扩展爱立信实现的旧版本而制作的原型。它旨在用于应用程序,在这些应用程序中,Erlang 节点必须与其他不可信的 Erlang 节点协作。安全 Erlang 已经不再积极开发了。
8.3 我正在运行哪个版本的 Erlang?
最简单的方法是查看 Erlang 在启动时打印的横幅,例如
Erlang/OTP 17 [RELEASE CANDIDATE 1] [erts-6.0] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
在 Erlang 代码中,在最近的版本中,调用 erlang:system_info(otp_release) 来查找您正在运行的版本。
8.4 Erlang 在哪些操作系统上运行?
Erlang 运行在大多数 unix 和类 unix 系统以及当前流行的 Windows 版本上。爱立信已将其编译为
BSD
Linux
Microsoft Windows
OSX
Solaris
TRU64
VxWorks
邮件列表中有人报告称他们成功地在 IRIX 上编译了 Erlang,以及 Erlang 在不常见的系统(如 iPhone、Xbox、QNX、Tilera 64 核 CPU 和许多嵌入式系统)上运行的报告。
8.5 有哪些 Erlang 虚拟机实现?
几乎所有人都使用 "新 BEAM",其中 BEAM 代表 Bogdan/Björn 的 Erlang 抽象机。这是商业版本中支持的虚拟机。
其他虚拟机主要具有历史意义
JAM
这是最初的 Erlang 虚拟机,灵感来自 (Prolog) WAM。JAM 代表 "Joe 的抽象机"。
旧 BEAM
这是尝试将 Erlang 编译为 C,然后将 C 编译为本地代码。在基准测试表明生成的代码仅比基于 VM 的 Erlang 针对小型程序更快后,该项目被放弃了。
8.6 Erlang 可以用 Microsoft Windows 编译吗?
源代码分发中的 HOWTO/INSTALL-WIN32.md 说明了如何执行此操作。
8.7 如何交叉编译 Erlang?
标准 Erlang/OTP 发行版包含对交叉编译的支持和文档。这在 Erlang 源代码中的 HOWTO/INSTALL-CROSS.md 文件中进行了描述,您可以从 下载页面 获得该文件。
8.8 Erlang 足够小,可以用于嵌入式系统吗?
许多人将 Erlang 运行在许多不同类型的嵌入式系统上,例如移动电话、电信交换设备和车载电子设备。
经验法则:如果嵌入式系统可以运行 Linux 等操作系统,那么就可以在付出适度努力的情况下使当前的 Erlang 实现运行在该系统上。
使 Erlang 运行在具有 32kByte RAM 的 8 位 CPU 上是不切实际的。
人们成功地在 RAM 低至 16MByte 的系统上运行爱立信的 Erlang 实现。将 Erlang 本身放入 2MByte 的持久存储(例如闪存盘)中是相当直接的。
2MByte 的精简 Erlang 系统可以包含 beam 模拟器和几乎所有 stdlib、sasl、kernel、inets 和 runtime_tools 库,前提是库是在不包含调试信息的情况下编译的,并且已压缩。