13 个版本
0.4.8 | 2021年2月4日 |
---|---|
0.4.7 | 2020年12月15日 |
0.4.5 | 2020年11月16日 |
0.3.8 | 2020年11月1日 |
0.2.2 | 2020年8月6日 |
#866 in 编程语言
34 每月下载次数
210KB
5K SLoC
lovm2
lovm2
是一个用于构建您自己的编程语言的库。它提供简单易用的结构来为其虚拟机生成字节码。
特性
- 动态类型
- 使用高级中间表示生成字节码
- 将自定义指令定义为
Interrupt
- 使用 Rust 扩展您的程序:[lovm2 扩展](https://github.com/lausek/lovm2/blob/HEAD/README-extend.md)
- 包含标准库:[lovm2_std](https://github.com/lausek/lovm2/blob/HEAD/src/lovm2_std/README.md)
- Python 绑定:[pylovm2](https://github.com/lausek/lovm2/blob/HEAD/pylovm2/README.md)
示例
将此行添加到您的 Cargo.toml
lovm2 = "0.4.8"
项目
生成字节码
use lovm2::prelude::*;
let mut module = ModuleBuilder::new();
// a module needs a code object called `main`
// if you want to make it runnable
let main_hir = module.entry();
// set the local variable n to 10
main_hir.step(Assign::local(&lv2_var!(n), 10));
// `print` is a builtin function. the `lv2_var!` macro
// ensures that the given identifier is not confused
// with a string.
main_hir.step(Call::new("print").arg(lv2_var!(n)).arg("Hello World"));
// ... this is equivalent to the developer-friendly version:
main_hir.step(lv2_call!(print, n, "Hello World"));
// creates a `Module` from the `ModuleBuilder`
let module = module.build().unwrap();
println!("{}", module);
// load the module and run it
let mut vm = create_vm_with_std();
vm.add_main_module(module).expect("load error");
vm.run().expect("run error");
内部源代码引用
客户评价
This Thing Fast - Sonic
And I thought I was simple... - Pythagorean Theorem
依赖项
~5–17MB
~220K SLoC