程式設計師成功地讓《毀滅戰士》在TypeScript 的類型系統中運行
人們已經將Doom 移植到從計算器到麥當勞收銀機的各種設備上。 最近,人們開始推動在沒有實際處理能力的平台上運行該軟體,PDF 和Word 文件就是最新的例子。 當然,這些方法都非常緩慢,但令人難以置信的是,遊戲甚至可以在非電腦平台上執行。
人們已經將Doom 移植到從計算器到麥當勞收銀機的各種設備上。 最近,人們開始推動在沒有實際處理能力的平台上運行該軟體,PDF和Word 文件就是最新的例子。 當然,這些方法都非常緩慢,但令人難以置信的是,遊戲甚至可以在非電腦平台上執行。
軟體工程師德米特里-米特羅普洛斯(Dmitri Mitropoulos)將《毀滅戰士》移植到非電腦平台的工作提升到了一個全新的高度。 這位程式設計師成功地讓Doom 在TypeScript 的類型系統中運行,其複雜程度令人匪夷所思,他花了整整一年的時間才完成這項壯舉。
TypeScript是微軟開發的語言,它在JavaScript 的基礎上增加了靜態類型檢查功能,以便在執行前捕捉編碼錯誤。 將其視為程式碼的拼字或語法檢查程序,可確保函數和變數的輸入正確無誤。 開發人員通常用它來建立大型JavaScript 應用程式。
在TypeScript 的類型系統中執行遊戲被認為是”不可能的”。 米特羅普洛斯甚至指出,他開始這個計畫是為了”快速”證明為什麼做不到。 然而,隨著他的深入研究,他開始執著地想讓它成功。 最後,就連經驗豐富的TS 開發人員也對他刮目相看,無話可說。

米特羅普洛斯對TypeScript 終於渲染出第一幀末日畫面做出反應。
米特羅普洛斯版本的《毀滅戰士》運行了3.5 兆行類型,耗費了驚人的177 TB。 編譯一幀畫面需要12 天,導致每秒0.0000009645 幀的速度慢得驚人。 TypeScript 類型追蹤器必須每秒處理2000 萬個類型實例才能產生輸出,導致幀速率極慢。
儘管開銷巨大,但米特羅普洛斯認為效能提升是可能的。 在密西根TypeScript Discord 頻道中他提出,透過進一步優化,編譯時間可以減少到”1 到12 小時”。 他已經確定了可以提高速度的領域。
為了實現這一切,他完全使用TypeScript 類型建構了一個虛擬機,包括執行Doom 所需的全部116 個WebAssembly 指令的邏輯實作。 一台正常運作的電腦的每一個元素–記憶體、磁碟空間,甚至L1 CPU 快取–都必須在型別系統中費盡心思地重新建立。 由於TypeScript 只允許從左側迭代字串,因此他必須反向輸入二進位演算法。

執行程式需要一個自訂的WebAssembly 執行階段,在TypeScript 編輯器中處理所有內容。 此外,TypeScript 編譯器也必須進行修改,以處理專案的超大規模,因為在執行過程中,僅類型追蹤器就消耗了超過90GB 的RAM。
米特羅普洛斯形容這項工作是一項艱鉅的挑戰。 他寫了12364 個手寫測試,學習了多種程式語言,最初估計該專案在優化前需要1.25 PB。 有一次,編譯一個框架要連續實例化三個月。 他說人工智慧幫不上忙。
米特羅普洛斯在他簡短的7 分鐘視頻解釋中說:”哦,人工智能對這些東西都無能為力。它是如此低級,引擎內部沒有數組、對象、字符串或布爾,只有二進制數,而且Doom 只使用64 位和32 位整數,僅此而已。哦,這些整數既不是有符號的,也不是無符號的。
這項艱鉅的任務花了整整一年的時間,每天工作18 小時才完成。 TS 的其他開發人員對這個項目有很多疑問,因此米特羅普洛斯計劃再發布兩段視頻,解釋其中的高技術細節和他的動機。 現在,我們又多了一個證據,證明《毀滅戰士》可以在任何東西上運行–包括那些根本無法運行遊戲的東西。