[SikiLanguage] [式鬼言語航海日誌]
2008-01-27
2008/01/27_190308ということで、実行プロセス/制御構造について考えていたのですが、…………考えれば考えるほど泥沼ですね。
「そりゃ、色々と機能を追加しようとすればそうだろうな」
まあ、実装言語(C++)側に負担を増やす方向ならそんなに大変じゃないんですけどね……段々そっちの方に腹が決まって来ましたが。
まずは式鬼言語で使用する手続きの分類から。命名は適当です。
- Monomer
- 他の手続きの結果(継続)を待たない手続き。(式鬼言語からは)要素的で分割不可能に見える手続き。
- 遅延評価との関係から、データスタック上のCellを直接扱えない。扱うときは引数取り出しのMonomerで(前もって)処理する必要がある
- C++バインディング
- Polymer
- 手続きの連なり。自分のデータスタックに手続きを保存している。
- 手続き実行時:自分のデータスタックに積まれている手続きを継続のオペコードスタック(操作保存用)にコピーする。
- いわゆるForthWord。
- 以前にExecutorと呼んでいたもの。
- Fiber
- 実行時は属する手続きを逐次実行し、その継続を待つ。
- ローカルな名前空間を持つ。
- プロセスは握っておらず、別のFiberの呼び出しに応じて、必要な分手続きを進める(基本的な動作はPull)
- 他のFiberから呼ばれた時は自分自身を戻り値としてFiberに返す。
- 遅延評価されると、自分の代わりにFiberを実行した結果を返す。
- 他のFiberと通信するための簡単なプロセス間通信機能を持つ。
- Thread
- 他のプロセスから独立したプロセスを作り出す(あるいはあらかじめ持っている)Fiber。
- 実行時は属する手続きを逐次実行し、その継続を待つ。
- 他のFiberから呼ばれた時は自分自身を戻り値としてFiberに返す。
- プロセスを実行中の時はそのままプロセスを実行
- 遅延評価には対応していない(自分を返す)
- 終わったあとは不活性化(二度とプロセスを作り出さない)
- Cloth
- 独立したメモリ空間(GC・Cellホルダー)を持つThread。
- プロセスに属するCellの管理を行う。
- Suit
- プログラムソースを変換するパーザーを持つCloth。
- ソースをコマンド列(Cell)に変換し、その後に処理を行う。
- 通常はプログラム本体
といった感じですかね。
「むむむ、Monomerと遅延評価のところが面倒臭そうだね」
ですね。まあ『参照』というアトミックな(ことを期待される)動作に『遅延評価』が割り込みをかけるのですから当然といえば当然なのですが……。C++がコルーチンに対応していればずいぶん違ったんですけどね。
今日はここまで。
制作・著作: 野分(nowake) at fiercewinds.net (Creative Commons 表示-継承 2.1 日本)