Langphilia! /
KL1 /
Distributed KL1 /
DKLIC, 2001-10-23
DKLIC: a Distributed KL1 implementation on KLIC
KLICと付いてて、なんか偉そうな名前ですが。
v1, v2 は私が実装、
v3は後輩が実装、
v4は仕様あり・実装中です。
以下は v2 までの古い情報です。
- 言語としては、KL1/Jの部分集合。1対1、述語移送なしの遠隔述語呼び出し。
- KLICの上の超単純な実装。
- 処理系の実装しやすさを重視した。
トークンの行き来に応じて、eagerに具体化を通信する。
- 実は、コンパイラができてないので、
プログラマがメタ述語呼び出しを書くことになる。
DKLIC2 (2000-10)
- 2000-10/
- ソース。v1が約1700行だったのに対して、約400行まで圧縮しました。
サーバがacceptしたソケットでklicioできないバグを直したKLICが必要です。
pingはアプリケーションの一例です。
v1と比べて、ライブラリとしての使用が非常に楽になったことが分かります。
DKLIC1 (2000-03)
- Bachelor Thesis
- 卒論です。v1は、次の3つのファイルから成ります。
- reversi
- アプリケーションの一例(オセロ)です。
キャラクタベースでショボい上に死ぬほど遅くなります。
DKLICは1対1通信が基本ですが、サーバ reversid.kl1 では
ちょっとトリッキーにマルチクライアントを実現しています。
Known Bugs & Misfeatures
- 終了処理を行っていません。
このため、現状ではControl-Cによる強制終了を行わなければなりません。
- (KLICの制限)変数の識別ができません。そのため、DKLICの遠隔通信
ストリームに変数を流すたびに変数表に新しいエントリが登録されます。
変数表が大きくなるほど、動作が遅くなっていきます。
- 浮動小数点をサポートしていません。
- (vsock.kl1) puttをサポートしていません。
- (vsock.kl1) puttqは、実はputtの動作をします。
このため、
' '
というアトムを送ると、
受け取る方は空白1文字を読み、多分文法エラーが起きます。
- reversiを書いてみて、
stubとskeletonもライブラリに入れられることに気づきました。
- 汎用性を目指すなら、vsock.kl1とvartab.kl1は独立にできたかも。
- (KLICの制限)ソケットの非同期入出力が行えません。
今後の実装ポリシー
- 変数表に登録された変数がすべて具体化されたときに終了処理を行う。
- (vartab.kl1) 変数名を整数で管理するように変更する。
変数表もvectorにすれば、必ず今よりは速くなる。
他モジュールには影響ないはず。
- (vsock.kl1) putt, puttqを直す。
- 浮動小数点をサポートする。
IEEEか何かで汎用の文字列変換が規定されてるはずだ。
- stubとskeletonをライブラリに含め、全体の構造を見直す。
- 最適化するにしても通信の最小単位は文字と文字列。
整数だとKLICでは汎用に書けないので。
- 述語移送機能。
- コンパイラが欲しい。
Copyright 1999-2001, TAKAGI Yusuke.