#language #virtual-machine #garbage-collection #dynamic #bytecode #compact #stack-based

nightly zub

一个快速、基于栈的动态语言虚拟机,具有直观的IR构建器、垃圾回收和NaN标记

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次下载

MIT许可证

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