また,ユーザ定義述語についても,定義節がすべてプログラム中で与えられている必要がある。このため,ユーザプログラムを分割コンパイルすることができない。この点も,大規模な実プログラムを対象とする場合に大きな欠点となる。
(b)解析情報を利用した,スレッド化以外のプログラム最適化
昨年度は, 平成7・8年度に行った KL1 のスレッド化手法を元に,これをより高速化する手法について研究を行った。これらの研究で得られた静的解析手法とその解析結果は,スレッド化以外のプログラム最適化手法にも応用できる。
たとえば,現在の KLIC の実行方式では,節内の最初のユーザ定義ボディゴールについてはゴールレコードを作らず, 引数を C の局所変数として保持したまま対応するコードに分岐する。このことを利用し,節内にユーザ定義ボディゴールをたかだか一つしか書かないようにコーディングすることによって,それらのゴールの中断が起きなければ高速な実行が可能であることが知られている。
節内のボディゴール呼び出しを複数の節に展開する変換を自動的に行うことによって,ユーザが特に意識しなくともプログラムの高速化が可能である。しかしそのためには,プログラムの意味を変えずに書き換え可能な範囲を,判別する必要がある。
これらの課題を解決することが,本年度の研究の目的である。