Brainfuck
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| Brainfuck | |
|---|---|
| パラダイム | 構造化プログラミング |
| 登場時期 | 1993年 |
| 設計者 | Urban Müller |
| 型付け | なし |
| 影響を受けた言語 | en:P′′ |
| 影響を与えた言語 | Ook! |
Brainfuck(ブレインファック)は難解プログラミング言語の一つ。名称が良いものではないため、Brainf*ckなどと呼称するのが一般的。
目次 |
[編集] 概要
開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 実際、Müllerが開発したコンパイラのサイズは123バイト(キロバイトではない!)、インタプリタは98バイトとなっている。
処理系には十分なサイズのbyte型配列とその要素のひとつを指すポインタがある。ポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく(Hello world参照)。
実用性は低いものの、これでもチューリング完全(チューリングマシンで実行可能なあらゆるプログラムが記述できる)な言語であり、理論上はC言語などの普通のプログラミング言語と同等の表現力を持つ。
[編集] Brainfuckの言語仕様
実行可能な命令は「8つ」のみである。
>ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。<ポインタをデクリメントする。C言語の「ptr--;」に相当。+ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。-ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。.ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。,1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。[ポインタが指す値が0なら、対応する]までジャンプする。C言語の「while(*ptr){」に相当。]ポインタが指す値が0でないなら、対応する[にジャンプする。C言語の「}」に相当。
[編集] 派生言語
以上の8つの命令文字は可読性のために選ばれたものであり、これらが使われなければならない理由はない。したがって、よりesoteric(難解)にすることを目指したり、あるいは単なる遊びとして、各命令に使用する文字を置き換えた派生言語が考えられている。
- MONAmona - 「
MONAmona」の8文字を順に「><+-,.[]」に当てはめたもの。 - Ook! - 「
Ook.」「Ook!」「Ook?」のうち2つのトークンから成る文字列をBrainfuckの各命令に当てはめたもの。使用される記号(実際には文字列だが)の種類がわずか3つと、本家より少ない。 - BrainCrash - 4つの命令「
|&~^」を加えたもの。終了時にポインタの指す値が0になるまでポインタを進め値を出力する。また、実行前に"Hello, world!"が格納される。
[編集] 関連項目
[編集] 外部リンク
- http://www.muppetlabs.com/~breadbox/bf/ 解説ページ(英語)
- http://esoteric.sange.fi/brainfuck/ 処理系のアーカイブ
- http://brainfuck.sourceforge.net/ Brainf*ck Golf(お題に沿ってなるべく短いBrainf*ckソースコードを書くコンテスト)
- http://home.arcor.de/partusch/html_en/bfd.html Brainfuck Compiler (Windows/MS-DOS)
- http://brainfuck.progopedia.org/ Kit's JavaScript Brainfuck Interpreter
- http://cfs.maxn.jp/neta/onlineBrainFuck.html ONLINE BrainF*ck interpreter for JavaScript(STEP実行ができる)
- http://lab.moyo.biz/garage/brainfuck/index.xsp BrainFuck ダイナマイツ (メモリ表示付きインタープリタアプレット)

