華和梨ソース概略


← back

ソース構成

libkawari/
華和梨コア。TKawariEngineが全て管理する。
辞書データ構造

全てのデータをフラグメントごとに32bitID化して管理するデータ構造は、 華和梨が持つ最大の特徴の一つである。 等しいデータには必ず同じIDが与えられるため、 実行時の各種演算が極めて高速となる一方、 データ読み込みコストは高い(一回の単語格納コストはstd::mapの検索コストに比例)。

華和梨データ構造(辞書)はString-<KISコード配列>マップ (実際はID-<ID配列>)であり、 さらにキー文字列はドット('.')を区切り文字としたツリー構造として別管理される。 これが華和梨の唯一のデータ構造・データ空間である。 つまり、通常用いられるメモリアドレスの代わりに、 キー文字列(実際はキーID)を用いた検索によってのみ、データ(KISコード)を取得できる。

辞書には、華和梨エンジン一つに対して一つ用意される静的なグローバル辞書のほか、 履歴参照や一時変数などに用いるいわゆるスタックフレームとして、 動的に生成廃棄されるものが存在する。 華和梨ではこのスタックフレーム辞書を「コンテキスト」と称している。

また、華和梨7までは一度ID化された文字列は二度と削除されなかったが、 華和梨8でガーベジコレクションもどきが導入された。 GCは、中間コード評価終了時に、評価中、辞書から一度でも削除されたIDをテストする。 等しいデータを同じIDとする性質から、複数のキーによって参照されるIDが存在するため、 全ての削除予定IDについて、他のキーが参照しているかどうかのチェックが行われる。

wordcollection: データのID化
kawari_ns: マップ+ツリー構造のキー
kawari_dict: グローバル辞書+コンテキスト管理。エンジン一つにつき一つ。
パーサ、コンパイラ
kawari_crypt: 暗号化関連
kawari_lexer: 文字解析。モード分けが大変。
kawari_compiler: 構文解析。構文木構築。
(kawari_engine): 辞書読み込み機能の最上位ルーチン(変更予定)
中間コードオブジェクト

構文コマンドのほとんどは実行時にパースされるため、kawari_codeに記述される。

KISと、いわゆる台詞・単語は、同じようにKIS中間コードオブジェクトとして扱われる。 通常の文字列は「副作用無しに文字列を返す中間コード」となる。 KISのユーザ関数は、関数名に特別なprefixのついた通常のエントリに格納される。 従って、辞書表記や呼び出し方こそ異なるが、 スクリプトと台本は華和梨内部の格納形式は同じである。

kawari_code: スクリプト、エントリ配列呼び出し
kawari_codeexpr: 演算式
kawari_codeset: エントリ呼び出し、集合演算
kawari_codekis: KIS構文(ifのみ)
実行

VMと言っているが、構文木をそのまま実行するので、全然VMではない。 VMが行うのは評価開始時およびユーザ関数呼び出し時の、 コンテキスト生成管理ぐらいである。 それすらnativeスタックを消費してそのまま呼び出すので、 KISのスタックはまともに管理されていないと言える。

TKawariEngineは「華和梨エンジン」オブジェクトであり、 他のモジュールの生成・管理責任を負う。 KISコマンドの多くは、Engineのメソッドによって華和梨機能にアクセスする。 細かい制御が必要な場合は、Engineから各モジュールオブジェクトを得て、操作する。

kawari_vm: 中間コード実行
kawari_engine: 華和梨エンジン
ログ・リソース
kawari_log: ロガー
kawari_rc: リソース(エラーメッセージなど。言語ごとに用意される)
kawari_version: バージョン、ライセンスメッセージ
kis/
組み込みKISコマンドの実装。
saori/
さおりクライアント(さおりを呼び出す側)実装。無闇にフレームワーク風に書かれている。
saori
エイリアス-モジュールパス対応管理。 ロードタイプ(noresidentなど)による動的生成(ロード)管理。
saori_module
Factoryパターンによるモジュール生成の開始点、通信インターフェース。 各種形式のさおりI/Fを呼び出す分岐点になる。
saori_unique
モジュール多重起動を防ぐ、モジュール生成FactoryのDecorator。 アクティブなバインド数をカウントし、0になったらアンロードする。 現在、プロセスごとではなく、エンジンごとに一つ生成する状態(潜在バグ)。
saori_native
共有ライブラリ形式さおりの生成、通信。
saori_java
Java形式さおりの生成、通信。コンパイル環境未整備(JVMのexport libが必要)。
saori_python
Pythonスクリプト形式さおりの生成、通信。未完。
include/
華和梨SHIORIがexportするAPIの仕様。
shiori/
華和梨のSHIORIインターフェース実装。
misc/
ユーティリティ
tool/
幸水など、外部ツール群