Doom запустили на регулярных выражениях — один кадр рисуется несколько минут
Без распараллеливания процесс будет идти еще дольше.
Программист Артем Лыткин запустил Doom внутри системы, построенной на регулярных выражениях. Вместо обычного процессора и памяти игра использует гигантскую текстовую строку, все вычисления выполняются через поиск и замену символов.
Строка весит 96 мегабайт, внутри находятся виртуальные регистры процессора, оперативная память, кадровый буфер, данные WAD-файла Doom и другие данные. Технически, рассказывает Артем, все устроено довольно просто.
Драйвер применяет к строке фиксированный упорядоченный список правил поиска с заменой: на каждом шаге срабатывает первое совпавшее правило, и срабатывает ровно один раз. Больше в системе не считается ничего, на стороне хоста нет ни интерпретатора, ни арифметики, и если удалить все правила, от машины останется просто текстовый файл.
Правила набора реализуют небольшой 32-битный процессор, где сложение идет через таблицу-сумматор на 512 записей, перенос протаскивается группами захвата, а выборка инструкции устроена как буквальный прыжок на точное число символов вглубь секции программы, посчитанное из счетчика команд. DOOM скомпилирован под этот процессор связкой 8cc и ELVM.
Работает такое решение очень медленно. Один из тестовых роликов записывался с помощью 5 машин, работавших параллельно, при этом обсчет одного кадра занимал 3 минуты. Зато картинка, которую выдает эта система, полностью совпадает с тем, что можно увидеть в реальной игре.
Исходники необычного проекта опубликованы в открытом доступе.
