ホーム   最近   SikiWiki   編集   新規 

[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 日本)