YOYU Stackの改良:gspによるアセンブラレベルの採用
YOYU Stackは従来、インタープリタ的なミニマルスタックという位置づけで設計されていた。しかし、その機構をアセンブラレベルで採用し、実行性能および構文木の共有・破棄管理に本格的に利用する設計に移行する。
新要素:gsp(最大スタック値)
[編集]YOYU Stackに新たに導入されるのが gsp(global stack pointer)である。
sp(stack pointer)は現在のスタックトップ。
gsp はそのプロセス(もしくはスレッド)でのスタックの最大境界である。
gspは、スタックのフレームが共有されない場合にはspと同様に増減するが、フレームが他のクロージャにキャプチャされておりリファレンスカウンタが0にならない場合、gspは縮まらず残る。
スタックフレームの管理
[編集]フレームがリファレンスカウンタ0になり破棄されるとき:
spもgspも縮む。
フレームがキャプチャされており参照が残っているとき:
spは縮むが、gspはそのフレームより下まで残る。
スタックが分岐して新しいフレームを伸ばすとき:
gspより先の領域を使って新たなフレームを配置する。
この設計の利点
[編集]リファレンスカウントベースの破棄とスタック共有の自然な統合: クロージャにキャプチャされたフレームは破棄せず残し、gspの管理によって次に安全な書き込み位置を確保できる。
ガーベジコレクション不要な構造共有: スタックフレームはrefcount 0でのみ破棄されるため、明示的なGCを用いずに安全なメモリ管理ができる。
再帰呼び出しにおける最小コピー戦略: スタックを丸ごとコピーする代わりに、共有された下層は残し、変更がある部分のみをgspから先へ積む。
今後の展望
[編集]このスタック管理戦略は、YOYUの仮想マシン設計だけでなく、コンパイル後のターゲットコード生成戦略にも影響する可能性がある。とくに関数呼び出しやクロージャにおけるメモリ効率の観点で、C言語やSchemeとも異なるアプローチを可能にする。
YOYU Stackはインタープリタ玩具から脱却し、低レベルプログラミングにおける新たなメモリモデルとしての地位を確立しつつある。