Almide · 迄今为止的故事
250 天,从 10,000 行到 700,000 行。
README 说我要做什么,实际发布了什么,途中又舍弃了什么。全部取自仓库自身的历史。
各个里程碑时,仓库中的 Rust 代码行数
↔ 左右滑动或横向滚动,查看完整图表。
统计仓库中的所有 .rs 文件,包含注释和空行。7 月下旬曾下降一次,因为标准库被改写为 Almide。
序章 — 3 月 7 日至 9 日
一门让 AI 用最少 token 写代码的语言。
首次提交在 3 月 7 日。两天、143 次提交之后,v0.1.0 发布了。当时 README 写道:
Almide 是一门让 AI 直接、高效地编写代码的语言。设计目标是让大语言模型用最少的 token、最少的思考表达意图。
当时只有 10,000 行 Rust:词法分析器、解析器、类型检查器、格式化工具,以及 Rust 和 TypeScript 两种输出。没有证明,没有检查器。目标是让代码容易写。
第一章 — 3 月 9 日至 14 日
一天发布四个版本。
v0.2.0、v0.2.1、v0.2.2 和 v0.3.0 都在 v0.1.0 发布的同一天发布。第二天加入了泛型和元组。3 月 11 日的 v0.5.0 引入借用推断,第一次显露出这门语言如今的方向。
那一周形成了两个习惯。v0.5.7 的标题是 MiniGit 在 40 次试验中全部通过
:我开始统计模型写出的程序究竟能不能通过。而 v0.5.13 开始跨模型对语法进行 A/B 测试。
第二章 — 3 月 17 日至 30 日
先加进来,再舍弃。
连续两周,几乎每个版本都在删除东西。++ 被 + 取代。uuid 和 crypto 离开了标准库。JavaScript 输出并入 TypeScript。do 块被移除。newtype 被别名取代。隐式转换也被删除。
然后到了 v0.9.5:wasm 目标实现完整标准库功能对等,TypeScript 目标被移除。
输出从 Rust 和 TypeScript 变成三种,又回到两种,最终留下原生代码和 WebAssembly。双目标并不是原定计划,而是三周尝试后留下的结果。
到 3 月 30 日的 v0.10.0,代码已达 74,000 行。三周增长七倍,已经超出一个人能从头到尾读完的规模。
第三章 — 4 月至 5 月 21 日
把它做成工具。
节奏慢了下来。4 月平均每天 30 次提交,不到 3 月的一半。4 月 22 日至 5 月 1 日完全没有提交,是整个 250 天里唯一持续三天及以上的空档。
这期间发布的内容面向实际使用者:编译器拆分为九个 crate,不再需要 Rust 的安装器,根据记录的模型失败案例持续调整诊断信息的循环,以及 v0.14.6,LLM 优先版本
,带来可直接复制粘贴的修复和 almide fix。随后又有了 REPL 和编辑器服务。
也走过一些岔路。LLVM 后端被移出主线。GPU shader 目标发布了。所有值类型都加入了写时复制,mut 成了关键字。
第四章 — 5 月 22 日至 6 月 10 日
奠定核心的四天。
5 月 23 日:wasm 性能达到与 Rust wasm 相当的水平。5 月 24 日:336 字节的 Hello world
。5 月 25 日:引入 Perceus,无需注解、无需 GC 的内存管理。5 月 26 日:用 Lean 4 证明每次分配都会被释放。
速度、体积、内存、证明,连续四天。第一份证明出现在第 80 天。
接着是 6 月 8 日和 9 日。v0.26 在这两天发布了 22 个补丁版本,每修复一个跨模块 bug 就发布一次。
第五章 — 7 月 5 日至 20 日
绝不输出错误的字节。
25 天没有发布次版本。然后是 v0.28.0:v1 trust-spine 发布,可选择启用经过验证的 wasm 代码生成,绝不输出错误的字节。
目标从生成正确的输出,转向拒绝生成无法检查的输出。
十天后,它成为默认路径。再过一天,v0.30.0 的标题写着:修复 0.29.0 悄悄产生的错误值。
它成了默认路径,却在悄悄出错,而发布标题直接承认了这一点。
第六章 — 7 月 24 日至 8 月 1 日
开始怀疑测量本身。
九天里发布十七个次版本。标题说明了一切:
一个测错了程序的质量门禁
· 绿灯不能再说谎:重新启用十六个实际上没有检查任何内容的门禁
· 一个什么都没安装的 CI 步骤报告成功
· 撤回三项测量结果
· 收回 4.4 倍的性能提升
检查显示绿灯,却没有检查任何东西。性能提升源于测量错误。这些问题被逐一发现,并公开撤回相关结论。这也是唯一一段代码量缩小的时期。
第七章 — 8 月 2 日至 30 日
重新设计语言表面。
内部稳定后,作者直接接触的部分被重新设计。错误传播从隐式变为显式:自动 ? 在同一天被弃用并移除。整个 try_ 函数家族被删除。v0.60.0 的标题只有三个英文单词:结构部分正式发布。
第八章 — 9 月至 11 月 7 日
翻了一倍。
从 v0.60.0 到 v0.69.1,Rust 代码从 315,000 行增长到 663,000 行。证明从 10,000 行增长到 24,000 行。Rust 测试从 30,000 行增长到 125,000 行。每日提交从 58 次增长到 184 次。
README 的第一句话也变了:
Almide 是一门面向 AI 编写和修改代码的静态类型语言。它并不声称模型总能写对,而是要在模型写错时,让编译器在编写阶段指出问题,并给出修复方式。
尾声 — 11 月 10 日和 11 日
把它展示给大家。
第 250 天,我第一次公开发帖介绍它。帖子被自动删除,收到的评论也很尖锐。给你其中一个函数,你知道它是做什么的吗?
于是我做了统计。18,843 个函数中,有 12 个没有任何调用方。一个 493 行的文件,在已不被任何地方引入后,仍被修改了三次。95 个文件是按大小而非职责拆分的。随后,我加了一项检查,让这些数字只能下降。
README 曾如何描述它
3 月3 月至 10 月11 月它起初想让代码更容易写,后来转向在代码出错时将其拦住。途中被舍弃、撤回或停用的东西,几乎都发生在这个转变过程中。
投入的时间
每天多少小时。
提交时间能回答一部分。平均而言,在有提交的日子里,一天中有 13.6 个不同小时至少出现过一次提交。到了 10 月和 11 月,这个数字超过了 18。
那不是我的工作时长。有 38 天的提交分布在一天中的 20 个或更多小时,凌晨 3 点到 5 点之间共有 784 次提交。没有人能这样工作。是智能体在我睡觉时继续运行。这些数字反映的是工作持续运行了多久,而我没有记录自己在桌前坐了多久。
各月平均每日提交次数
↔ 左右滑动或横向滚动,查看完整图表。
每个月下方:一天中至少有一次提交的小时数的平均值。
困难之处
代价最大的部分。
- 舍弃能用的代码。TypeScript 目标、JavaScript 目标、LLVM 后端和第一个 wasm 生成器,都曾正常工作,也都被移除了。
- 两天发布 22 个补丁版本。每一个都修复了某个使用者可能遇到的 bug。
- 把会悄悄出错的实现设为默认。然后在第二天的发布标题里写明这一点。
- 发现绿灯毫无意义。十六项不做检查就通过的检查,以及一个什么都没安装就报告成功的 CI 步骤。
- 收回 4.4 倍的性能提升。因为错的是测量,不是代码。
- 两个月翻倍。超过了我能读完的规模,而这正是如今整个设计试图解决的问题。
- 听取编译器开发者的批评。并发现他们有些地方说得对。