近日開發者Artem Lytkin用正則表達式成功運行了1992年的Doom游戲,就是速度很慢,每幀需要約180秒,每秒執行約8萬次文本替換,每幀需要近1400萬次替換。
在各種奇怪設備上跑Doom早已是編程界的經典挑戰,從烤面包機到充電器甚至驗孕棒都跑過,但用正則表達式來跑,屬于軟件層面的極限挑戰。
正則表達式是程序中用于查找和替換文本的工具語言,包含條件判斷、字符跳轉和替換規則,技術上滿足編程語言的所有要求。
Lytkin利用這些能力,創建了一個96MB的純文本字符串,其中包含虛擬CPU的寄存器、內存、視頻輸出幀緩沖、游戲WAD數據以及I/O等所有組件。

啟動后,正則表達式開始對字符串進行文本匹配和字符替換,模擬處理器寄存器中的數值變化,再訪問和寫入“內存”,如此循環。
速度可想而知地慢,Lytkin表示生成一幀畫面大約需要180秒,每幀需要近1400萬次替換,但它確實能跑,而且Lytkin聲稱輸出與真正的Doom一致。

玩家甚至可以用鍵盤控制游戲,只不過按一次鍵要等三分鐘才看到畫面變化,Lytkin開玩笑稱跟射擊游戲完全不沾邊。
內存訪問的實現方式也值得一提,Lytkin用正則表達式的字符跳轉指令構建了一棵二叉樹,從分支跳到分支,避免每次都從頭掃描96MB文本查找標記。
目前doom-regex項目已開源,官網提供可視化演示,可以看到正則機器以文本和圖形兩種方式運行,畫面相當催眠。
