YOYUにおけるプログラムカウンタとスタックの表現
表示
プログラムカウンタ(PC)の表現
[編集]YOYUでは、多段パスコンパイラや構造化された中間コードにおいて、任意のコード位置(命令)をポインタ1本で示すことが可能である。これはLISP的なリスト構造であっても、Cの構造体列であっても同様であり、命令列中の任意の位置は静的に定義された構造体へのポインタで一意に識別される。
この設計により、継続(continuation)や中断・再開可能な処理を表現する際の基盤が形成される。つまり、「次に実行するコードはどこか」という情報を、構文構造に自然に内包させることができる。
スタックの構造と管理戦略
[編集]YOYUにおけるスタックは、一般的な連続メモリ領域としてではなく、枝分かれ可能な構造を持つ。これにより以下の二様の処理に対応可能となる。
- 通常の関数呼び出しでは、スタック全体を退避せず、単にスタックポインタのみを保存・復元する。
- 継続やコルーチン、ユーザースレッド的処理では、必要に応じてスタック全体をコピーまたは分岐させる。
この方式は、YOYUのハッシュテーブルと同様に「縮む時は共有、伸びる時は枝分かれ」という戦略に従っており、不要なコピーを避けつつ分岐した実行状態を保持できる。スタックの各フレームには `pinned` フラグを持たせることで、継続やクロージャにより寿命が延びたスタックを追跡し、通常の関数復帰による自動解放との両立を可能とする。
応用例
[編集]このようなプログラムカウンタとスタックの構成は以下の応用に適する:
- デバッガによるスタック追跡や命令位置の復元
- 中間表現に対する段階的デバッグ支援
- 並列な構文解析処理やコルーチン切替えの簡易化
- 継続を用いた制御構造の再構成(例:例外処理、バックトラック)