1个不稳定版本
0.0.1 | 2023年1月12日 |
---|
#16 in #基于堆栈
110KB
3K SLoC
Zub VM
一个超快的基于堆栈的动态语言虚拟机
警告
这个库最近被分叉,正在重做以添加新功能,不要期望太多东西是稳定的。
特性
- NaN标记值表示
- 标记和清除垃圾回收
- 紧凑的字节码格式
- 易于使用的中间表示
里程碑
- 基于Briones先生工作的改进VM
- 跟踪垃圾收集器
- 高级IR
- IR编译
- 优化器(目前达到80-90%的Python速度,目标是更快)
- 分析器和反汇编器
示例
构建IR很简单
让你的后端运行起来不应太困难。
以下代码构建了评估 sum = 20.0 + 30.0
的IR
let mut builder = IrBuilder::new();
let a = builder.number(20.0);
let b = builder.number(30.0);
let sum = builder.binary(a, BinaryOp::Add, b);
builder.bind(Binding::global("sum"), sum);
当你觉得IR看起来很顺畅时。只需让VM通过编译器运行,并执行它。
let mut vm = VM::new();
vm.exec(&builder.build());
语言
Hugorm
Hugorm是一种动态的、类似Python的语言,旨在为小型数据科学和游戏项目构建。
https://github.com/nilq/hugorm
示例
在 examples/
文件夹中包含了两个在ZubVM上运行的简单语言实现。
Atto
Atto是一种功能性的、极简的语言,展示了实现一个有效的工作Turing完整语言需要多么少的代码。语法可以在以下预告中看到
fn sum x is
if = x 0
1
+ sum - x 1 sum - x 1
fn main is
sum 12
Mini
Mini是一种简单的语言,看起来基本上是Rust和JavaScript的混合。它涵盖了比Atto更广泛的特性集合。尽管如此,这也在语言的大小上得到了体现。
let bar = 13.37;
fn foo() {
fn baz(c) {
return c + bar;
}
return baz(10);
}
global gangster = foo();
特别感谢
依赖项
~5–11MB
~129K SLoC