概要
- Anthropic社のClaude が完全自動でCコンパイラ「CCC」を開発した事例の検証
- GCC との比較実験をSQLiteとLinuxカーネルで実施
- CCCはCコードの正確なパース はできるが、最適化やリンカ処理で課題
- SQLiteの機能的正しさは確保 されるも、実行速度はGCCに大きく劣後
- リンクエラーやパフォーマンス低下 の根本原因を技術的に解説
Claudeが自動生成したCコンパイラ「CCC」の実力検証
- Anthropic社のClaude Opus 4.6 が100%自動生成したCコンパイラ「CCC」の性能検証
- CCCはRust製 で、x86-64/i686/AArch64/RISC-V 64に対応
- フロントエンド、SSAベースIR、最適化、コード生成、アセンブラ、リンカ、DWARFデバッグ情報まで 全て自作実装
- GCCとCCC を同一ハードウェア・同一ソースで比較検証
- SQLite(標準C)とLinuxカーネル(超巨大Cコード) をテスト対象に選定
Cコンパイルの4段階と各工程の難易度
- プリプロセッサ :#includeや#define等の前処理、ソース展開
- コンパイラ :C言語構文からアセンブリ生成、型チェックや最適化も担当
- アセンブラ :アセンブリを機械語(オブジェクトファイル)に変換
- リンカ :複数オブジェクトを一つの実行ファイルに結合、アドレス解決やメモリ配置
- リンカ工程が最難関 :複雑な再配置やシンボル管理、PIE、スクリプト対応等
CCCとGCCの比較検証方法
- Debian系VM(6vCPU, 16GB RAM) 上で同一条件テスト
- GCC 14.2.0 vs CCC(gcc_m16機能で一部GCC委譲)
- .S(アセンブリ)はGCC、.cはCCC で処理するラッパースクリプト運用
- SQLiteベンチマーク :I/O影響排除、42種SQL操作・10フェーズでCPU性能重視
- Linuxカーネル :v6.9(x86_64 defconfig)、ビルド完了までの挙動観察
主な検証結果と数値比較
- カーネルビルド時間 :GCC 73.2分、CCC 42.5分(リンク失敗で未完了)
- カーネルビルド結果 :GCCは成功、CCCはリンク失敗(約40,784件の未定義参照)
- SQLiteコンパイル速度 :GCC(-O0)64.6秒、CCC 87.0秒(1.3倍遅い)
- SQLiteバイナリサイズ :GCC 1.55MB、CCC 4.27MB(約3倍)
- SQLite実行時間 :GCC(-O0)10.3秒、CCC 2時間6分(737倍遅い)
- メモリ使用量 :CCCはGCC比で5.9倍消費
- クラッシュ・正当性テスト :両者とも全パス
カーネルビルド失敗の詳細
- CCCは全Cファイルを正確にコンパイル (0エラー、96警告)
- リンカで40,784件の未定義参照 :__jump_table, __ksymtab等の再配置・シンボル生成ミス
- リンカ実装の難しさ を象徴、C言語処理自体は問題なし
SQLiteベンチマーク詳細
- CCCは最適化フラグ(-O2等)を無視 :常に同一バイナリ生成
- GCCの-O2は多段最適化(レジスタ割付、ループ展開、関数インライン化等) を実施
- CCCは最適化パスが15個あるが、全レベルで同一動作
- 「最適化なし」での比較が公平 :CCCは1.3倍遅いのみ
- 最適化有効時はGCCが圧倒的に高速 :CCCは全く追いつけない
実行性能とボトルネック分析
- 単純クエリは1~7倍遅いが、複雑なJOINやサブクエリは数千~十万倍遅い
- 主原因はレジスタスピリング :変数がレジスタに乗らずスタック多用
- SQLiteの主要関数(sqlite3VdbeExec)はローカル変数100個超、巨大switch文
- CCCはほぼ全変数をスタックに退避し、スタックオフセットが1万バイト超に達する例も
- GCCは最適化なしでも効率的なスタック・レジスタ管理 を実施
今後の課題とAI自動生成コンパイラの展望
- C言語の正確なパース・アセンブリ生成はAIでも可能
- 最適化・リンカ・アセンブラの精度と効率性が圧倒的に不足
- GCCは40年分の知見と最適化技術の塊、現状のAI生成コンパイラは実用には遠い
- CCCの「動くCコンパイラを完全自動生成できた」点は画期的
- 今後は最適化パスの強化・リンカ精度向上が課題
まとめ・総評
- Claude Opus 4.6によるCCCは「Cコードを通す」レベルには到達
- 実用レベル(高速・コンパクト・複雑コード対応)には大きな壁
- AI自動生成コンパイラの「現状の限界」と「今後の可能性」 を示す好事例