このプロジェクトでは、「Ray Tracing in One Weekend」に掲載されている画像という複雑なレンダリングタスクを、わずか8つの操作と一方向の無限テープで構成される最小限のチューリング完全な言語であるBrainfuckへと移植することに挑みました。Brainfuckには変数、レジスタ、算術演算子といった標準的な高レベルの構造が欠如しているため、洗練されたアルゴリズムを直接その構文で記述することは極めて困難です。この複雑さを管理するため、著者はデータ表現に対して第一原理的なアプローチを採用し、double型を表現するために符号付きQ16.16固定小数点形式を選択しました。この選択により、$1/2^{16}$の解像度と、エミュレートされた浮動小数点ロジックのオーバーヘッドを伴わずに大きな地面の球体などのシーン要素をレンダリングするのに十分な範囲を確保しました。

この画像は、記事で説明されているレンダリングタスクの基準となります。
高レベルのロジックと低レベルのメモリ操作の間のギャップを埋めるために、この実装では階層的な変換プロセスを利用しました。元のCコードは、まず再帰呼び出しを反復処理に変更し、変数の追跡を簡素化するために単一代入(SSA)スタイルにリファクタリングされました。そこから、`add`、`mul`、`sqrt`、`copy`といった基本的なプリミティブを含むカスタムDSLへと変換されました。その後、専用のコンパイラがこのDSLを最終的なBrainfuck命令へと翻訳しました。主要な数学関数は、制限された命令セットに適した特定のアルゴリズムを用いて実装されました。乗算には繰り返し加算が使用され、平方根は長除法によって計算されました。これらの手法により、最終的なBrainfuckファイルが約0.9MBのターゲット画像に対して大幅な拡張である23MBに達したものの、基礎となるレンダリングロジックはソース資料と数学的に一貫性を保っています。
このプロジェクトは、難解な環境における問題を解決するために抽象化をどのように積み重ねることができるかを示していますが、効率性と保守性の面では固有の限界に直面しています。翻訳機は、どのコマンドも複数のデータポインタ位置で実行されないことを保証することで位置に依存しない変数を維持するため、システムは複雑なメモリ管理を回避しますが、Brainfuckレベルでは大規模なコードの重複を招きます。さらに、この言語の状態はネイティブなインデックスのない無限テープに限定されているため、すべての「変数」へのアクセスにはデータポインタをセル間を移動させる必要があります。このオーバーヘッドは低速なパフォーマンスの一因となり、初期の推定ではノートパソコンで約62日のレンダリング時間が示唆されましたが、その後のJITインタプリタの最適化によって実行速度は大幅に向上しました。最終的な出力には、レンダリングされたシーンにゴッホの絵画を彷彿とさせるテクスチャを与える精度誤差を含む視覚的なアーティファクトが現れています。

この画像は、最終的な出力と結論で言及されている特定の視覚的アーティファクトを例示しています。