Большинство далёких от разработки людей воспринимают SQL исключительно как инструмент для работы с большими массивами данных. Так его и задумывали, но по своей сути SQL — полноценный язык программирования: в нём есть многие возможности универсальных языков вроде C или Python. И хотя для задач общего назначения он не предназначен, ему по силам на удивление широкий круг вещей. Чтобы это доказать (а заодно продемонстрировать мастерство), команда из CedarDB перенесла на SQL оригинальную DOOM.
Напомним, культовый шутер DOOM вышел в 1993 году у студии id Software, а позже его исходный код открыли — во многом поэтому игру десятилетиями портируют на самые неожиданные платформы, от осциллографов до принтеров. Версия на SQL логично продолжает известный ряд «а запустится ли здесь DOOM».
Данные WAD (по сути, всё, кроме самого движка) проект хранит в наборе таблиц — это оказалось сравнительно несложной частью. Куда труднее было выстроить тайминг, привязывающий игру к 35 кадрам в секунду, и, конечно, отрисовку изображения. На рендеринг ушло 1300 строк SQL, распределённых по 89 обобщённым табличным выражениям (CTE), — для этого языка результат более чем продвинутый. Остальная часть проекта — ещё около 4000 строк SQL плюс немного Python для обработки нажатий клавиш, тайминга и вывода готового растрового изображения.
Как ни парадоксально, DOOM может оказаться идеальной игрой для запуска на SQL. Она создавалась в эпоху до появления отдельных видеокарт и не является по-настоящему трёхмерной: чтобы картинка выглядела объёмной, программистам приходилось прибегать к множеству хитростей. В результате в игре много преобразований данных, которые на удивление хорошо ложатся на SQL, — будто оригинальный рендерер писал человек с обширным опытом работы с этим языком.
Исходный код проекта выложен на GitHub. А среди других необычных воплощений DOOM встречаются, например, версия на регулярных выражениях и даже реализация внутри Microsoft Word.













