SchemeでBrainFuck その2

前回書いたBrainFuckインタプリタはかなりおそかった。与えられたbfコードをリストとして構築しなおしてから、さあ実行、とかやってたからだろうか。リストの扱いくらいしかわからなかったからそうなったのだが。
bfのコードはそのままstringとして扱った方が簡単でした。あと速かった。

http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Scheme%3ABrainfuck
で拾ってきたquineのコードによるベンチマーク。前回書いたやつと、今回書き換えたやつにて。コード内部に直接quineのコードをぶちこんで、bf-run。

% time gosh bfi-ls.scm >/dev/null

real    0m5.240s
user    0m5.220s
sys     0m0.030s
% time gosh bfi-str.scm >/dev/null

real    0m0.170s
user    0m0.140s
sys     0m0.030s

30倍の高速化に成功! とか言ったらかっこいいだろうか。よくはないな。元々の30倍も高速化できるほどの駄インタプリタ書いたの俺だし。

コマンドライン引数与えたbfファイルを処理できるようにしてみた。Gaucheで動くことは確認。

% gosh bfi.scm hello.b 
Hello World!
% cat hello.b 
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.

以下ソース

続きを読む

test