Next: ループ展開
Up: 解析系の改良
Previous: 解析系の改良
昨年度までの解析系で用いていた解析アルゴリズムは,すべての述語について完全な
型情報が得られることを前提に,以下のような手順で型情報を求め,それに基づきゴー
ル間の依存関係を求めている[1]。
-
あらかじめ解析系に与えてある組込述語の引数型情報を元に, 対象プログラム中の
組込述語の引数について,依存ゴールつき型集合を求める。
-
同一化述語や,ユーザ定義述語によるヘッド・ボディ間同一化によって,型集合の伝
搬を行う。
-
伝搬が収束した時点で, 値参照を行うゴールの引数の型情報から,依存ゴールを求
める。
したがって,対象プログラムについてなんらかの理由で不完全な情報しか得られない
場合には,安全なスレッド化を行うことができない。すなわちプログラムを分割コン
パイルする場合を考えると,一部のユーザ定義述語については定義節,または呼出側
のボディゴールが解析プログラム中に現れないことになる。この結果,型集合の伝搬
がそこで途切れてしまう。
そこでコンパイル単位ごとに,その単位で得られた解析情報をコンパクトな形で表現
する方法と,その情報に基づいて分割コンパイルを行なう方法を考案し実装した。具
体的にはある単位で定義された述語の各引数について,型,モードとともに引数間の
依存関係を示す情報を生成する。この情報を参照することにより,述語自体を解析す
ることなく述語を呼び出すゴールのスレッド化解析が可能となる。
またこの方法は,複雑な組込述語やジェネリック・オブジェクトの「インタフェース
仕様」の表現としても利用できる。
Next: ループ展開
Up: 解析系の改良
Previous: 解析系の改良
www-admin@icot.or.jp