使用 Cranelift 为玩具语言编写 JIT 编译器和运行时
你好! 这是一个简单的示例,它使用 Cranelift 进行 JIT 编译一个玩具语言。 它使用正在开发中的新的 JIT 接口 这里。 JIT 负责管理符号表、分配内存和执行重定位,提供了一个相对简单的 API。 这部分灵感来自 Ulysse Carion 和 JT 的 rustyjit。
Cranelift 正在被设计以允许灵活地使用它。有时这种灵活性可能是一种负担,我们最近开始通过一组新的 crate cranelift-module, cranelift-jit 和 cranelift-faerie 来解决这个问题,这些 crate 将多个函数和数据接口组合成一些易于使用的配置,可同时处理多个函数。cranelift-module 是用于同时处理多个函数和数据接口的通用接口。此接口可以放在 cranelift-jit 上,后者会将代码和数据写入内存,以便执行和访问。此外,它还可以放在 cranelift-faerie 上,后者会将代码和数据写入本地 .o 文件,这些文件可以链接到本地可执行文件中。
本文通过演示 JIT 来介绍 Cranelift。我们使用 cranelift-jit 编译器。目前此演示在 Linux x86-64 平台上运行。它也可能在 Mac x86-64 平台上运行,但我尚未具体测试过。Cranelift 正在被设计为将来支持许多其他类型的平台。
fn foo(a, b) -> (c) {
[llvm-rust-getting-started](https://github.com/ucarion/llvm-rust-getting-started)
[first example](./src/bin/toy.rs#L63)暂无开放 Issues,或尚未同步最近议题。