VMってすごいんだなあ!と言いたかったのだけれども。
ソースプログラムを適当にASTっぽくしたあと、それを解釈実行するように書いたBrainfuckのインタプリタと、VMっぽく書いたのを比較して「VMはやいカッコイイ!」と言うつもりで、ごにょごにょプログラム書いてた。適当に書き終えた。
% gcc bfi_ast.c -o bfi_ast % gcc bfi_vm.c -o bfi_vm % time (repeat 10 ./bfi_ast quine2.b>/dev/null) 1.164 user 0.032 system 1.197 total % time (repeat 10 ./bfi_vm quine2.b >/dev/null ) 2.688 user 0.012 system 2.708 total
……おや。
うーん。書き方がいいかげん過ぎた。っていうかそもそもどっちもASTでもVMでもねーかんじ。あとBFじゃ構造が単純だからTree言っても読むの速いから、VMとやらの効率調べるにも限界があるような。もうちょとまともな構造持った言語の処理系で試さにゃ。適当にプログラム書いてわかったつもりになるのやめて、ちゃんと調べなきゃ駄目か。
なんか最近BF処理系しか書いてない。
VMぽいコード改良
なんか考えてみればアレだなあ、とか思ってた部分を変えたらだいぶ速くなった。そもそもまともなコード書ける人じゃないと、「ほげほげな手法」と「ふがふがな手法」の速度比較とか、なかなかできないということがわかった。
% gcc bfi_vm.c -o bfi_vm % time (repeat 10 ./bfi_vm quine2.b >/dev/null) 2.052 user 0.028 system 2.084 total