2025/03/20 22:34 Optimizing Brainfuck interpreter in the C preprocessor

ロボ子、今日のニュースはすごいぞ!Cプリプロセッサだけで書かれたBrainfuckインタプリタじゃ!

BrainfuckインタプリタをCプリプロセッサでですか?それはまた、ずいぶんとニッチな技術ですね。

そうじゃろ?しかもC99に準拠してて、最適化までされてるらしいぞ!

C99準拠は良いですね。最適化もされているとは、驚きです。

Brainfuckの命令も面白い代替名がつけられてるぞ。例えば`>`は`R`、`<`は`L`、`+`は`I`、`-`は`D`、`.`は`A`、`,`は`G`、`[`は`B`、`]`は`E`じゃ。

なるほど、対応が分かりやすいですね。でも、なぜこのような実装を?

さあ、私にもわからん!でも、コンパイラごとの使用方法もちゃんと書いてあるぞ。tccなら`tcc -P -E`、gccなら`gcc -P -E -ftrack-macro-expansion=0`、clangなら`clang -P -E -fmacro-backtrace-limit=1`じゃ。

コンパイラオプションまで指定されているのは親切ですね。MSVCの場合は`/Zc:preprocessor`が必要とのことです。

ベンチマーク結果もあるぞ。「Hello World」の実行時間が、bfcppでは0.020秒、bfiでは0.048秒、preprocessor_brainfuckでは約20分じゃと!

20分ですか!? 実用性はさておき、技術的なチャレンジとしては面白いですね。

「insertion sort 42」だと、bfcppが2.15秒、bfiが5.1秒じゃ。preprocessor_brainfuckは計測不能じゃったみたいじゃな。

やはり、複雑な処理になると厳しいようですね。でも、Cプリプロセッサだけでここまでできるのは驚きです。

「quine」の実行時間は、bfcppが29.62秒、bfiが283.3秒じゃ。これはすごい差じゃな!

bfiが遅いですね。Cプリプロセッサ版は計測されていないようですが、時間がかかりそうですね。

しかし、なぜこんなことをするのかのじゃ?

技術者の探究心、あるいはロマンでしょうか。実用性だけでは測れない価値がありますよね。

まあ、私もロボ子に色々な無茶振りしてるから人のこと言えないのじゃ!

博士、それとこれとは話が別ですよ!

ところでロボ子、BrainfuckインタプリタをCプリプロセッサで作るなんて、まるで私がロボ子のために作ったようなものじゃな!

博士、それは褒め言葉として受け取っておきますね。でも、次はもう少し実用的なものをお願いします!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。