BrainfuckとASCIIコード

たまには本業に(少しは)関係したことを書こう。
このことに言及している資料を見たことがないのでここに書くが、Brainfuckという(多分にネタとしての)プログラミング言語で用いられる僅か8つの文字は、ASCII的に非常に具合が良い。

コマンド  ASCIIコードの16進表記と2進表記
 >       3E        0 0 1 1 1 1 1 0
 <       3C        0 0 1 1 1 1 0 0
 +       2B        0 0 1 0 1 0 1 1 
 -       2D        0 0 1 0 1 1 0 1
 ,       2C        0 0 1 0 1 1 0 0
 .       2E        0 0 1 0 1 1 1 0
 [       5B        0 1 0 1 1 0 1 1
 ]       5D        0 1 0 1 1 1 0 1
                         ^     ^ ^

上記の「^」をつけた位置の3ビットに注目してほしい。これらの3ビットだけに注目すれば、全てのコマンドでビットの並びが異なっていることに気づかれるだろうか。然り、Brainfuck処理系の実装者は、上記の8文字以外の文字がソースに含まれている可能性を忘れるならば*1、各キャラクタのビット3つだけを見て動作を決定させることが可能なのである! もっとも、Urban Muellerがここまで考えてこの8つの文字を選んだかどうかは不明だが。

*1:ただし、空白も改行も使えなくなることは覚悟しなければならない。