Brainfuck
読み:ブレイン-ファック
外語:Brainfuck
極端な小型化と難解な言語仕様で有名な
プログラミング言語
の一つ。
目次
言語概要
由来
特徴
チューリングコンプリート
言語仕様
関連言語
言語概要
枠組み ‐ 構造化プログラミング
初出年 ‐ 1993(平成5)年
設計者 ‐ Urban Dominik Mu¨ller
開発者 ‐ Urban Dominik Mu¨ller
最新版 ‐ ?
言語影響関係
被影響 ‐ P′′
加影響 ‐ Ook!、MONAmona、BrainCrash、
Whitespace
、
Grass
、Misa
主要動作環境 ‐ Win32、MS-DOS、MSX-DOS
由来
Amiga OS 2.0用に、小型の
コンパイラー
を作ることを目的として創案された。
わずか8つの機能しか持たないが、最低限必要な機能は用意されており、にもかかわらず彼の作ったコンパイラーは僅か240バイト(キロバイトやメガバイトではない)しかなかった。
この刺激的な言語はプログラミング言語の世界に少なからぬ影響をもたらし、Brainfuckの派生言語や、似たような趣旨の意味不明言語を多数生み出す原動力にもなったようである。
なお、名前にfour letters wordを含み、上品でないため、これを「Brainf*ck」、あるいは略して「BF」と書くこともある。
特徴
チューリングコンプリート
Brainfuckプログラムには、「
ポインター
」と呼ばれる暗黙のバイトポインターがある。
あらかじめゼロで埋められた充分な大きさ(30,000バイト)の
配列
が用意されており、その一つをポインターが指し示す。ポインターの初期値はこの配列の先頭で、かつポインターは配列の範囲内を自由に移動しながら、指し示す値を増減させることができる。
この言語の実用性自体は皆無である(作者自体、もともと実用性を求めてはいないだろう)が、これでも
チューリングコンプリート
な言語であり、理論上は他の一般的なプログラミング言語と同等の能力を持っている。
言語仕様
Brainfuckプログラミング言語には8つの機能しかないが、それぞれが単独の文字で表現される。
> ‐ ポインターの
インクリメント
。ポインターをpとする(以下同)と、Cの「p++;」に相当する
< ‐ ポインターの
デクリメント
。Cの「p--;」に相当する
+ ‐ ポインターが指す値のインクリメント。Cの「(*p)++;」に相当する
- ‐ ポインターが指す値のデクリメント。Cの「(*p)--;」に相当する
. ‐ ポインターが指す値の出力。Cの「putchar(*p);」に相当する
, ‐ ポインターが指す場所に値を入力。Cの「*p = getchar();」に相当する
[ ‐ ポインターが指す値が0なら、対応する ] に飛ぶ。Cの「while (*p) {」に相当する
] ‐ ポインターが指す値が0でないなら、対応する [ に飛ぶ。Cの「}」に相当する
これら文字は可読性を理由に選択された。また、1文字であるのは字句解析を略し、コンパイラーを軽量化するためである。
関連言語
文字は、上の8種類である必然性はなく、実際には何でも良い。
このため、他の文字に置き換え、より難解な言語仕様にしたプログラミング言語も作られている。
派生言語
BrainCrash
MONAmona
Ook!
プログラミング言語「長門有希」
関連言語
Whitespace
ちょっと草植えときますね型言語
Grass
再検索