编程 Vercel Labs 的 Zero:语义图即程序数据库,Agent 靠 zero patch 而不是猜源码

2026-09-25 00:03:16

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 。

推荐文章

程序员茄子在线接单