Brainfuck
読み:ブレイン-ファック
外語:Brainfuck

 極端な小型化と難解な言語仕様で有名なプログラミング言語の一つ。
目次

言語概要

由来
 Amiga OS 2.0用に、小型のコンパイラーを作ることを目的として創案された。
 わずか8つの機能しか持たないが、最低限必要な機能は用意されており、にもかかわらず彼の作ったコンパイラーは僅か240バイト(キロバイトやメガバイトではない)しかなかった。
 この刺激的な言語はプログラミング言語の世界に少なからぬ影響をもたらし、Brainfuckの派生言語や、似たような趣旨の意味不明言語を多数生み出す原動力にもなったようである。
 なお、名前にfour letters wordを含み、上品でないため、これを「Brainf*ck」、あるいは略して「BF」と書くこともある。

特徴

チューリングコンプリート
 Brainfuckプログラムには、「ポインター」と呼ばれる暗黙のバイトポインターがある。
 あらかじめゼロで埋められた充分な大きさ(30,000バイト)の配列が用意されており、その一つをポインターが指し示す。ポインターの初期値はこの配列の先頭で、かつポインターは配列の範囲内を自由に移動しながら、指し示す値を増減させることができる。
 この言語の実用性自体は皆無である(作者自体、もともと実用性を求めてはいないだろう)が、これでもチューリングコンプリートな言語であり、理論上は他の一般的なプログラミング言語と同等の能力を持っている。

言語仕様
 Brainfuckプログラミング言語には8つの機能しかないが、それぞれが単独の文字で表現される。
  1. > ‐ ポインターのインクリメント。ポインターをpとする(以下同)と、Cの「p++;」に相当する
  2. < ‐ ポインターのデクリメント。Cの「p--;」に相当する
  3. + ‐ ポインターが指す値のインクリメント。Cの「(*p)++;」に相当する
  4. - ‐ ポインターが指す値のデクリメント。Cの「(*p)--;」に相当する
  5. . ‐ ポインターが指す値の出力。Cの「putchar(*p);」に相当する
  6. , ‐ ポインターが指す場所に値を入力。Cの「*p = getchar();」に相当する
  7. [ ‐ ポインターが指す値が0なら、対応する ] に飛ぶ。Cの「while (*p) {」に相当する
  8. ] ‐ ポインターが指す値が0でないなら、対応する [ に飛ぶ。Cの「}」に相当する
 これら文字は可読性を理由に選択された。また、1文字であるのは字句解析を略し、コンパイラーを軽量化するためである。

関連言語
 文字は、上の8種類である必然性はなく、実際には何でも良い。
 このため、他の文字に置き換え、より難解な言語仕様にしたプログラミング言語も作られている。

再検索