#解释器 #虚拟机 #编程语言 #字节码 #中间表示 #自研 #构建

bin+lib lovm2

一个专注于简单性和可扩展性的轻量级虚拟机

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

crates.io badge docs.rs badge

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