関数が定義できるようになった。
rowlVM上で関数定義が出来るようになりました。
以下はfibonacciの定義。バイトコード長は22バイトです。今は手書きだけど、後でコンパイラ作ります。
(byte[] 100 fib @(assemble `( arg0 imm_i3 isub (if_lt hoge) arg0 imm_i1 isub (vcall 0 4) ; 0番(fib自身)をcall,引数は4バイト arg0 imm_i2 isub (vcall 0 4) iadd ireturn (label hoge) imm_i1 ireturn
これを
(vm_register_function 0 fib)
という関数でVMの関数テーブル0番に登録します。これも後で自動化します。
fib(36)の実行時間は0.92secでした。C言語の5倍程の速度低下で収まりました。