Brainf*ckはEOFの扱いがびみょーだよなあと思ってた。

バイナリデータのechoとかもできないし。どうもWikipediaにのってるくらい有名なびみょーどころだったみたい。
http://en.wikipedia.org/wiki/Brainfuck#End-of-file_behavior
16-bit、32-bitのセルを持つBFね。効率的にはどうなんだか、今度試してみよう。

EOFも考えたecho.bf

こう書くかな。でもメモリ領域がbyteの配列だとバイナリを入力とした時の出力が入力と一致しない。

,+[-.,+]

速度比較やってみた。

% time (repeat 10 ./bfi_uchar quine2.b >/dev/null)
2.076 user 0.028 system 2.109 total
% time (repeat 10 ./bfi_int quine2.b >/dev/null)
1.744 user 0.032 system 1.784 total
% time (repeat 10 ./bfi_uchar echo.bf </usr/include/X11/Xlib.h >hoge)
0.308 user 0.040 system 0.353 total
% time (repeat 10 ./bfi_int echo.bf </usr/include/X11/Xlib.h >hoge)
0.276 user 0.044 system 0.318 total

intのが良さげかな。
quine2.bはhttp://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3aBrainfuckから拾ってきたもの。処理系のコードは適当に書いたこんなの(リンク先のはbfi_intのもの)。bfi_ucharとbfi_intの違いはメモリ領域が前者unsigned charの配列、後者intの配列というだけ。

test