9 个版本

使用旧 Rust 2015

0.0.9 2015 年 5 月 16 日
0.0.8 2015 年 2 月 16 日
0.0.4 2015 年 1 月 25 日
0.0.2 2014 年 12 月 22 日

#1140 in 编程语言

每月 23 次下载
用于 jit

MIT 许可证

21KB
462

JIT.rs

Build Status Latest Version

注意

由于 LibJIT 已有一年未活跃,似乎不会再有更新。另一方面,LLVM 仍然非常活跃,因此我已经连续几天在编写绑定。很快就会有关于替代品的消息。

什么是 LibJIT?

LibJIT 是 GNU 开发的便携式、轻量级 JIT 库,用 C 语言编写。它旨在具有与任何语言或运行时兼容的 IR,而不强迫程序员使用特定的一个。

什么是 jit.rs?

jit.rs 是一个 Rust 库,以 Rust 风格封装了 LibJIT,包括一个宏,用于将任意类型轻松编译成 JIT 类型。它还使用 Rust 内存模型来保存一些在其他情况下可能会在 GC 语言中使用的无意义操作。

为什么有这么多包?

  • libjit-sys - 该包包含 JIT 函数、常量等的绑定。如果您想坚持使用原始 API,则应使用此包。
  • jit - 该包包含 JIT 函数和结构的 Rust 风格包装。
  • jit_macros - 该包包含帮助简化与 JIT 交互的宏定义。

如何构建它?

如果您想构建它,您需要为 Ubuntu 或 Debian 安装以下包

sudo apt install autoconf automake texinfo libtool bison flex g++

然后,您可以使用 cargo 来构建它

cargo build

如何使用宏?

只需像这样注释您想传递给 LibJIT 的类型

#[derive(Compile)]
struct Position {
  x: f64,
  y: f64
}

fn main() {
  ...
  let pos = Position {
    x: 5.0,
    y: -32.2
  };
  func.insn_return(func.insn_of(pos))
  ...
}

有没有示例?

有一个带有良好命令行界面的 Brainfuck 虚拟机示例。您可以从项目根目录使用以下命令运行它

cargo run --example brainfuck

然后,您应该输入 brainfuck 代码并按换行符运行。

> ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Hello, world!
>

您还可以在这里查看其源代码 这里

依赖关系

~6KB