Разработчик запустил DOOM внутри TypeScript-компилятора, создав WASM-рантайм на 177 ТБ кода. Проект рендерил первый кадр 12 дней
Разработчик Димитри Митропулос год работал над проектом, который звучит как чистое безумие: он запустил DOOM внутри TypeScript-компилятора.
Видео о проекте уже стало вирусным, набрав более 84 000 просмотров за 14 часов (на момент написания материала).
При этом на его производство ушло около 200 часов, но сам проект занял целый год.
Как это вообще возможно?
Чтобы заставить DOOM работать в TypeScript types, разработчик:
- Реализовал полноценную WASM-виртуальную машину внутри типовой системы TypeScript.
- Воссоздал 116 инструкций WebAssembly, начиная с арифметики и заканчивая динамическим диспетчированием вызовов.
- Управлял памятью и обрабатывал бинарные числа в строковых литералах.
В результате компилятор создавал 20 млн конкретных типов в секунду, из-за чего рендеринг первого кадра DOOM занял 12 дней.
Что в итоге?
- Финальный размер проекта — 177 ТБ (3.5 триллиона строк TypeScript-типов).
- Опубликован полный исходный код WASM-рантайма.
- Отдельного внимания заслуживают реализации сложения, деления и сдвига битов — там видно, сколько боли пришлось пережить разработчику.
Почему это круто?
Этот проект — не просто технический абсурд.
Чтобы реализовать такое, пришлось разобраться не только в TypeScript, но и в WebAssembly, виртуальных машинах, внутреннем устройстве TypeScript-компилятора и архитектуре DOOM.
Если вам казалось, что DOOM запустили на всём, попробуйте повторить это на TypeScript-типах.