[SikiLanguage] [式鬼言語航海日誌]
2008-02-13
2008/02/13_014504実行プロセスについてまだまだ考え中。
「長いねえ。下手な考え休むに似たりというけどな」
固まってきたから問題ないですよ。例によって自分専用/他の人に読まれることは考えていないメモ書きを散らしておきます。
実行言語がC++ということを想定して、ちょっと考え方を変えました。Suitを完成形≒プログラム全体(複数起動不可)としたのが大きな違いですね。
- Monomer
- 引数を消費する手続き。
- Monomerだけが(必要に応じて)引数を遅延評価します。
- C++バインディングもMonomer。遅延評価を行う&C++がコルーチンに対応していない関係上、バインディングも特殊な手続きが必要
- 引数を使用するときは、引数を評価した後に自分自身を実行するように式鬼言語をセッティングして式鬼言語にプロセスを返す必要がある。
- 評価が終わったあとに手続きを再開する。
- Polymer
- 手続きの連なり。自分のデータスタックに手続きを保存している。
- 手続き実行時:自分のデータスタックに積まれている手続きを継続のオペコードスタックにコピーする。
- いわゆるForthWord。
- Fiber
- ローカルな名前空間を持つ。
- 別の手続きから呼ばれる度に、オペコードスタックに積まれている手続きを順次実行する(プロセスは所有しない)
- Monomerに近い動きだが、中の動作も式鬼言語に管理されているのが大きな違い。
- コルーチン的な動作もOK。手続きの中断も可能。
- 継続のやり取りもOK。
- オペコードスタック自体の操作も可能(条件分岐、継続渡し、繰り返しなどもOK)
- Thread
- 他のプロセスから独立したプロセスを作り出す(あるいはあらかじめ持っている)Fiber。
- 他の手続きから呼ばれた時は自分自身を戻り値として手続きに返し、プロセスを実行する。
- プロセスを実行中の時はそのままプロセスを実行。再起動や中断はしない。
- 終わったあとはそのまま不活性化(再起動はしない)
- Cloth
- 独立したメモリ空間(GC・Cellホルダー)を持つThread。
- プロセスに属するCellの管理を行う。
- Suit
- プログラム本体。
- メインのプロセスを使ってプログラムを実行するCloth。
- プログラム中に1つしか存在できない。
といった感じです。
「Suitの定義はちょっと気に入らないな。前の『ソースコードを解釈する能力がある』というほうが面白いわな」
まあ、Clothに毛が生えたような定義ですからね。“ソースコード≒入力を処理する”という定義の方が本質的なのかもしれませんが……。それらをひっくるめてまとめたもの、という解釈でご容赦を。
制作・著作: 野分(nowake) at fiercewinds.net (Creative Commons 表示-継承 2.1 日本)