コンティニュエーション

コンティニュエーションの作成

コンティニュエーション (continuation) は、パステルステッチのインタープリターが動作するために必要な情報を、パステルステッチのデータとして保存したデータ型である。コンティニュエーションを作成するには continuation ブロックを使用する。continuation ブロックのブロック開始文の main 引数にベクトルを与えると、そのベクトルをアドレスとするストレージのセルにコンティニュエーションを書き込む。ストレージにコンティニュエーションが書き込まれた後は、continuation ブロックの内容が引き続き実行され、continuation ブロックの終端に達すると、そのまま次の文を実行する。

コンティニュエーションはパステルステッチのインタープリターの現在の状態を保存したデータ型である。ただし、すべての状態を保存しているわけではない。パステルステッチのインタープリターが保持しているデータのうち、コンティニュエーションに保存される部分を動的環境 (dynamic environment)、そうでない部分を静的環境 (static environment) という。また、コンティニュエーションを作成するとき、現在の状態をまったくそのまま保存するのではなく、動的環境に保存されているプログラムの実行位置を continuation ブロックの終端まで進める。

continuation ブロックで作成されたコンティニュエーションを便宜上、真正のコンティニュエーション (genuine continuation) という。広義のコンティニュエーションには、この他に、終端コンティニュエーション (terminal continuation) がある。

コンティニュエーションの実行

引数解決の終端要因が (真正の) コンティニュエーションであるとき、そのコンティニュエーションが実行される。それまで実行されていた動的環境は破棄される。コンティニュエーションが実行されると、continuation ブロックの終端から実行が再開される。

コンティニュエーションを実行するとき、統合演算式に引数があると、それらの引数の値をコンティニュエーション引数で得ることができる。ただし、特殊な引数名である verboffset は、コンティニュエーション引数として使用できない。コンティニュエーション引数の寿命はコンテキストに拘束されるため、手続きを抜けるとコンティニュエーション引数の値は失われる。

引数解決の終端要因が終端コンティニュエーションであるときは、インタープリターの実行を終了する。このとき、統合演算式の引数をホスト言語で参照することができる。

静的環境

静的環境は以下の情報を記憶する。

ミッションは静的環境にも動的環境にも属さない。

これらを除く情報は動的環境に記憶される。