Brainfuck(ブレインファック)
Brainfuckは、珍しい構文と限られた命令セットを特徴とするプログラミング言語です。この言語は、Urban Müller氏ができるだけ小さなコンパイラを作ることを目指して設計されたもので、その実際のサイズはわずか123バイトに過ぎません。インタプリタに至ってはたったの98バイトという驚異的なコンパクトさです。
言語仕様
Brainfuckには、非常にシンプルながらも強力な言語仕様があります。以下の要素から構成されています:
- - Brainfuckプログラム:実際に書かれたコード。
- - インストラクションポインタ:実行中のプログラムにおける現在の位置を示すポインタ。
- - データ配列:少なくとも30000の要素から成るバイトの配列で、全ての要素はゼロで初期化されます。
- - データポインタ:データ配列内の特定の要素を指すポインタで、初期状態では最も左の要素を指します。
- - 入出力ストリーム:プログラムの入出力を行うためのバイトストリームです。
実行可能な命令
Brainfuckは以下の8つの命令から成り立っています。これらの命令文字以外は無視されるため、プログラム内での記号の扱いが特徴的です。
1.
`>`:データポインタを右に移動する。
2.
`<`:データポインタを左に移動する。
3.
`+`:データポインタが指す値を1増加させる。
4.
`-`:データポインタが指す値を1減少させる。
5.
`.`:データポインタが指す値を出力する。
6.
`,`:入力から1バイトのデータを読み込み、データポインタが指す位置に代入する。
7.
`[`:データポインタが指す値が0の場合、対応する`[`の直後にジャンプする。
8.
`]`:データポインタが指す値が0でない場合、対応する`[`の直前に飛ぶ。
派生言語
これらの8つの命令は、可読性に配慮して選ばれましたが、言語の特性を楽しむために、別の文字を用いる派生言語も多数存在します。多くの場合、元の難解さをさらに増すことを狙っています。以下はその一部です:
- - A:すべての命令を「A」で表現することで、難解度を高めたもの。
- - BrainCrash:新たな命令「|&~^」を追加し、ポインタを進めたり、特定の初期値を設定する仕組みを持っています。
- - Ook!:この言語は、3種類のトークン「Ook.」「Ook!」「Ook?」のいずれかを用いて、元の命令に対応させたものです。これにより、Brainfuckの命令をよりユーモラスに置き換えています。
まとめ
Brainfuckは、その複雑さとユニークな命令と構文から、時には冗談めかした難解プログラミング言語として取り上げられることもあります。プログラマーたちは、他のプログラミング言語とは違った視点でコーディングの楽しみを見出し、様々な派生言語をつくることに励んでいます。