#erlang #run-time #beam #attempt #emulator #replace #how

nightly kvakvs/erlangrt

Erlang替代疗法。尝试在Rust中实现Erlang运行时(BEAM仿真器)。好消息:我知道该做什么。坏消息:我不知道如何使用Rust

1个不稳定版本

0.1.0 2019年1月1日

#11 in #beam

587 星 & 38 关注者

500KB
13K SLoC

https://app.fossa.io/api/projects/git%2Bgithub.com%2Fkvakvs%2FErlangRT.svg?type=shield

ErlangRT - 运行时

Erlang替代疗法。这是尝试在Rust中实现Erlang运行时(BEAM仿真器)。这不是第一次尝试,所以我大概知道我在做什么。

概念验证进展

  • Term库 80%(剩余80%正在进行中)
  • 外部术语格式(解码器70%,编码器0%)
  • BEAM加载器 - 主要完成
  • 虚拟机和进程 40%
  • 虚拟机循环和操作码 45%(168个中的74个)
  • 一些基本BIFs <15%
  • 二进制、子二进制、二进制堆、二进制操作码:<20%
Trying to run ``init:boot/1``

测试在priv/test2.erl工作。运行make test尝试运行init:boot/1并产生上述输出。

编译

  • 源代码假定您在otp/中有一个Git子模块,并且stdlib和preload BEAM文件已编译并准备就绪。Makefile负责此事。

  • 通过Rustup安装最新的RustCargo

  • 运行make并通过Bash自动完成的魔法,查看它支持哪些目标。您可能喜欢

    • make run- 运行可执行文件并带有测试参数,开发者设定的任何参数,不要期望它展示任何神奇技巧;
    • make doc- 在target/doc/erlang_rt/
    • make test- 运行测试
    • make buildmake build-rel- 分别构建但不运行调试和发布目标

当前仿真器期望在

otp/

Git子模块中预加载OTP 22+的BEAM模块(Makefile负责此事)。

编辑和代码导航

贡献

查看CONTRIBUTING.rst

许可证检查

https://app.fossa.io/api/projects/git%2Bgithub.com%2Fkvakvs%2FErlangRT.svg?type=large

lib.rs:

ErlangRT 是用 Rust 编写的替代 Erlang BEAM 运行时。这是一个库,要运行它,请将其链接并调用 start_emulator()。这可以在 erlct_run 项目中完成。

依赖项

~9–19MB
~100K SLoC