[SikiLanguage] [式鬼言語航海日誌]
2008-01-26
2008/01/26_221529メモ。制御構造……というかもっと基本的な実行プロセスについてのアイディア。また迷いが出てきてぐちゃぐちゃです。
「さて、どうするかね。Forth(手続き)よりにするかScheme(継続)よりにするか」
基本的にはForthよりにしたいんですけど、当然構造化プログラム必須ですから継続とも上手く擦り合せしたいところです。色々な機能も暗黙的に持つようにしたいですし。
- 盛り込みたい機能
- 継続
- 手続きからわかるようにする
- 手続きが変更できるようにする
- 継続渡しのサポート
- 手続きから戻り値も渡せる
- 手続きが終了したあとは、次に実行される手続きはその継続
- 構造化プログラムのサポート
- windingとかrewinding、RAIIとかをサポートしたい。
- 実行後に実行するファイナライズスタックをオペレートスタックの他に用意する。
- オペレートスタックが空の時にCellがプロセスに呼ばれたり、Cellをクリアするときにファイナライズスタックの内容を実行する。
- 命令・スタック
- 参照するときは手続きとして実行する
- 遅延実行のForth版
- 実行する手続きと実行しないデータをどうやって見分けるか?
- Popするときに手続きとして実行する??
- 実行プロセスの暗黙化??
- 実装
- 実行プロセスのレベルによって種類を分ける。命名は適当。
- 全部オブジェクト(Cell)
- Monomer:他の手続きの結果(継続)を待たない手続き。(式鬼言語からは)要素的で分割不可能に見える手続き
- 主にC の関数など。
- Fiber:一連のMonomer。属するMonomerの継続を待つ。プロセスは握っておらず、別のFiberに依存している。
- 基本的な動作はPull。
- 他のFiberと通信するための簡単なプロセス間通信機能を持つ。
- FiberからFiberを呼び出した場合はThreadに動作を委譲する??(Threadのオペコードスタック(操作保存用)に押し込む??)
- Thread:一連のMonomer。属するMonomerの継続を待つ。他のプロセスから独立したプロセスを持っている。
- 他のFiberから呼ばれた時は自分自身を戻り値としてFiberに返す。
- まだプロセスを起動していない時は独立したプロセスを作り出す
- プロセスを実行中の時はそのままプロセスを実行
- プロセスも戻り値と一緒に返す。
- 終わったあとは不活性化(二度とプロセスを作り出さない)
- 基本は使い捨て
- 何回も使いたいときはあらかじめCellをコピーしておくか、再度Cellを作り出す。
- Executorは、自分のデータスタックに積まれている手続きを継続のオペコードスタック(操作保存用)にコピーするだけのもの。制御構造ではなく単なる手続き(ForthWord)。
……まだまだ練り込みが甘いなぁ。ちょっと散歩がてらにアイディアを洗ってみます。
…………………………
…………………………
ただいま戻りました。
良く良く考えたら、「Popするときに手続きとして実行する??/実行プロセスの暗黙化??」は無茶ですね。プロセスとは関係の無い普通のpop操作でも実行されてしまうので、制御不能です。止めときましょう。
制作・著作: 野分(nowake) at fiercewinds.net (Creative Commons 表示-継承 2.1 日本)