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)
6MB
121K 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
注意
由于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。