(3) KL1 プログラム開発支援ツール
研究代表者:上田和紀 教授
早稲田大学理工学部情報学科
[目次]
- 研究体制
- 2年目の研究内容
- 想定されるソフトウェア成果
氏名 所属
研究代表者 上田 和紀 早稲田大学理工学部情報学科教授
研究協力者 長 健太 早稲田大学大学院情報科学専攻M2
研究協力者 松田 慎一 早稲田大学大学院情報科学専攻M2
研究協力者 加藤 昇嗣 早稲田大学大学院情報科学専攻M1
研究協力者 土山 了士 早稲田大学大学院情報科学専攻M1
研究協力者 村山 和宏 早稲田大学大学院情報科学専攻M1
研究協力者 網代 育大 早稲田大学理工学部情報学科4年
研究協力者 倉持 聡 早稲田大学理工学部情報学科4年
本調査研究は、早稲田大学理工学部情報学科において、研究代表者と研究協力
者とが交流を密に行ないながら進める。KLIC開発者とも必要に応じて連絡し合
い、KL1プログラマに役に立つツールとなるように努める。
具体的には、現在稼働、公開しているklintのモード解析機能を発展させるこ
とによって、KL1のための静的デバッグ環境およびスタイルチェッカを構築す
る。また、モード情報の応用の研究もあわせて行なう。
- (a) KL1特有の言語機能の取扱いの検討と実現
KL1がFlat GHCから拡張した機能に対応する。ただし、klintの不自然な拡張を
要する機能については、機能自身の方を見直すことも検討する。必要性の高い
言語機能から着手してゆく。代表的なものとしては、次のようなものがある。
- - ガードおよびボディの組込述語の呼出しのモードづけ、特にベクタ操作など、
構造データへのランダムアクセス操作へのモードづけの実現
- - ガードの出力引数の扱いの検討と実現
- (b) モードづけできないプログラムの解析
既存の多くのプログラムは、大体においてwell-modedに書かれている半面、部
分的にill-modedな部分を有すると考えられる。モードづけできないプログラ
ムの解析については、矛盾する極小制約集合の探索に基づく基本方式が昨年度
の研究によってほぼ確立したので、その実装および改良を行なう。特に、プロ
グラムの層化に基づく解析、および複数の極小集合を用いた解析を実装、検証
する。
- (c) モード宣言、分割解析および結果出力のための、モード情報入出力機能の
実現
本モード解析系は、プログラムの分割解析が容易であることが大きな特徴であ
る。また、モード推論、モード宣言、モード検査が同一の枠組でできることも
特徴である。これらの実現のためには、モード宣言のための言語機能、および
プログラムモジュールごとの解析結果の保存、読出し機能が必要である。これ
らを検討し、実現する。
- (d) 性能改善と並列実行の検討
現在の基本アルゴリズムの実装は、実際に扱うグラフ構造やモード制約の統計
的特性に応じて最適化してはいない。そこで、各種のプログラムの解析を通じ
て性能改善を図る。特に、データ表現の再検討や、不要な逐次性の除去を行な
う。また、本解析は、(成功する限り)それほど計算時間のかかるものではない
が、性能改善の一環として、並列実行の可能性について検討を行なう。
- (e) 動的デバッグ環境の検討
静的デバッグ環境が稼働を始めれば、それを用いることにより、本質的に動的
デバッグが必要なプログラムエラーに対して、今までより高度なデバッガが実
現できる可能性がある。そこで、静的デバッグ環境の開発が順調に進んだ場合
は、動的デバッグ環境の検討および試作を行なう。
- (f) モード情報を利用したプログラム最適化の検討
klintが出力するモード情報を利用すると、KL1言語処理系のより高度な最適化
が可能となる。そこで、モード情報をはじめとする静的解析情報を用いた、コ
ンパイラおよび実行時システムの最適化について、理論および実践の両面から
検討する。
- (1)作成されるソフトウェア名称
- klint
- (2)そのソフトウェアの機能/役割/特徴
klint は、KL1プログラムを構成する述語の引数や変数が、どのような通信プ
ロトコルで使われているかを静的に解析するツールである。この解析を、モー
ド解析ともいう。モード解析に成功したプログラムは、実行時にプロトコルの
不整合によるユニフィケーションの失敗が起きないことが保証される。このた
め、今まで実行時デバッグによって除去していた誤りの多くが、静的に除去で
きるようになる。
このようにモード体系は、強い型体系と同様な工学的意義をもっており、実際、
これまでの実験によって、多くの誤りが静的に除去できることが経験されてい
る。
klint は、モードづけができるプログラムに対しては、各述語のプロトコルを
出力し、モードづけできない場合は、その理由を解析して出力する。モードづ
けの機能は、Prolog処理系に見られる singleton 変数の警告機能を含んでい
る。さらに、可能な場合、プログラミング・スタイルに関する改善提案を出力
する。
klint は、大規模プログラムにも対応しており、通信プロトコルに関するモジュー
ルインタフェースを宣言したり、モジュールごとにモードを解析したりするこ
とが可能である。
- (3)ソフトウェアの構成/構造
- (a) モード制約生成系
下記の構成要素からなる:
- - KL1プログラムを標準形に変形するモジュール
- - 各節における記号の出現を調べるモジュール
- - 各節が課するモード制約式を生成するモジュール
- (b) モード制約充足系
モード制約に関する制約充足問題を、ユニフィケーションによって解く。
- (c) モード入出力系
下記の機能を提供する:
- - モード宣言の入力
- - モードグラフ(プロセス構造) のファイル入出力
- - モード情報のユーザへの提示
- (d) 不当モード解析系
モードづけできないプログラムに対して、その原因をできるだけ局所化、
特定して提示する。
(4)参考とされたICOTフリーソフトウェアとの関連
klint は、完全にKL1で記述されてklicで実行できるソフトウェアであり、独
立したツールとして提供可能である。
ただし、モード解析によって得られる情報は、将来の高度な処理系最適化に不
可欠であるので、将来的には、本システムの一部を、klic 処理系に取り込む
ことが考えられる。
(5)使用予定言語および動作環境/必要とされるソフトウェア・パッケージ/ポータビリティなど
基本的に、すべてをKL1で記述する予定である。ただし、動的デバッガについ
ては、グラフィカルユーザインタフェースを作成して提供することも考えられ
る。
なお、klic 処理系には組込みのマクロ展開機能があるが、これが独立したプ
ログラムモジュールとして提供されることが望ましい。
(6)ソフトウェアの予想サイズ(新規作成分の行数)
5,000行程度
(7)ソフトウェアの利用形態
本システムは、Cプログラマのためのlintのように、KL1でプログラムを書く
すべてのプログラマにとって有用な静的デバッグツールとなることを目指して
いる。実際、これまでの実験によって、多くの誤りが、モード誤りの形で検出
でき、静的に除去できることが経験されている。
また将来的には、モード解析系を通るプログラムに対しては、非常に高度な最
適化を施し、手続き型言語により近い効率を達成することが期待される。
さらに、今後開発されてゆくであろうプログラム解析技術やプログラミング環
境は、モードという基本情報があれば、より高度なことが単純に実現できる。
これらのことから、モードづけができるようにプログラムを書くことは、効率
よい実行や、プログラミング環境からの支援という面からも、今後重要性を帯
びてくると考えられる。
(8)添付予定資料
・ ソフトウェア仕様書
・ ユーザマニュアル
www-admin@icot.or.jp