56个版本
0.3.14 | 2020年5月19日 |
---|---|
0.3.13 | 2020年5月19日 |
0.2.21 | 2020年5月14日 |
0.1.18 | 2020年5月12日 |
#746 in 编程语言
每月41次下载
105KB
3K SLoC
Zub虚拟机
一个超级快速、基于栈的动态语言虚拟机
特性
- NaN标记值表示
- 标记-清除垃圾回收
- 紧凑的字节码格式
- 易于使用的中间表示
里程碑
- 基于Briones先生工作的优化虚拟机
- 追踪垃圾回收器
- 高级IR
- IR编译
- 优化器(目前达到80-90%的Python速度,目标是更快)
- 分析器和反汇编器
示例
构建IR很简单
让你的后端运行起来不应该很难。
以下代码为评估以下表达式构建IR:sum = 20.0 + 30.0
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看起来很顺畅时。只需让虚拟机将其通过编译器,并运行。
let mut vm = VM::new();
vm.exec(&builder.build());
语言
Hugorm
Hugorm是一种动态、类似于Python的语言,用于构建小型数据科学和游戏项目。
https://github.com/nilq/hugorm
示例
examples/
文件夹包含两个在ZubVM上运行的小型语言实现。
Atto
Atto是一种功能性的、极简语言,展示了实现一个工作、图灵完备语言需要多少的代码。以下是一个预告
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–12MB
~135K SLoC