人々は電卓からマクドナルドのレジに至るまで、あらゆるものに Doom を移植してきました。最近では、実際の処理能力を持たないプラットフォーム上でソフトウェアを実行する動きがあり、最新の例としては PDF や Word ドキュメントが挙げられます。もちろん、これらの方法は非常に遅いですが、信じられないことに、ゲームはコンピューター以外のプラットフォームでも実行できます。
人々は電卓からマクドナルドのレジに至るまで、あらゆるものに Doom を移植してきました。最近では、実際の処理能力を持たないプラットフォーム上でソフトウェアを実行する動きがあり、最新の例としては PDF や Word ドキュメントが挙げられます。もちろん、これらの方法は非常に遅いですが、信じられないことに、ゲームはコンピューター以外のプラットフォームでも実行できます。
ソフトウェア エンジニアの Dmitri Mitropoulos は、Doom をコンピューター以外のプラットフォームに移植する作業をまったく新しいレベルに引き上げました。このプログラマーは、TypeScript の型システム内で Doom を実行することに成功しました。TypeScript の型システムは非常に複雑だったので、この偉業を達成するまでに丸 1 年かかりました。
TypeScript は Microsoft によって開発された言語で、JavaScript に静的型チェック機能を追加して、実行前にコーディング エラーを検出します。これは、関数や変数が正しく入力されていることを確認する、コードのスペル チェッカーまたは文法チェッカーと考えてください。開発者は、大規模な JavaScript アプリケーションを構築するためにこれをよく使用します。
TypeScript の型システム内でゲームを実行することは「不可能」であると考えられています。ミトロプロス氏は、なぜそれができないのかを「迅速に」証明するためにプロジェクトを始めたとさえ述べた。しかし、研究を深く掘り下げるにつれて、研究を成功させることに執着するようになりました。結局のところ、経験豊富な TS 開発者さえも彼に感銘を受け、何も言うことはありませんでした。
Mitropoulos のバージョンの Doom は 3 兆 5,000 億行の型を実行し、177 TB という驚異的な容量を消費しました。 1 つのフレームをコンパイルするには 12 日かかり、その結果、1 秒あたり 0.0000009645 フレームという信じられないほど遅くなります。 TypeScript 型トラッカーは、出力を生成するために 1 秒あたり 2,000 万個の型インスタンスを処理する必要があるため、フレーム レートが非常に遅くなります。
費用はかかるものの、ミトロプーロス氏はパフォーマンスの向上は可能だと信じています。彼は、Michigan TypeScript Discord チャンネルで、さらなる最適化によりコンパイル時間を「1 ~ 12 時間」に短縮できる可能性があると示唆しました。彼はスピードを改善できる領域を特定した。
これを実現するために、彼は、Doom の実行に必要な 116 個の WebAssembly 命令すべての論理実装を含む、TypeScript タイプを完全に使用して仮想マシンを構築しました。機能するコンピューターのあらゆる要素 (メモリ、ディスク領域、さらには L1 CPU キャッシュさえ) を型システムで丹念に再作成する必要があります。 TypeScript では左側からの文字列の反復のみが許可されるため、バイナリ アルゴリズムを逆に入力する必要があります。
プログラムを実行するには、TypeScript エディターですべてを処理するカスタム WebAssembly ランタイムが必要です。さらに、タイプ トラッカーだけで実行中に 90GB 以上の RAM を消費するため、プロジェクトの巨大な規模に対応するには TypeScript コンパイラを変更する必要がありました。
ミトロプロス氏は、この仕事は気の遠くなるような挑戦であると述べた。彼は 12,364 件の手書きテストを作成し、複数のプログラミング言語を学習しました。当初、プロジェクトには最適化前に 1.25PB が必要になると見積もっていました。ある時点で、フレームワークをコンパイルするには、3 か月間継続的にインスタンス化する必要がありました。彼は、人工知能は役に立たないと言いました。
「ああ、AI はそのようなことに関しては何もできません」とミトロプーロス氏は 7 分間の短いビデオ説明で述べた。 「これは非常に低レベルで、エンジン内には配列やオブジェクト、文字列やブール値はなく、バイナリ数値だけが存在します。Doom は 64 ビットと 32 ビットの整数のみを使用します。それだけです。ああ、それらの整数は符号付きでも符号なしでもありません。それを理解するのに 1 日かかりました。」
この困難な作業は、1 日 18 時間働き、完了するまでに丸 1 年かかりました。他の TS 開発者からはこのプロジェクトについて多くの質問があったため、ミトロプーロス氏は高度な技術的な詳細と動機を説明するビデオをさらに 2 つリリースする予定です。さて、Doom がゲームをまったく実行できないものも含め、あらゆるもので実行できるという証拠がもう 1 つあります。