Vercel Labs 的 Zero:语义图即程序数据库,Agent 靠 zero patch 而不是猜源码
Zerolang 是一门实验性的图原生(graph-native)编程语言,它的程序数据库就是语义图本身。人类负责提出结果要求,Agent 负责查询图、提交经过检查的编辑、证明结果正确。项目由 Vercel Labs 发起,Apache-2.0 许可,创建于 2026-05-15,编译器用 C 实现。主页:https://zerolang.ai ,仓库:https://github.com/vercel-labs/zerolang 。
安全警告:Zerolang 是实验性项目,请预期破坏性变更、粗糙的边缘行为和安全隐患。在隔离工作区里运行它,不要拿它对接生产系统或敏感数据。
从一句请求开始
预期的工作流就是一次普通对话,比如「build hello world for zerolang」。Agent 应该去用编译器,而不是从源码文本里猜:
zero init
zero patch --op 'addMain' --op 'addCheckWrite fn="main" text="hello from zero\n"'
zero run
结果可以作为文本投影来审查:
pub fn main(world: World) -> Void raises {
check world.out.write("hello from zero\n")
}
这个 .0 文件是 zero.graph 的投影。人类读它、审查它,偶尔改它;Agent 正常情况下应该继续走 zero query 和 zero patch。
程序数据库
传统的 Agent 写代码循环把文本当作事实来源:Agent 写文本 → 检查 → 格式化 → 构建 → 看失败信息 → 再循环。
Zerolang 把 Agent 拉得离编译器更近:Agent 查询图 → Agent 提交受检补丁 → 编译器判断,无效或过期就退回 → 有效则 Agent 跑任务验证 → 有必要时人类审查投影。
图给 Agent 提供了明确的抓手:符号、节点 ID、图哈希、类型、效果(effects)、所有权事实、能力(capabilities)、导入、调用边、目标相关事实。编辑针对的是语义结构,而不是行号区间。过期的图哈希、意料之外的字段值、非法形状和类型错误,都会在写入存储之前失败。
目前已经有的东西
zero.graph是图优先(graph-first)包的、经过检查的编译器输入。.0文件是人类可读的投影,不是 Agent 的常规创作界面。zero patch应用经过检查的图编辑,拒绝过期或无效的改动。zero query、zero inspect、zero check、zero test、zero run通过适合 Agent 的命令暴露编译器事实。zero import和zero export把投影边界显式化,这样人类的文本改动不会悄悄和图产生分歧。
安装
curl -fsSL https://zerolang.ai/install.sh | bash
export PATH="$HOME/.zero/bin:$PATH"
zero --version
安装 Agent 引导技能:
npx skills add vercel-labs/zerolang
编译器自带与版本匹配的 skills,供 Agent 使用:
zero skills
zero skills get agent
zero skills get graph
zero skills get language
zero skills get stdlib
日常循环
zero query
zero patch --op help
zero patch --op 'addMain'
zero check
zero test
zero run --
默认输入是当前目录。只有想显式指定时才写 .。
人类审查投影文本:zero export;zero verify-projection。
人类有意编辑投影:zero import;zero check。
Runtime 目标
token 高效的检查;低内存占用;快速启动和构建;低运行时延迟;显式能力;无依赖的小体积产物。
开发 Zerolang
pnpm install; make -C native/zero-c; bin/zero --version
pnpm run docs:build; pnpm run conformance; pnpm run native:test; pnpm run command-contracts
pnpm run conformance:local -- --list; --shard 1/4; pnpm run command-contracts:local
文档在 https://zerolang.ai 。
版本演进
据 InfoQ / OSCHINA 报道,到 2026-09-24 时点约为 v0.3.4,star 数 5300+。
单一的 zero 二进制在每个子命令上都支持统一的 --json 标志。诊断携带稳定代码(例如 NAM003)和带类型的修复元数据(例如 declare-missing-symbol)。zero fix --plan --json 返回机器可读的修复计划,Agent 可以接受、编辑或拒绝它,而不是盲目应用。
副作用是显式的:任何与外部世界交互的函数都必须接受一个 World 能力参数,由编译器强制执行。只看函数签名就能判断这段代码是否访问网络、文件系统或标准输出。
版本上的三个节点:
- v0.1.4 采用行语法。
- v0.2.0 把规范化的
.0文本提升为原生源码载体。 - v0.3.0 在编译器边界彻底拒绝源码投影输入,改以二进制
zero.graph作为编译器输入,.0降为人类可读投影,Agent 改走zero query/zero patch。补丁受图哈希保护,过期或无效的编辑在写入存储之前就会失败。
对老用户冲击不小:文本优先的包需要先用 zero import 把源码导入图中,再通过 zero export 与 zero verify-projection 完成人工审查和 CI 漂移检查。v0.3.2 把大程序 zero import 的速度提升了约 12 倍。
早期报道提到,Hello World 可以在一毫秒内构建,二进制约 16.2 KiB。
取舍与风险
和成熟语言对比:二进制体积与显式分配更接近 Zig,而不是 Rust;它没有 Rust 借用检查器那样的成熟度和生态。相比 Go,它用绿色线程和较大运行时换来了更小的体积、不依赖外部组件的产物。
社区的质疑集中在两点(HN 上反应平淡):Agent 为什么要学一门新语言,而不是继续用它们已经熟悉的 Python / TypeScript;语义图带来的优势缺乏量化证明。
项目仍处于实验阶段,不要在隔离环境之外、或生产/敏感数据上使用。
项目地址 https://github.com/vercel-labs/zerolang ,官网文档 https://zerolang.ai 。