最近,开发者 Artem Lytkin 带来了一项令人瞩目的技术创举——他借助正则表达式成功运行了 1992 年经典游戏《Doom》。不过,运行速度极其缓慢:每帧画面大约需要 180 秒,每秒执行约 8 万次文本替换,生成一帧就要完成近 1400 万次替换。即便如此,这种实现方式本身就足以让人惊叹不已。
将《Doom》移植到各种稀奇古怪的硬件上,早已成为编程圈的经典挑战。从烤面包机到充电器,甚至验孕棒都有人尝试过,但用正则表达式来运行,纯粹属于软件层面的极限操作。正则表达式本身是程序里用于查找和替换文本的工具语言,但它集成了条件判断、字符跳转和替换规则,从技术角度看,已经满足了编程语言的所有基本要求。
Lytkin 正是利用这些能力,创建了一个体积达 96MB 的纯文本字符串。这个字符串中包含了虚拟 CPU 的寄存器、内存、视频输出帧缓冲、游戏 WAD 数据以及 I/O 等全部组件,相当于一个完整的模拟器实体。

启动之后,正则表达式不断对这个字符串进行文本匹配和字符替换,模拟处理器寄存器中的数值变化,再访问和写入“内存”,如此循环往复。运行速度可想而知——生成一帧画面大约需要 180 秒,每帧近 1400 万次替换。但关键在于,它确实能够运行,而且 Lytkin 声称输出结果与真正的《Doom》完全一致。

更令人惊讶的是,玩家甚至可以用键盘控制游戏——只不过每按一次键,需要等待三分钟才能看到画面变化。Lytkin 自己都调侃说,这与射击游戏已经完全不沾边了。
内存访问的实现方式也值得一提。Lytkin 利用正则表达式的字符跳转指令构建了一棵二叉树,从分支跳到分支,从而避免了每次都从头扫描 96MB 文本去查找标记,算是一种相当巧妙的优化策略。
目前,doom-regex 项目已经开源,并提供了可视化演示。可以看到这个“正则机器”以文本和图形两种方式运行,画面相当催眠——如果把屏幕调暗,恐怕能当助眠工具使用。

