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



Комментарии