#虚拟机 #解释器 #lovm2 #编程语言 #指令 #简洁性 #字节码

lovm2_error

一个轻量级的虚拟机,注重简洁性和可扩展性

2个版本

0.1.1 2020年11月16日
0.1.0 2020年11月1日

#1013编程语言


用于 lovm2_internals

自定义许可

14KB
114

crates.io badge docs.rs badge

lovm2

lovm2 是一个用于快速构建自己编程语言的库。它提供了易于使用的结构来为其虚拟机生成字节码。

⚠️ lovm2 未经积极维护,可能存在漏洞。

特性

  • 动态类型
  • 使用高级中间表示法生成字节码
  • 将自定义指令定义为 中断
  • 使用Rust扩展您的程序:[lovm2扩展](https://github.com/lausek/lovm2/blob/762665dd8976042b1f2dc9796ae28d4046e03169/README-extend.md)
  • 包含标准库:[lovm2_std](https://github.com/lausek/lovm2/blob/762665dd8976042b1f2dc9796ae28d4046e03169/crates/lovm2_std/README.md)
  • Python绑定:[pylovm2](https://github.com/lausek/lovm2/blob/762665dd8976042b1f2dc9796ae28d4046e03169/pylovm2/README.md)

示例

将此行添加到您的 Cargo.toml

lovm2 = { git = "https://github.com/lausek/lovm2", rev = "d454b21" }

资源

项目

生成字节码

use lovm2::prelude::*;

let mut module = LV2ModuleBuilder::new();

// declare the variables our code will use
let n = &lv2_var!(n);
// 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.assign(n, 10);
// `print` is a builtin function
main_hir.step(LV2Call::new("print").arg(n).arg("Hello World"));

// creates a `Module` from the `ModuleBuilder`
let module = module.build().unwrap();
println!("{}", module);

// load the module and run it
let mut vm = lovm2::create_vm_with_std();
vm.add_main_module(module).expect("load error");
vm.run().expect("run error");

内部源代码引用

用户评论

这东西很快 - Sonic

我以为我很简单... - 毕达哥拉斯定理

依赖

~2.5–3.5MB
~72K SLoC