谜团:Erlang VM在Rust中的实现

2020-05-02 18:01:32

Erlang VM在Rust中的实现。按照这个重要性顺序,我们的目标是完整、正确和快速。

兼容OTP 22+(目前没有分发的比特)-所有的代码最终都应该不变地在Enigma上运行。不支持不推荐使用的操作码。

因为它很有趣,而且我学到了很多。BEAM和HIPE很棒,但它们都很大(约300K SLOC)。一个小的实现使新手更容易学习Erlang内部。我们还得到了一个平台,可以快速迭代包含在BEAM中的想法。

建造谜团的唯一前提是铁锈。使用Ruaste安装最新的夜间铁锈。目前,我们不再支持稳定/测试版,因为我们依赖异步/等待,计划在2019年第三季度的某个时候运行不稳定版。

要启动OTP,您还需要编译标准库。目前,这取决于梁构建系统:

我们希望在将来(一旦Enigma可以运行编译器)简化这一步。

运行Cargo Run以安装依赖项、构建和运行VM。默认情况下,它将引导Erlang shell(IEX也可以工作,但有一些呈现错误)。

一旦我们达到一定的稳定性,各种平台的预建二进制文件将可用。

我们实现了大部分操作码,以及大约一半的BIF。您可以查看操作码或BIF的详细进度明细。

端口(可能永远不会完全支持,我们提供了几个引导关键端口作为内置端口:TTY、FD)。

NIF/BIF是在某些点上进行收益的期货,可以很好地处理减持(允许更简单的收益实现)。

编写更多关于记录较少的光束方面的文档(二进制匹配、时间轮、进程监视器等)。

在虚拟机没有达到一定程度的完整性之前,考虑这些是没有意义的。

注意:NIF/FFI ABI与OTP的兼容性将是相当艰巨的工作。但是,铁锈风格的NIF界面将可用。也有可能使适配器与Rustler兼容。

最简单的入门方法是查看Notes文件夹,然后选择要实现的BIF或操作码。请看一下src/bin.rs和bif文件夹,了解其他BIF是如何实现的。也有几个问题开放与良好的第一期标签,这也将是一个很好的内部介绍。

或者,在代码库中搜索TODO、FIXME或UNIMPLEMED!,它们标记了存在部分实现的各个位置,但需要做更多的工作。

目前缺少测试覆盖面,并且有不同级别的文档;我将很快解决这些问题。