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任せ(私は1行も書いていません)で、Rustで約1万行の実装を行い、FizzBuzzはおろか動的配列や構造体まで動く言語が完成しました。

成果物はGitHubに置いてあります。 https://github.com/takoyakisoft/quad-tri/

言語コンセプト:Quad と Tri

「人間にとっての視認性を高めつつ、AIのトークン効率も維持する」というコンセプトで、以下の2つの言語を設計しました。

  • Quad: キーワード(予約語)をすべて4文字に統一
  • Tri: キーワードをすべて3文字に統一

拡張子でコンパイラが判別します。

狙いは「人間への視認性」+「トークン効率」

最大のコンセプトは「縦のラインが揃うこと」です。 予約語の長さが固定されるため、コードを書いたときに文の開始位置が自然と縦にピシッと揃い、人間にとって非常に見やすくなります。

また、採用したキーワードは、スペースを含めて確実に1トークンで表せる一般的な英単語から選定しています。 Pythonなどの既存言語と同様にトークナイザで分割されないため、AIにとっても生成コスト(トークン効率)が良い状態を維持しています。

サンプルコード

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のクレート(ライブラリ)だけで完結し、かつネイティブにexeを出力できるため、今回の「2日で爆速開発」という趣旨に最適でした。IR(中間表現)を渡すだけでサクッと動きます。

実装できた機能

AIと壁打ち(という名の完全な指示出し)を繰り返した結果、以下の機能まで実装できました。

  • ネイティブexe出力 (Windows/Linux)
  • 変数、関数、ループ、条件分岐
  • 動的配列、構造体
  • レシーバ関数
  • Result / Option 型
  • メモリの確保と解放(ここはまだバギー)

正直、Brainfuckしか知らなかった人間が、2日でレシーバ関数や構造体を持つ言語を作れるとは思っていませんでした。「車輪の再発明」は入出力が明確なので、AIが最も得意とするタスクなのかもしれません。

苦労した点・AIの評価

固定長配列の記法だけは、AIと議論しても良い案が出ず、少し独特な記法になっています。

1
2
# [サイズ]型 というGoライクな書き方
var wds: [6]text := ["foo", "bar", ...]

また、生成されたコードをAI自身にレビューさせたところ「エラーハンドリングが雑」「信頼性が低い」と辛辣なコメントを貰いました。動くけどプロダクションコードではない、というAIコーディング特有の壁は感じます。

おわりに

「ネタ言語を作ろう」という動機でしたが、実際にexeが動いたときは感動しました。 コーディングは100% AI任せでしたが、コンセプトや仕様を決める楽しさは人間側にしっかりと残されています。 2026年、プログラミングは「書く」ものから「仕様を語って生成させる」ものに完全にシフトしたと実感した週末でした。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。