本篇文章更新時間:2026/02/10
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
CCC vs GCC:當 AI 嘗試打造編譯器時,我看見了什麼
編輯前言:這篇文章源自作者對 Anthropic 所推出的 CCC(Claude's C Compiler)進行實測,並與傳統強者 GCC 做正面比較。作為一個對 AI 與系統軟體同時感興趣的讀者,我認為這篇分析不只揭露差距,也讓我們重新思考 AI 在高複雜度基礎建設上的角色。原文連結:CCC vs GCC
核心觀點(Key Takeaways)
- CCC 能「編譯」Linux kernel 的所有 C 檔案,但無法成功連結成最終可執行檔。
- SQLite 測試顯示:CCC 產出的程式碼雖正確,但效能慢上數百到十萬倍。
- CCC 不真正支援最佳化選項(-O2 / -O3 等),所有優化旗標都被忽略。
- CCC 是 AI 工程能力的展示,而非可投入實務的編譯器。
深入解析
原文細緻地比較了 CCC 與 GCC 在 Linux kernel 以及 SQLite 上的行為表現。從架構細節到效能瓶頸,作者逐層剖析「AI 能做什麼、做不到什麼」。以下是我覺得最亮眼、也最具啟發性的部分。
CCC 的所有組件——前端、IR、最佳化、後端、組譯器、連結器、DWARF——全由 Claude 生成,沒有外部依賴。
從純技術角度來看,單是「讓 AI 寫一個可工作的 C 編譯器」就已經是很驚人的成就。然而,作者的測試讓我看到另一個現實:能跑不代表能用。
1. Kernel 測試:編譯全過、連結全錯
CCC 竟然能完整編譯 Linux 6.9 的 2,844 個 C 檔案,這件事本身非常了不起。但故事並沒有因此圓滿,因為:
- 連結階段報了 40,784 個 undefined reference 錯誤。
- 問題主要出在 _jumptable 與 __ksymtab 的 relocation 與符號表處理。
這點讓我深刻感受到原文作者的論點:編譯器不是最難的,連結器才是難點。
2. SQLite 測試:正確但慢到不可思議
在 SQLite 的比較中,CCC 的表現幾乎可用「慘烈」來形容。
- GCC -O0:10.3 秒
- CCC:2 小時 6 分
更驚人的是細部數據:
- 某些複雜查詢甚至慢了 158,000 倍
- 主要原因不是語意錯誤,而是編譯器的暫存器配置(register allocation)太差
CCC 幾乎把所有變數都塞回 stack,導致指令碼臃腫(2.7 倍大小)且 cache miss 不斷。原文舉例的反組譯比較讓我印象深刻:
GCC 幾行指令能完成的事情,CCC 需要超過三倍程式碼與大量記憶體搬移。
而且 CCC 的 -O2 與 -O0 完全一樣,代表 CCC 的優化旗標是「裝飾用」的。
3. Hello world 事件:AI 工程的真實縮影
CCC 發布沒多久,GitHub 上就出現 issue #1:
連 Hello world 都編譯不了。
原因只是 AI 忘記加入預設的標頭檔搜尋路徑。這件看似小事,卻直接點出差異:
- GCC 有 40 年、數百位工程師累積的 robustness
- CCC 則是剛出生、連基本 API path 都沒設定完全
這不是攻擊,而是事實。這告訴我:AI 能生成功能,但系統工程的完整性需要大量人類經驗堆疊。
筆者心得與啟發
這篇分析讓我重新思考幾件事。
首先,CCC 展現了 AI 的編程能力已能抵達「打造複雜系統」的門檻。能產出支援多平台後端、支援 ELF、甚至能跑 SQLite benchmark 的編譯器,這是放在 2020 年都沒人敢想的事。
但同時,CCC 也提醒我:
- 工程級品質 ≠ 能動就好
- 效能、相容性、優化、連結器、debug info 都是巨大的技術深坑
- AI 能寫出架構,但未必能達成 decades of tuning
我最有感的一點是:編譯器這種軟體,效能不是「加個 if 修一下」能解決。CCC 的 register spilling 問題就像是基礎地基沒打穩——後面所有建築都會歪掉。
作者一句話講得很精準:
對 Anthropic 來說,CCC 是一個成功的技術展示;但對真正需要高效編譯器的人來說,GCC 才是真答案。
回過頭來看,CCC 也許不是要取代 GCC,而是揭露另一個可能:AI 能讓我們在短時間內生成大型、高複雜度的系統原型,未來可能會在教育、科研或內部工具上發揮力量。
但若要進入主流生態系?至少現在,還太早。
以上是我讀完原文的整理與反思。如果你擔心 AI 是否要取代編譯器工程師,這篇文章提供了一個相當務實的答案:還沒,但方向已經開始靠近。
