当前位置: 首页 > news >正文

zerolang:Vercel 造了一门给 AI Agent 写代码的编程语言

zerolang:Vercel 造了一门给 AI Agent 写代码的编程语言

看完你会发现,你之前对"编程语言给谁用"的理解可能要更新了。

编程语言一直有两个用户:人和机器。zerolang 加了第三个——AI Agent。

这不是又一个"用 AI 写代码"的工具。zerolang(来自 Vercel Labs)从根本上重新思考了一个问题:如果一门语言的编译器原生暴露语义结构,Agent 能不能少猜一点、少错一点?

答案是一个实验性的 graph-first 编程语言,GitHub 上 4.7K Stars,Apache 2.0 协议。它用 C 写编译器,用 .0 作为源文件后缀,目前版本 v0.2.0。

本文提纲

  1. 核心问题:Agent 编辑代码为什么总出错
  2. Graph-First:源码是给人看的,图是给 Agent 用的
  3. 语言速览:.0 文件长什么样
  4. ProgramGraph:编译器直接暴露语义结构
  5. Checked Graph Edits:Agent 不再盲改代码
  6. Agent 工作流接口:编译器即开发工具
  7. 设计哲学与当前状态

核心问题:Agent 编辑代码为什么总出错

LLM 编辑代码的方式本质上是文本补丁——"把第 42 行到第 45 行替换成这段代码"。这种方式有几个致命弱点:

  • 猜测引用关系:改了一个函数名,不知道哪些地方调用了它
  • 过时的上下文:Agent 看到的代码可能已经被修改了,但它不知道
  • 级联错误:改了类型签名,不知道下游有没有破坏
  • 验证延迟:改完代码还得单独跑一遍编译器、linter、测试才知道对不对

每一步都是猜。猜错了就进入"改了又错、错了又改"的循环,token 烧了一大堆。

zerolang 的核心洞察:源码文本对人类友好,但对 Agent 来说是一个有损的接口。Agent 需要的不是代码文本,而是程序的语义结构。

Graph-First:源码是给人看的,图是给 Agent 用的

zerolang 的架构把"人看的"和"Agent 用的"分成两层:

MERMAID_BLOCK_0

关键设计决策:

  • 源码仍然是唯一的真实来源(Source of Truth)。.0 文件是人审阅、审计、版本控制的 artifact
  • ProgramGraph 是编译器从源码派生的结构,不是独立的存储格式
  • Agent 通过操作 Graph 来间接修改源码,编译器负责验证、重写、格式化

这不是"取代程序员",而是"让 Agent 在改代码的时候少犯错"。

语言速览:.0 文件长什么样

一个小程序:

fn answer() -> i32 {
    return 40 + 2
}pub fn main(world: World) -> Void raises {
    if answer() == 42 {
        check world.out.write("math works\n")
    }
}

几个值得注意的设计:

  • 显式 fallibilityraises 关键字标记可能失败的函数
  • 显式 capabilityworld 参数通过类型系统传递外部能力,不是全局变量
  • 显式错误处理check 关键字处理可能失败的操作
  • 无分号:语句结尾不需要分号

语法故意设计得很"无聊"——容易索引、比较、格式化、审计和重新生成,同时仍然像正常代码一样可读。

ProgramGraph:编译器直接暴露语义结构

这是 zerolang 最核心的创新。Agent 不需要从文本推断程序结构,编译器直接告诉你:

zero graph dump examples/hello.0

输出:

zero-graph v1
origin source-text
module "hello"
hash "graph:b8a019041020df03"node #ea5ea1ca Function name:"main" type:"Void" public:true fallible:true
node #f9ce8b3e Param name:"world" type:"World"
node #421a4d4b MethodCall name:"write" type:"Void"
node #610c78bf Literal type:"String" value:"hello from zero\n"
edge #421a4d4b arg #610c78bf order:0
edge #ea5ea1ca body #6c48dda8

Agent 拿到的不是模糊的文本,而是精确的语义事实:

  • Node ID:每个语法节点有唯一标识符,Agent 可以精确指向它
  • Graph Hash:整个图的哈希值,用于检测上下文是否过时
  • 类型信息:已解析的类型,不需要 Agent 猜测
  • Effects/Ownership/Capabilities:副作用、所有权、能力约束全部显式化

Agent 可以从任意入口开始导航——一个符号、一个诊断、一个调用、一个模块——只拉取相关的语义切片,不用加载整个文件。

Checked Graph Edits:Agent 不再盲改代码

传统的 Agent 编辑流程:改文本 → 格式化 → 重新解析 → 编译检查 → 发现错误 → 再改。

zerolang 把这些步骤压缩成一个编译器中介的操作:

zero graph patch examples/hello.0 \
  --expect-graph-hash graph:b8a019041020df03 \
  --op 'set node="#610c78bf" field="value" expect="hello from zero\n" value="hello graph\n"'

这个命令做了什么:

  1. 验证 graph hash:如果源码已经变了(hash 不匹配),直接拒绝,防止过时编辑
  2. 验证 expect 值:如果目标字段的当前值和预期不一样,拒绝编辑
  3. 执行语义修改:在 Graph 层面修改 node #610c78bfvalue 字段
  4. 编译器验证:验证修改后的 Graph 是否合法
  5. 重写源码:验证通过后才写回 .0 文件
  6. 格式化 + 重新检查:确保输出是干净、可编译的代码

一个命令完成"验证 → 修改 → 写回 → 格式化 → 检查"全流程。 Agent 不再需要自己拼凑这些步骤。

对比传统方式:Agent 在 Python 项目里改一个函数名,需要自己 grep 所有引用、逐个替换、跑一遍 pytest、发现还有个 import 没改、再改、再跑。在 zerolang 里,重命名是一个语义操作——"把 Function node #ea5ea1ca 的 name 改掉",编译器负责找到所有相关引用并一起更新。

Agent 工作流接口:编译器即开发工具

zerolang 把 Agent 需要的所有接口都收进了编译器 CLI,每个命令都有结构化输出(--json):

命令 提供什么
zero skills get language 随编译器版本匹配的语言规则
zero check --json 诊断信息:错误码、span、expected/actual、修复建议
zero parse --json 解析摘要:声明、函数签名、body 节点类型
zero graph --json 模块、导入、公开符号、capabilities、effects
zero graph dump 确定性的 ProgramGraph 文本输出
zero graph patch 带前置条件的 Checked Graph 编辑
zero fix --plan --json 类型化的修复计划(只看不改)
zero size --json 体积报告、保留的 helpers、安全约束

当编译检查失败时,输出不只是"这里有错",而是结构化的诊断信息:

{
  "code": "NAM003",
  "message": "unknown identifier 'message'",
  "expected": "visible local, parameter, function, or builtin",
  "actual": "no matching visible symbol",
  "repair": {
    "id": "declare-missing-symbol"
  }
}

Agent 拿到 repair.id,就能直接生成对应的修复方案:

zero explain --json NAM003
zero fix --plan --json examples/broken.0

诊断 → 解释 → 修复方案 → 应用修复,整条链路都有结构化 API。

还有一个巧妙的设计:zero skills 命令。编译器自带的技能文档(语言指南、诊断说明、stdlib 文档)和二进制文件版本匹配。Agent 不用担心参考了过时的文档——编译器本身就是最新版的"说明书"。

设计哲学与当前状态

zerolang 的设计目标明确指向系统和嵌入式场景:

目标 具体要求
Token 效率 结构化输出减少 Agent 的 token 消耗
低内存 适合资源受限的运行环境
快速启动 编译器冷启动要快
快速编译 Agent 反馈循环不能被编译时间拖慢
低运行时延迟 生成的二进制要快
零依赖 编译产物不依赖任何运行时库

标准库目前只有三个模块:math.0path.0str.0。支持编译到 Linux musl 静态二进制。语言层面有显式的 effects 系统、capability 传递、所有权约束。

但必须说清楚:zerolang 现在是实验阶段,作者明确说"安全漏洞是预期的"。不适合生产系统、敏感数据或关键基础设施。语法和 API 都不是稳定契约,随时可能有破坏性变更。

来自 Vercel Labs(Vercel 的研究团队),主要用 C 写编译器核心(约 280 万字符),JavaScript/TypeScript 做工具链和测试。这不是一个周末项目——它有完整的 conformance 测试、benchmark 套件和 command contract 测试。

zerolang 问了一个有意思的问题:如果编程语言的编译器从第一天起就为 AI Agent 提供一等公民的接口,代码生成会变成什么样?答案还在探索中,但方向值得关注。

觉得编程语言该为 AI Agent 改设计?还是 Agent 该学着适应现有语言?评论区聊聊。觉得有意思就点个赞让更多人看到。


作者: itech001
来源: 公众号:AI人工智能时代
网站: https://www.theaiera.cn/
每日分享最前沿的AI新闻资讯和技术研究。

本文首发于 AI人工智能时代,转载请注明出处。

http://www.jsqmd.com/news/921804/

相关文章:

  • ZYNQ裸机双网口通信实战:手把手教你用LWIP和SDK搭建TCP服务器(附完整源码)
  • 最新珠海市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 高价值开源贡献如何提升应届生竞争力
  • 等高线图解读:从数据可视化到工程决策的实战指南
  • ChatGPT技术原理、能力边界与高效使用指南
  • 最新株洲市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 购物卡回收攻略,教你天猫超市购物卡快速变现! - 团团收购物卡回收
  • 紫光同创PGL22G开发板DDR3读写实验:从IP核安装到上板验证的完整避坑指南
  • AI项目成功基石:从数据收集到模型落地的五层金字塔实践
  • 从100+次用户访谈洞察AI产品设计:行为模式、提示工程与习惯养成
  • 从一次证书过期故障说起:深度复盘CentOS 7 chrony服务配置的那些‘坑’
  • 如何用5步实现B站视频转文字:小白也能快速提取视频内容
  • FinalShell安装踩坑实录:从‘软件正在运行’报错到成功连接Ubuntu 22.04的全过程
  • 树莓派外接屏幕驱动安装全攻略:从GitHub下载到命令行配置,一次搞定
  • 【二次分配问题】基于遗传算法 (GA)、粒子群优化 (PSO) 和萤火虫算法 (FA) 求解二次分配( QAP)问题(MATLAB 实现)
  • 校园网没WiFi密码?一根网线搞定树莓派SSH连接(Windows 11/10保姆级教程)
  • 别再折腾蓝屏了!Ubuntu 18.04 一键脚本搞定 XRDP 远程桌面(附脚本下载与避坑指南)
  • 最新新乡市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 手把手教你搞定IEEE GRSL投稿:Latex模板、返修回复信与版权转移全流程详解
  • 第一次打JSCPC(江苏省赛)就差点拿牌?给ACM新手的5点避坑指南
  • 告别Arduino IDE!用VSCode+PlatformIO给ESP32开发板点灯(附CH340驱动安装避坑)
  • Kali Linux 2023下,手把手教你搞定Ubertooth One驱动与固件识别(附常见报错解决)
  • PCB设计避坑指南:搞懂电压型与电流型PHY,你的网络变压器中心抽头到底该接电容还是电源?
  • 别再用Excel硬扛了!手把手教你用SPSS 25.0搞定销售数据预测(附完整数据文件)
  • 手把手教你配置ZYNQ Ultrascale+ MPSoC的DDR4:从MT40A512M16选型到Vivado参数实战
  • 最新新余市贵金属全品类黄金回收白银回收铂金回收 黄金变现避坑,专业回收全程透明:实力口碑排行榜门店及联系方式推荐 - 前途无量YY
  • 别再只会用手机连蓝牙了!手把手教你用STM32+ECB02模块实现两个设备自动配对通信
  • STM32 Blue Pill驱动I2C LCD屏:从硬件连接到软件配置全攻略
  • 鸿蒙数学 108 篇 第三十三篇:四象与四则运算对应法则
  • 拆解国产FPGA的HDMI显示链路:从MS7200芯片配置到TMDS编码的完整流程