Open4

Ribbon: ヒープ表現の整理

okuokuokuoku

C++移植前の最後の仕上げということでヒープ表現を整理しておく。当初はC++実装に寄せる意味で全てのオブジェクトをrib内でタグ付けしていた。

https://github.com/okuoku/yuniribbit-proto/blob/ac767defc87eb595386ebe81e0066d567afb1080/yuniribbit/heapcore.sls#L40-L50

これらのなかで、stringとbytevectorは厳密にはwrapする(ribに格納する)必要性は無いので後で外せるように準備しておく。

また、コンパイラとScheme実装されたVMがいちいちシリアライズしないとVM命令列をやりとりできないのはちょっと微妙いので修正したい。

okuokuokuoku

ribに直接アクセスしないようにする

https://github.com/okuoku/yuniribbit-proto/commit/c4e9e33e552dec09fbc6b675676a84541fc6b81b

... 今気付いたけど、これやっちゃうとコンパイルしたコードがVM内のプログラムからはSchemeオブジェクトに見えなくなるから、何らかの方法で対策する必要があるな。。さもなくば、VM内からコンパイルした結果をシリアライズできなくなってしまう。

const 命令をlambda(ribを引数にする)とそうでない普通のScheme定数に分けるしかなさそうだな。。

okuokuokuoku

VM命令をシリアライズしないようにする

https://github.com/okuoku/yuniribbit-proto/commit/27f7540f3274979cd064e4e21c5185479d94f278

ひとまず、VMから compile-program 手続きで作成したプログラムはホストSchemeオブジェクトとして直接生成されるようになった。

これにより、 eval 中にプログラムをシリアライズ/デシリアライズする必要がなくなったので、evalのテストやVMのブートストラップが高速化した。

...といってもまだ4分掛かってるけど。。

real    3m48.400s
user    4m2.170s
sys     0m2.889s

C++で書き直して10倍高速化したとしても16秒掛かるのか。。