О Doom на Typescript: год работы, 90 ГБ и 3,5 трлн строк

Doom

Thumbnail: DoomDoom (иногда пишется DooM или DOOM; букв. «рок», «обречённость», «гибель») — компьютерная игра в жанре шутера от первого лица, разработанная и выпущенная компанией id Software в 1993 году. «Doom» является одной из самых значительных и влиятельных компьютерных игр в истории индустрии; в частности, её популярность во многом определила дальнейшее развитие и распространение жанра шутеров от первого лица. В этой серии вышла также игра-продолжение «Doom II: Hell on Earth» (в 1994 году), а также дополнения The Ultimate Doom (1995 год), Master Levels for Doom II (1995 год, сборник лучших уровней для Doom II, созданных энтузиастами, и объединённых id Software) и Final Doom (1996 год). Википедия

Читайте также:Шутер Total Chaos, созданный на основе мода для Doom 2, выйдет 24 июляДля улучшенной версии Neverwinter Nights выпустили дополнение, созданное фанатамиСоздатели DOOM: The Dark Ages рассказали о продолжительности уровней и значимости использования щита в бою«DOOM: The Dark Ages» получила взрослый рейтинг в СингапуреDoom работает на адаптере Apple Lightning-HDMI

портировали почти на все, верно? Ну, до сих пор название id Software не было воссоздано в системе Typescript Types, до сих пор.

Этот подвиг придумал инженер-программист Дмитрий Митропулос, основатель Michigan Typescript и соучредитель Squiggleconf. Он выпустил видео, демонстрирующее результаты годовых усилий по запуску игры в системе Typescript Types.

Typescript — это язык, построенный поверх Javascript, который добавляет статическую типизацию для обнаружения множества ошибок перед выполнением, думайте об этом как о щитах, которые проверяют, что функции и другие переменные используются правильно. Хотя это обычно используется во всех видах разработки, неслыханно запускать игру в системе TypeScript.

Сам порт работает внутри трех с половиной триллионов строк типов, что в сумме составляет гигантский размер в 177 ТБ. Это выполняется через Typescript's Type tracker, которому требуется 12 дней, чтобы скомпилировать первый кадр Doom (0,0000009645 кадров в секунду). Это означает, что 20 миллионов экземпляров типов запускались каждую секунду, чтобы получить вывод.

Митропулос объяснил на сервере Discord TypeScript в Мичигане, что этот процесс можно ускорить до «1–12 часов», если кто-то над этим поработает, а разработчик отметил, что у него есть заметки о том, где можно сделать потенциальную оптимизацию производительности.

Это было сделано путем запуска проекта в пользовательской среде выполнения WASM, которая затем обрабатывалась с помощью Typescript в редакторе для отображения фрейма.

Митропулос объясняет, что проект был тяжелым испытанием на протяжении года, поскольку ему пришлось писать собственные инструменты, включая 12 364 рукописных теста, изучать C, C++, WebAssembly и другие языки.

«Я действительно разработал то, что, по моему мнению, является крупнейшей кодовой базой Typescript из когда-либо созданных», — пояснил автор. До оптимизации он подсчитал, что проект может занять до 1,25 петабайт данных, при этом первый кадр будет скомпилирован после трех месяцев непрерывного создания экземпляров типов.

Каждый тип в проекте состоял из тысяч строк, и проект включал разработку виртуальной машины внутри системы типов, дополненной такими элементами, как оперативная память и дисковое пространство. «Компьютер состоит из типов Typescript, которые служат логическими реализациями всех 116 инструкций WebAssembly, необходимых Doom для запуска».

Митропулос далее пояснил, что каждое значение в системе Typescript Types соответствует строке пикселей, что в общей сложности составляет 128 000 строк пикселей, что дает «разрешение» 320x200, отображаемое в ASCII.

Для этого разработчику необходимо было снять ограничения в самом компиляторе Typescript, что наглядно показало, насколько большим стал проект: во время работы среда выполнения Type Tracker потребляла более 90 ГБ оперативной памяти.

Эти огромные накладные расходы означали, что обычные инструменты в Typescript не могли быть использованы, что означало, что титаническая задача кодирования каждого элемента Doom в типах. Это потребовало обучения разработке элементов, таких как кэш L1 CPU, в самих Typescript Types. Поскольку Typescript требовал итерации на одной строке с левой стороны, двоичные алгоритмы должны были вводиться в обратном порядке.

«О, и ИИ не может помочь», — добавил Митропулос, описав, что работа была настолько низкого уровня, что ИИ не мог помочь ни с одной из задач. Жаль, Grok 3.

Митропулос сказал, что он взялся за этот вызов после завершения «всех остальных» испытаний Types и хотел понять, почему Doom не сможет работать в Types. Однако ему удалось найти «смешные» обходные пути, чтобы заставить все это работать, несмотря на его собственное неверие в проект.

Митропулос готовит два отдельных видео, в которых подробно рассказывается, почему он создал проект, а также еще одно видео с техническим разбором подвига. Но на данный момент гигантский проект завершен, и Doom успешно перенесен на еще одну платформу.

Источник: Tomshardware.com

Подписаться на обновления Новости / Технологии

0 комментариев

Оставить комментарий


Новые комментарии

Когда они в продаже появятся? Уже как бы конец февраля, а нигде нет..
  • Анон
Поддерживаю. А еще если брать в разрезе Илон Маск и безопасность данных, то вообще смешно. Особенно для жителей РФ)О конфиденциальности можно забыть
  • Анон
1c пох на ваши операции, количество ядер и прочее. Умудрились написать ядро четко привязанное к Мгц. Единственный в мире продукт для 1го ядра.
  • Анон
Указан неверный диаметр вентиляторов, не 80 мм, а 100 мм. И чип не 103, а 102.
  • Анон
С прошлым обновлением как раз и появилась эта ошибка. А новое как и написано не дают скачать.
  • Анон
При включении 3D Turbo Mode у вас максимум будет доступно 8 ядер и 8 потоков всего. т.е. если у вас 16 ядерный на 32 потока то будет всего 8 ядер и 8 потоков! Странная оптимизация!
  • Анон
После скачивания вышел синий экран СУПЕР!
  • Анон
требуется указать магазин и purchase date без этого не регистрирует
  • Анон
Россия на них клала❤❤❤❤, будет называться Ладушка 2.0 )))
  • Анон

Смотреть все