#jit #compile #compiler #interpreter

sys libjit-sys

使用LibJIT绑定在Rust中进行即时编译

13个版本

使用旧的Rust 2015

0.2.1 2015年6月13日
0.1.12 2015年5月16日
0.1.11 2015年2月16日
0.1.6 2015年1月17日
0.1.4 2014年12月20日

编程语言 中排名第 925


2 个crate中使用 (通过 jit)

MIT 许可证

6MB
121K SLoC

C 64K SLoC // 0.2% comments Bitbake 26K SLoC // 0.0% comments Shell 8K SLoC // 0.2% comments M4 7.5K SLoC // 0.2% comments Happy 6.5K SLoC Ruby 3K SLoC // 0.1% comments Pascal 2.5K SLoC // 0.0% comments Rust 1.5K SLoC // 0.0% comments C++ 1K SLoC // 0.3% comments Automake 331 SLoC

包含 (静态库,1.5MB) libjit/jit/.libs/libjit.a,(ELF可执行文件/库,1MB) libjit/dpas/dpas,(ELF可执行文件/库,685KB) libjit/jit/jit-rules-x86-64.o,(ELF可执行文件/库,800KB) libjit/tutorial/t1,(ELF可执行文件/库,1MB) libjit/tutorial/t2,(ELF可执行文件/库,1MB) libjit/tutorial/t3 等等

JIT.rs

Build Status Latest Version

注意

由于LibJIT已经一年没有活动,似乎不会再有任何更新。另一方面,LLVM仍然非常活跃,所以我已经在为LLVM的绑定工作了几天。关于替代品的消息即将公布。

什么是LibJIT?

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

什么是jit.rs?

jit.rs是一个Rust库,它以符合Rust的方式包装LibJIT,包括一个宏,用于将任意类型编译成JIT类型。它还使用Rust内存模型来保存一些在其他情况下可能使用的无意义操作。

为什么有这么多包?

  • 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!
>

您还可以在此处查看其源代码 here

依赖项