Deed 是一个契约优先(contract-first)的编程语言,专为智能体编写、人类审查代码的场景而构建。在 Deed 中,函数签名不只是形式,而是编译器会兑现的承诺;函数体被检查是否遵守该契约,语言中没有任何机制能让函数越过签名所承认的范围。
用途与设计动机:当前大量代码由机器生成,生成代码近乎免费,但阅读、信任以及数周后发现微妙错误却代价高昂。现有语言大多为逐字符打字的人优化,存在隐式行为、巧妙简写、同一表达多种写法等问题。Deed 做出不同取舍:签名承载完整契约,函数体被检查,函数无法意外或故意访问签名未允许的外部能力(例如网络)。这使沙箱不再只是容器,而成为一种类型。
主要能力:
- 编译器进行词法、语法、名称解析、类型检查、契约检查和效果行检查;
- 可运行程序,支持参考解释器或 WebAssembly 后端;
- deed build 写出核心模块,--component 在导出值跨越规范 ABI 时写出组件;
- 程序通过显式能力获得权限,两个引擎使用相同的主机规则;
- deed review 比较变更前后的已检查模块集,生成收据,指出新声明的权限以及契约层级降级的义务;支持 --format json 输出稳定对象,并提供 --deny-new-authority、--deny-weaker-promises、--deny-new-guarded 等策略门禁;
- deed mcp 通过 stdin/stdout 实现 Model Context Protocol,让编码智能体直接询问编译器,而不必从终端输出中抓取信息;它不持有能力,程序以文本进入、答案以文本离开,若程序的效果行涉及文件会在运行前被拒绝;
- 语言服务器 deed lsp 提供诊断、类型悬停、跳转声明、查找引用、重命名、补全、快速修复、格式化、大纲等功能;
- 编辑器支持 VS Code 语法高亮和语言服务器客户端,Helix 与 Neovim 可通过少量配置启动语言服务器,无需插件;
- std 库文档索引,deed doc 可为任意模块生成文档页。
使用方式: 安装:在 Linux 或 Apple silicon Mac 上,单行命令可下载对应机器的发布资产,校验哈希与发布一致后,将单个文件放入用户目录,无需密码;也可从发布页手动下载 Linux、macOS、Windows 的 deed 二进制,解压即用,编译器、格式化器、测试运行器和语言服务器都在该单文件中。使用 Rust 1.88 或更新版本时,可从 crates.io 或克隆获取,包名为 deed-lang,安装的二进制为 deed。 开始项目:deed new 会写出项目,名称同时作为目录和模块路径。没有清单文件,因为清单只表示依赖树外代码的位置,而新项目没有依赖。 快速实验:没有 REPL。Deed 输入是声明模块,deed run 从 main 进入,不计算顶层表达式。可用临时 .deed 文件配合 deed check、deed test 或 deed run。
适用场景: 适合智能体生成模块、人类审查变更的场景;适合需要严格契约、效果和能力约束的代码库;适合希望以签名而非函数体作为审查重点的团队;适合需要为智能体补丁提供变更收据的 CI 流程。
限制与状态: 工具链可用,但采用是开放问题;除本组织外,公开仓库中尚未包含已知的 Deed 源码。最大的未完成技术工作是值回收(value reclamation)和更广泛的组件适配器。版本为 0.x,语言仍可能变动,一个次版本能编译的文件可能在下一个次版本无法编译,破坏性变动会在发布说明中标注,deed fix 尽可能处理机械部分。校验和来自发布二进制同一来源,只能发现损坏下载,无法发现发布被入侵。仓库中每个 .deed 文件由一人编写,这是该语言最大的开放问题;benchmarks 目录提供一组任务和评分器来量化这一点。用户可见的语言、诊断、库和工具变更记录在 CHANGELOG.md。
详细设计文档、教程、操作指南和标准库 API 见仓库内相应文件。