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 >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
以下ソース
続きを読む