41 年 IOCCC 再爆話題:怪到癲嘅 C code 點解仲值得工程師睇
Tech News

41 年 IOCCC 再爆話題:怪到癲嘅 C code 點解仲值得工程師睇

圖片:via iThome — https://www.ithome.com.tw/news/177102
TechLab 編輯部(譯)·

由 366 bytes emulator 到 Doctor Who ASCII 動畫,幾件作品睇落荒謬,其實好考 C 語言底

先睇清楚:呢場比賽好認真咁玩荒謬

iThome 報道 IOCCC 上月公布 2025 得獎名單,重點提到 366 bytes emulator、會重新編譯自己嘅 Pong,仲有 jingp49 寫嘅 Doctor Who 片頭 ASCII 動畫。呢度先補一個核對位:iThome 寫 23 件,IOCCC 官方 2025 頁同 GitHub 清單喺 2026 年 7 月 6 日列出 22 件,所以下面作品數量按官方版本講。

IOCCC 由 Landon Curt Noll 喺 1984 年發起,早期規則係用 512 bytes 以內寫一個完整、難睇到極嘅 C 程式。玩法表面好壞心:鬥寫爛 code。核心訊息其實相當正經,爛 style 會拖垮本來正確嘅程式;你要拆得明呢啲怪物,反而要識 macro、pointer、preprocessor、compiler 同 C 語言啲暗角。

366 bytes emulator 最誇張係細得嚟仲跑到成套架構

Adrian Cable 嘅 Subleq Computer 攞 Best imaginary emulator。根據官方作品頁,個 prog.c 得 366 bytes,但模擬一套 Subleq / OISC 架構,配 32-bit CPU、1.5GB RAM、800 x 512 framebuffer、時鐘、鍵盤同 multitasking。官方作品頁提供 Mandelbrot、Pong 同 Linux bootimage 玩法,作者仲話可以入去跑 DOOM。呢類作品唔止係少打幾隻字,真正難位係由一條指令推到完整工具鏈:有 LLVM backend、C compiler、Linux port 同 userspace。

Quine Pong 放喺 AI coding 年代特別好睇

Jonah Uellenberg 嘅 Quine Pong 就似一個工程笑話成真:每次執行,程式吐出下一幀畫面嘅 C 原始碼;你要 compile 再跑先可以繼續玩,try.sh 只係幫你自動做呢個循環。作者講得好清楚:混淆版經自己寫嘅 Insert quine compiler 生成,唔係逐字手寫出嚟。可讀版本放喺 prog.int,再經 liveness analysis、constant folding、variable reallocation、compile-time evaluation 同 define compression 壓到 IOCCC 口味。

呢點放返 AI coding agents 年代幾好玩。AI 生成 code 成日有另一種問題:表面似啱,取捨未必有人講得清。Quine Pong 表面亂到離譜,但背後有中間表示、有優化 passes、有可讀源碼同作者解釋。工程價值就喺呢度:睇 code 唔可以淨係睇外觀整齊,仲要睇有冇設計意圖、約束同可重現工具鏈。

Doctor Who 作品最啱講文化

jingp49 嘅 Who won award 亦值得睇。官方話呢屆多咗 Taiwan 呢個新得獎地區;iThome 報道亦指出 jingp49 冇公開真名。呢點有新聞性,但今次題材最值得睇嘅係技術文化:作品用 C 喺 terminal 重做電視史入面好物理、好 analog 嘅視覺效果。

作品頁寫明,程式輸出 1963 年 Doctor Who 片頭風格 ASCII 動畫,模擬 HowlRound:掃描屏幕 buffer 一部分,放大之後寫返入 buffer,形成連續 video feedback。作者建議 terminal 至少 120 x 30、黑底白字、支援 ANSI escape codes;作品頁亦提醒閃爍畫面未必適合光敏感癲癇人士。

點解 2026 年仲要睇呢啲怪 code

IOCCC 官方話 IOCCC29 投稿量同質素接近歷史高位,而且係 2020 至 2024 空窗後第二屆。呢點幾有意思:即使而家講 AI pair programming、Copilot、agents,仍然有人肯花時間研究 compiler 邊界、undefined behavior、macro、pointer、preprocessor、terminal I/O。呢啲唔係日常 production code 風格,但會幫你理解日常工具點樣失手。

IOCCC FAQ 亦明講參賽者可以用 AI、LLM、coding assistants 同 code generators,只要提交者仍然係最終作者,仲要喺 remarks 交代點用工具。呢個規則放喺今日幾現實:工具可以幫手,但最後提交嘅人仍然要講得清楚點解咁寫、會帶嚟咩後果。AI 生成 code 最麻煩嘅位好多時係責任斷線:冇人知道點解咁寫。IOCCC 嘅怪 code,至少會迫作者交代點解咁怪。

所以對 developer、CS 學生或者帶工程團隊嘅人,IOCCC 唔係叫你返工寫鬼畫符。佢適合拎嚟做 code reading 訓練:試下用 preprocessor 展開、format、rename 變數、睇 Makefile,再對返作者 remarks。下一步可以直接睇 2025/cable、2025/uellenberg、2025/jingp49 嘅 prog.c 同 README;唔使急住跑,先睇自己估唔估到程式點做,已經夠上一堂好硬淨嘅 C 語言課。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook