Классический шутер DOOM продолжают запускать на самых неожиданных «платформах». Недавно один программист решил представить свой проект по запуску игры на регулярных выражениях.
С технической точки зрения вся «машина» для запуска это одна очень длинная строка размером 96,6 МБ. Регистры, оперативная память, буфер кадра, движок DOOM, скомпилированный в пользовательский набор инструкций и WAD-файл хранится внутри этой строки в виде обычного текста.
Специальный драйвер проходит по этой строке и задействует заданный список правил:
Драйвер применяет к [строке] фиксированный упорядоченный список правил «найти и заменить»; срабатывает первое совпавшее правило и ровно один раз — это и считается одним «шагом». Никаких других вычислений нигде не скрыто: ни интерпретатора, ни арифметики на стороне хоста. Уберите правила — и останется просто обычный текстовый файл.
Разработчик объяснил, чти используемые правила реализуют небольшой 32-битный процессор:
544 правила реализуют 32-bit CPU, у которого сумматор — это таблица поиска на 512 элементов с переносом, «протянутым» через группы захвата; доступ к памяти осуществляется прыжком на точное количество символов, собранное из цифр адреса, а выборка инструкции попадает на текущий опкод (код операции) тем же способом, управляемым счётчиком команд.
Сама DOOM скомпилирована под этот «процессор» с помощью 8cc и ELV. Скорость отрисовки кадров не очень быстрая — для тестов он записывал ролик и обработка кадра занимала 3 минуты, при этом обсчёт выполнялся на пяти машинах работавших параллельно.
Исходники проекта «doom-regex» опубликованы в открытом доступе в репозитории 4RH1T3CT0R7.