IPA


開発成果一覧へ

 



2006年度上期 未踏ソフトウェア創造事業  採択案件評価書

 


1.担当PM

   並木 美太郎 (東京農工大学大学院 共生科学技術研究部 助教授)


2.採択者氏名

開発代表者

阿部 正佳 (株式会社ミラクルアーツ 執行役員)

共同開発者

三津原 敏 (株式会社ミラクルアーツ 代表取締役社長)

山崎 淳 (株式会社ミラクルアーツ 執行役員)


3.プロジェクト管理組織


   株式会社オープンテクノロジーズ


4.委託金支払額


   6,995,604


5.テーマ名


 実装言語独立でモジュラリティーの良いコンパイラキット

 


6.関連Webサイト


 なし


7.テーマ概要

 コンパイラキット(インフラストラクチャ)はユーザにとっての使いやすさが重要である。コンパイラの扱うデータは複雑であるから、ソースが公開されていて、ドキュメントが整備されているだけでは十分とは言えない。我々は実装言語独立でモジュラリティがよく、使いやすいコンパイラキットを EmacsLisp で作成する。各モジュール間のインタフェースは全てS-式を基としたシンタックスを持つ言語(実装言語 EmacsLisp とは独立)により実装される。

通常、モジュール間のインタフェースは実装言語に依存したデータ構造、パラメータ、大域的変数などにより実現される。しかし、インタフェースというものは構造と意味を持ったデータであり、抽象的には全てプログラミング言語と考えることが出来る。あるプログラミング言語のプログラムと、それを構文解析して内部データに変換したものを考える。通常のソフトウェアでは後者の内部データをインタフェースとしたモジュールから成立しているのに対して我々のソフトウェアは前者のプログラムをインタフェースとして構成される。

このコンパイラキットの実装言語としては、S-式 によるインタフェースを使っている点も関係するが、その高い記述能力、及び申請者の好みにより Lisp を用いる。残念なら現在 Lisp はメジャーな言語ではなく、標準的で広く使われているフリーの Lisp 処理系は少ないが、EmacsLisp はそのようなものの一つであり、ほとんどのコンパイラ研究者の手元に既に存在する可能性が最も高い。また、本コンパイラキットを使う上で実装言語である EmacsLisp の知識は必要ないので、手軽に使えるコンパイラキットとして広く流布するソフトウェアに成り得る。


8.採択理由

 実装言語独立で、モジュラリティーの良いコンパイラキットは、言語処理系研究者、また、実用上もコンパイラ開発に有用なコンパイラ基盤である。本申請は、EmacsLispでフロントエンド、最適化、リターゲッタブルコード生成、各種キットを作る提案を行っており、未踏性があると判断し、採択とした。





9.開発目標


 本プロジェクトでは、コンパイラ作成支援系において、各フェーズのモジュラリティを向上させることを第1の目標としている。各フェーズのモジュラリティを向上することにより、コンパイラ開発者は自分の課題に適応するモジュールだけに着目して実装を行えばよく、コンパイラ開発の手間を削減することができる。

 第2の目標として、パーサ生成系およびリターゲッタブルなコード生成系を提供し、多種のソース言語、多様なアーキテクチャに対応するコンパイラを容易に作成できるようにする。

 第3の目標として、支援系をEmacs Lispにより実装することで、LispS式により各フェーズのインタフェースを定義すると同時に、処理本体もS式で表現し、記述から処理の一貫性を確保する。また、Emacs Lispの持つ各種資源へのAPIを用いることで、コンパイラの処理記述や対話的処理を簡便にできるようにする。

 以上三つの目標を達成することで、近年開発者人口が低下し、GCCに席巻されているコンパイラ開発の諸問題を解決し、より多くのプログラミング言語設計者、並列分散処理研究者、組込みシステム開発者、プロセッサ設計者、言語処理系の教育者に身近に使えるコンパイラ作成環境を提供することをプロジェクトの最終的な目的とする。

 


10.進捗概要


本プロジェクトでは、利用者として、特殊な言語・CPU のコンパイラを早く作りたい開発者、コンパイラ研究者、

コンパイラ学習者を対象に、マルチソース、マルチターゲットのコンパイラを容易に作成可能な支援環境を開発した。

 本コンパイラ作成支援環境は、次のソフトウェアから構成されている。

(1) コンパイルモジュール

  (a) パーサ、タイプチェッカ、AST 簡約系、LIR 簡約系

  (b) フロー解析、ループ解析モジュール

  (c) リターゲッタブルレジスタアロケータ

(2) コンパイラ作成支援ツール

  (a)パーサジェネレータ yayacc

  (b) リターゲッタブルコード生成ジェネレータ TMD-compiler

  (c) 可視化ツール

(3) Graphviz (AT&T) へのインタフェース

(4) 開発環境、ライブラリ

  改良されたトップレベルループ、多倍精度演算ライブラリ、等

(5) Emacs Lisp 演習問題集

  演習問題を通じたコンパイラ作成支援系の学習例題集

 

図1にコンパイラの構成を示す。yayacがパーサジェネレータ、TMD-compilerがリターゲッタブルなコード生成系である。yayacにより、新しいソース言語に対するフロントエンドを構文定義から自動生成できる。また、TMD-compilerにより、アーキテクチャに対するコード生成規則を記述することで対応するコード生成系を自動生成できる。各モジュール間のインタフェースはS式により定義される。データと同時に、S式により処理手続きをも記述できる。

      

図2.コンパイラモジュールの構成図

 

 構成の中で(2)(c)の可視化ツール、Graphvizへのインタフェースはグラフ構造を持つデータを可視化することにより、記述の読解、デバッグを容易にする。また、(5)の例題集は、Emacs Lispに慣れると同時に、コンパイラ開発の学習を容易にする目的で開発された。

 上記の構成要素を期間内に開発した。Emacs Lisp29000行近い規模となっている。現在、ソース言語として言語Cが実装されている。また、ターゲットアーキテクチャとしてx86TMDが作成されており、実際にプログラムをコンパイルし、実行できることを検証した。 

 


11.成果


コンパイラ作成支援系において、モジュラリティの高い部品を提供することで、独立性が高く、応用分野の広い

ツールを提供することができた。特に、パーサジェネレータ yayacc、マシン記述からコード生成を自動生成するTMD-compiler により、フロントエンドとバックエンドを容易に開発できるようになった。また、Emacs Lisp で実装されていることから、ラピッドプロトタイピングが可能であり、研究開発、テスト、デバッグが容易となっている。

 本プロジェクトのコンパイラ生成系により、従来GCCに依存することが多かった、新しいプログラミング言語の設計開発、並列分散処理環境向けのコンパイラ開発、組込みシステムや高性能計算機向けのCPU用のコンパイラの開発が容易となり、日本の計算機システム産業および計算機システム研究に貢献できる。

 


12.プロジェクト評価


 過去、いくつかのコンパイラインフラのプロジェクトが提案され、コンパイラ生成系が実装されてきた。国内でもいくつかのコンパイラインフラの研究開発が存在し、一定の研究成果をあげてきた。本プロジェクトの開発者は、過去にコンパイラインフラ開発の分担者であり、コンパイラインフラの様々な知見を有している。

 本プロジェクトは、その知見をもとに実施された。S式により一貫したフェーズ間インタフェース、中間言語の持つ仕様などは過去の反省をもとに設計され、高度なモジュラリティを確保できるような設計となっている。何より、Emacs Lisp上でコンパイラ生成支援系を実装する、と言うアイデアは異色である。従来のコンパイラインフラでも中間言語の表現としてS式を採用したものはあり、特定のフェーズをLisp で実装するものは存在した。しかし、すべてのモジュールをLispで実装、しかも、Emacs と言う文字列バッファ管理、表示管理、ライブラリやシステムコールインタフェースを統一的に扱うプラットフォームで実装するアイデアは、文字列ベースのコンパイラ開発では、ラピッドプロトタイピングの観点から有益であると判断した。Lispで書かれたコンパイラ定義をEmacs Lispにロードし、ダンプしたらコンパイラができあがる、はハッカーには魅力的なアイデアである。

 アイデアだけでなく、実用上の観点も重要である。近年、各種のスクリプト言語が目的に応じて新規に設計される機会が増えていること、組込み系などでは新規プロセッサの設計、または特定用途向けに既存のCPUに拡張命令を追加することもあり、新しい言語や新しいアーキテクチャに対応したコンパイラが必要となる。多くの場合GCCを用いることになるが、GCCは巨大な規模であることに加え、コンパイラのモジュールの独立性は低く、一部のプログラマが職人芸的な作業を行っているのが実状であろう。本プロジェクトは、コンパイル性能や生成されたコードの実行性能よりも、コンパイラ開発の期間短縮を目指している点を大いに期待して採択した。

 総計29,000行のLispコードにより、目標を達成する環境を基本的には提供できたと考える。ただ、現在、実装された言語が言語C、ターゲットアーキテクチャはx86にとどまり、本支援系のコンパイラ実装能力が明らかになっていないことが惜しまれる。他のソース言語をyayaccにより定義すること、各種CPUアーキテクチャをTMDで記述すること、また、より高度な最適化処理を記述した上で、記述性の評価、各種性能評価を行うことで、本コンパイラアーキテクチャの有効性を検証することが必要である。今後の進展を大いに期待したい。

 


13.今後の課題


  次の点が今後の課題である。

(1) ドキュメントの整備

 各モジュールのインタフェースおよびモジュールそのもののドキュメントが必要である。

(2) 他ソース言語の実装を通じたパーサジェネレータの評価

(3) 他ターゲットアーキテクチャのTMD記述によるコード生成ジェネレータの評価

(4) コード最適化の実現

 現在は、分岐最適化と定数畳込みだけが実装されている。コード性能が向上する一般的な各種最適化モジュールを組み込む必要がある。

 




  ページトップへ   

 

 

 


  Copyright(c) Information-technology Promotion Agency, Japan. All rights reserved 2004