ZZust

Runtime

从脚本文件到 JIT 函数,再到 GPU kernel

Zust workspace 把语言前端、动态值模型、JIT VM、对象树、GPU 后端和编辑器工具放在一起,方便把脚本嵌入真实 Rust 系统。

cargo check --workspace
cargo run -p vm --example minimal_vm
cargo run -p zusts

parser / compiler

把 `.zs` 源码解析成 AST,再进行符号解析、类型推断和 IR 生成。

vm / dynamic / root

提供 Cranelift JIT、动态边界模型和可寻址对象树。

vm-spirv / vm-metal / vulkan

把 Zust 的计算子集推向 SPIR-V、Metal 和 Vulkan dispatch。

parser / compiler

parser 使用手写词法分析和递归下降解析器,compiler 负责 AST 到 IR、符号表、类型推断和函数编译准备。这样语言可以保持小而透明,方便继续扩展语法。

Dynamic 模型

`dynamic` crate 提供统一的运行时值模型,覆盖 list、map、struct、bytes、typed vector、JSON 和 MessagePack。普通脚本语法如 `list[idx]`、`map.key` 和 `value.len()` 会降到这些运行时辅助方法上。

let user = {name: "Ada", points: 10};
user.points += 5;

let events = [];
events.push({kind: "login", user: user.name});

VM 与 Cranelift JIT

`zust-vm` 可以导入源码并编译函数。宿主 Rust 代码拿到函数指针后,可以把稳定脚本路径作为本地函数调用。

let compiled = vm.get_fn("demo::add", &[Type::I64, Type::I64])?;
assert_eq!(compiled.ret_ty(), &Type::I64);

root 对象树

`root` 是可寻址对象树。脚本可以通过路径添加、读取、维护 list/map,也可以接入 Redis 或本地存储抽象,用于智能体状态和运行时对象管理。

root::add("local/user/1", {name: "Zust", points: 10});
let user = root::get("local/user/1");

root::add_list("local/events");
root::push("local/events", {kind: "login"});

GPU 后端

`gpu` 模块提供 SPIR-V 编译/检查、Metal 编译/检查、Vulkan 运行和 Metal 运行入口。编译 shader 不一定需要真实 GPU dispatch;运行时才需要对应平台 feature 和驱动。

gpu::spirv_compile(options);
gpu::spirv_check(options);
gpu::metal_compile(options);
gpu::vulkan_run(options);

LSP 与编辑器

仓库包含 `zust-lsp` 和 Zed 扩展。tree-sitter grammar 覆盖函数、结构体、impl、闭包、list/map、路径调用、range 和类型标注等常见语法。