Featured image of post 从零开始与AI共建编译器:Quad与Tri

从零开始与AI共建编译器:Quad与Tri

受到2025年底AI模型飞速发展的启发,我在零基础的情况下与AI一起从头开发了编译器“Quad”和“Tri”,并记录了直到输出原生exe的过程。

注意:这篇文章的原文是用智能手机写的,但是当我让Gemini修改时,写作风格几乎被完全重写了😢(原文的细微差别应该还保留着……!)

前言

看到从2025年底左右开始的AI模型(GPT-5.2 Codex, Gemini 3 Pro, Claude 4.5 Opus thinking等)的急剧性能提升,我突然想到: “如果是现在的AI,是不是可以从零知识开始写编译器,直到吐出原生exe?”

我自己关于编译器的实现知识止步于Brainfuck。 结果,编码工作100%交给了AI(我一行代码都没写),用Rust实现了约1万行代码,完成了一个不仅能运行FizzBuzz,还能运行动态数组和结构体的语言。

成果物放在了GitHub上。 https://github.com/takoyakisoft/quad-tri/

语言概念:Quad 和 Tri

以“提高人类的可视性,同时维持AI的Token效率”为概念,设计了以下两种语言。

  • Quad: 关键字(保留字)全部统一为4个字符
  • Tri: 关键字全部统一为3个字符

编译器通过扩展名进行区分。

目标是“对人类的可视性”+“Token效率”

最大的概念是“纵向线条整齐”。 由于保留字的长度固定,写代码时语句的开始位置自然会纵向对齐,对人类来说非常容易阅读。

此外,采用的关键字是从包含空格在内确实可以用1个Token表示的常见英语单词中选出的。 就像Python等现有语言一样,不会被Tokenizer分割,因此对AI来说也能维持生成成本(Token效率)良好的状态。

示例代码

Quad (4字符限制) 选择了func, cell (var), loop, back (return) 等4个字母的英语单词。请注意纵向线条整齐排列。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
func main() -> int:
    cell i: int := 1
    loop i <= 20:
        when i % 15 == 0:
            println("FizzBuzz")
        elif i % 3 == 0:
            println("Fizz")
        elif i % 5 == 0:
            println("Buzz")
        else:
            println(i)
        i := i + 1
    back 0

Tri (3字符限制) def, var, for, ret (return), iff/elf/els 等。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def main() -> int:
    var i: int := 1
    for i <= 20:
        iff i % 15 == 0:
            println("FizzBuzz")
        elf i % 3 == 0:
            println("Fizz")
        elf i % 5 == 0:
            println("Buzz")
        els:
            println(i)
        i := i + 1
    ret 0

技术栈与Cranelift的采用

编译器的后端采用了Cranelift

  • 语言: Rust
  • 后端: Cranelift
  • 开发环境: Github Actions, Windows 11, Codex Web/Jules

最初考虑过LLVM,但因为跨平台和开发环境(Windows/Web/CI)的设置似乎太复杂而放弃了。 Cranelift仅靠Rust的Crate(库)就能完成,而且能输出原生exe,所以最适合这次“2天爆速开发”的宗旨。只需要传递IR(中间表示)就能快速运行。

已实现的功能

与AI反复壁球(名义上是壁球,实际上完全是下达指令)的结果,实现了以下功能。

  • 原生exe输出 (Windows/Linux)
  • 变量、函数、循环、条件分支
  • 动态数组、结构体
  • 接收者函数
  • Result / Option 类型
  • 内存的分配和释放(这里还有Bug)

老实说,没想到只知道Brainfuck的人,能在2天内做出拥有接收者函数和结构体的语言。“重新发明轮子”因为输入输出明确,或许是AI最擅长的任务。

辛苦的地方・AI的评价

只有固定长度数组的记法,即使这AI讨论也没得出好主意,变成了稍微独特的记法。

1
2
# [Size]Type 这种类似Go的写法
var wds: [6]text := ["foo", "bar", ...]

另外,让AI自己审查生成的代码时,收到了“错误处理很杂乱”“可靠性低”等辛辣的评论。确实感觉到了虽然能动但不是生产级代码这一AI编码特有的障碍。

结语

虽然动机是“做一个段子语言”,但实际exe运行的时候还是很感动的。 虽然编码是100%交给AI,但决定概念和规格的乐趣牢牢地留在了人类这边。 这是一个让我切身感受到,2026年编程已经完全从“写”转变为“讲述规格并生成”的周末。

使用 Hugo 构建
主题 StackJimmy 设计