该项目涉及将复杂的渲染任务——具体来说是来自《Ray Tracing in One Weekend》的一张图像——移植到 Brainfuck 中。Brainfuck 是一种极简的图灵完备语言,仅包含八种操作和一个单向无限的单元带。由于 Brainfuck 缺乏变量、寄存器或算术运算符等标准高级结构,直接用其语法编写复杂的算法是极其困难的。为了管理这种复杂性,作者采用了基于第一原理的数据表示方法,选择使用带符号的 Q16.16 定点格式来表示双精度浮点数。这一选择提供了 $1/2^{16}$ 的分辨率,并且具有足够的范围来渲染场景元素(如巨大的地面球体),而无需模拟浮点逻辑带来的额外开销。

这张图片作为文章中描述的渲染任务的基准。
为了弥合高级逻辑与底层内存操作之间的鸿沟,该实现采用了分层转换过程。原始的 C 代码首先被重构为单静态赋值 (SSA) 风格,以使递归调用变为迭代并简化变量跟踪。从那里,它被转换为包含 `add`、`mul`、`sqrt` 和 `copy` 等基本原语的自定义 DSL。随后,一个专门的编译器将此 DSL 翻译成最终的 Brainfuck 指令。关键数学函数使用适用于有限指令集的特定算法实现:乘法使用重复加法,而平方根则通过长除法计算。这些方法确保了尽管生成的 Brainfuck 文件达到了 23MB——相对于约 0.9MB 的目标图像是巨大的扩张——但底层的渲染逻辑在数学上与源材料保持一致。
虽然该项目展示了如何通过分层抽象来解决神秘环境中的问题,但它在效率和可维护性方面面临固有的局限性。由于转换器通过确保没有任何命令在多个数据指针位置执行来维护位置无关的变量,系统避免了复杂的内存记账,但导致了 Brainfuck 层面的大规模代码重复。此外,由于该语言的状态被限制在没有原生索引的无限带上,每次“变量”访问都需要移动数据指针跨越单元。这种开销导致了缓慢的性能;初步估计显示在笔记本电脑上的渲染时间约为 62 天,尽管随后对 JIT 解释器的优化显著提高了执行速度。最终输出表现出视觉伪影,包括精度误差,使渲染出的场景呈现出类似于梵高绘画的纹理。

这张图片展示了最终输出以及结论中提到的特定视觉伪影。