学位論文要旨



No 119861
著者(漢字) 紙名,哲生
著者(英字)
著者(カナ) カミナ,テツオ
標題(和) 強く型付けされたオブジェクト指向言語におけるmixin合成の設計と実現
標題(洋) A Design and Implementation of Mixin-Based Composition in Strongly Typed Object-Oriented Languages
報告番号 119861
報告番号 甲19861
学位授与日 2005.03.24
学位種別 課程博士
学位種類 博士(学術)
学位記番号 博総合第565号
研究科 総合文化研究科
専攻 広域科学専攻
論文審査委員 主査: 東京大学 教授 玉井,哲雄
 東京大学 教授 川合,慧
 東京大学 助教授 増原,英彦
 東京大学 教授 山口,和紀
 京都大学 講師 五十嵐,淳
内容要旨 要旨を表示する

 Java をはじめとする多くのオブジェクト指向言語では,プログラムを再利用するための言語機構として単一継承の機構を提供している.しかし単一継承機構では,「複数のスーパークラスに対して行う共通の拡張や修正」を行うモジュールを作成することができない.一方でそのようなモジュールは,Common Lisp のオブジェクト指向的拡張であるFlavors やCLOS において,mixin の機構を用いることによって実現されてきた.mixin とは,スーパークラスをパラメータ化することによって抽象化されたクラスのことである.mixin を他のクラスや他のmixin と合成してそのパラメータを埋めることによって,mixin の利用者が,そのmixin がどのクラスやmixin を継承するかを決めることができる.ただしCLOS などには静的な型システムが存在しない.本論文では,Java のような型付オブジェクト指向言語におけるmixin 機構の実現方法について提案する.

 本論文で扱われる問題は以下の通りである.まず,既存のオブジェクト指向言語に対するmixin 機構の導入を提案する.このとき,プログラミング言語が持つべき基本的な性質である型健全性について調べる.型健全性とは,コンパイラが受理したプログラムは,実行時にある種のエラーを起こさないことが保証されるという性質である.次に,mixin 機構の実装方法について考える.実行効率と既存のプラットフォームとの互換性がここでの主な論点である.次に,mixin 機構が引き起こす新たな問題点について考察する.mixin 機構には,mixin で定義されたメソッドがスーパークラスのメソッドを非意図的に上書きしてしまい,危険な振る舞いを引き起こす可能性のあることが指摘されており,この問題点を解決する必要がある.最後に,mixin 機構が,近年新たに提案されてきた他の言語機構とどのような関わり方をするかについて調べる.

 具体的に,本論文ではJava にmixin 機構を導入して拡張したプログラミング言語McJava の設計を行った.構文としては,従来のJava の文法に加えて,mixin を宣言するための構文と,mixin を他のクラスや他のmixin と合成するための演算子が新たに加わっている.これらmixin 宣言,mixin 合成,それにmixin の名前を型として扱えるmixin 型の機構に加えて,McJava ではmixin をmixin と合成し,新たなmixin を作る高階mixin の機構と,mixin 合成間における柔軟な部分型機構を提供している.特に後者の部分型の機構は,従来のオブジェクト指向言語が部分型関係をクラスの間の継承関係でしか決めていなかったのに対して,本研究では継承関係の間に部分型関係が決められ,継承関係の間に別のクラスが混ざったものでももとの継承関係の部分型として認められるという点で特徴的である.これによりプログラミングの柔軟性が高まる.

 型健全性の性質は,McJava のサブセットであるCore McJava 上で調べた.Core McJava は,Java のサブセットであるFJ の拡張として作られている.FJ は,Java の型システムを特徴づけている基本的な機構のみを持つ小さな言語で,McJava のようなJava の拡張の型システムの持つ性質を調べるときに広く用いられている計算体系である.Core McJava は,FJ に,上で述べられた,McJava を特徴づけている言語機構を加えたものである.本論文では,Core McJava が型健全であることを証明した.

 次に,McJava の実装方法について述べる.McJava コンパイラの実装は,Java へのソースコード変換によって行った.本論文で提案された変換方法は,Java のみで書かれたプログラムには変換中全く変更が加えられない.またmixin 合成は,それと同じ深さを持つJava の継承関係へと変換される.以上のことから,本論文で提案された実現方法により,Java と同程度の実行効率がMcJava でも保証されることが示された.Java に変換されることから,既存のJava 仮想機械との互換性も保証される.さらに,Java のみで書かれたプログラムには変更が加えられないことから,既存のライブラリとの互換性も理論的には保証される.

 次に,非意図的な上書きの問題の解決方法について述べる.本論文では,この問題を解決するために新たなメソッドディスパッチの機構を提案した.通常のJava におけるメソッドディスパッチ機構は,常にメソッド呼び出しのレシーバの,実行時のクラス継承の一番深いところからメソッドが検索される.それに対して本論文で提案された機構では,レシーバの静的な型を実行時に保存し,メソッドはこの静的な型を起点として探される.これによって,レシーバ(実行時オブジェクト)に複数の同じシグネチャを持つメソッドが存在する場合でも,静的な型情報を用いてそれらのうちから適切なメソッドが呼び出されることになり,非意図的な上書き(片方がもう片方を完全に隠すこと)はなくなる.特にMcJava の場合,上で述べた柔軟な部分型の機構から,静的に分かるスーパークラスが実行時のスーパークラスと異なる場合がある.つまり,super に対してメソッドを呼び出すときに,静的に分かるスーパークラスのほうへメソッド検索の制御を移すことが必要になる場合がある.本研究ではこの機構をJava へのソースコード変換として実装し,どのように変換されるかを具体例を用いて示した.

 最後に,mixin 機構と他の言語機構との関連について述べる.Java を拡張する研究には数多くのものがあるが,本論文では特に,それらの中から総称型及びThisType の機構とmixin 機構との関わり方について調べた.総称型とは,型定義(クラスやmixin 等の定義)のなかで用いられている型情報を,パラメータによって抽象化したもののことである.ThisType とは,this の型のことである.総称型の機構は実際Java 言語の正式なリリースに取り入れられたものである.ThisType はJava には今のところ取り入れられてはいないが,モジュールの拡張を考えるときに重要な役割を果たすものである.本論文ではこれらの言語機構をMcJava に取り入れた場合,表現力がどれだけ増し,型健全性の性質はどうなるかについて議論した.結果,プログラムのモジュラリティが高まり,表現力が増すことが例題を用いることによって示された.型健全性に関しては,モジュールを構成する内部要素間の部分型関係についてある種の制約を加えなければ保証されないことが示された.ただしこの制約は,実用上問題ないものであると考えられる性質のものである.

 以上,本論文ではJava のような型付オブジェクト指向言語におけるmixin 合成の実現方法について研究した.そして言語が型健全性の性質を持つこと,処理系が妥当な実行効率と後方互換性の性質を持つこと,非意図的なメソッド上書きの問題点が解決されることが示された.さらに,mixin 合成と総称型やThisType との関わり方を調べた結果,これらを含む言語のモジュラリティが高まることがわかった.以上のことから,本論文で提案された手法はJava におけるmixin 合成の設計及び実現方法として有力なものである.

審査要旨 要旨を表示する

 本論文では,強く型付けされた既存のオブジェクト指向言語を拡張し,新たな言語の設計及び実装を行った研究について報告している.

 現在,Javaをはじめ型安全性について配慮したオブジェクト指向言語が,ソフトウェア開発の場で広く用いられている.一方で,クラス,単一継承,その継承関係で定まる部分型関係で特徴づけられるJavaのような言語の問題点として,モジュール性の弱さと,部分型関係の不十分さが指摘されている.本研究は,JAVAに,CLOSなどの言語におけるプログラム技法として知られているmixin合成の機構を導入して拡張したプログラミング言語McJavaの設計と実装を行うことにより,これらの問題点の解決を目指すものである.

 McJavaの設計の方針は,次の通りである.第一に,拡張した言語上で型システムの安全性が維持されることを保証する.第二に,拡張後の言語と既存言語であるJavaとの整合性が保たれていることを保証する.また,新たな言語機構が既存の言語内で記述されたプログラムの実行効率を低下させないようにする.本論文の第1章では,上述の研究の動機や目的を述べている.第2章では,McJavaの機能を概観し,McJavaで新たに導入された言語機構がJavaの持つ問題点をどのように解決するかについて,例題を用いて説明している.さらに導入したmixin合成の機構につき,その言語仕様を明示している.この仕組みにより「複数のクラスに対する共通の差分」のモジュール化が可能となる.またmixin導入に伴って拡張された型の空間に対し,新たな部分型関係を矛盾なく導入し,言語の表現力を拡大している.

 第3章では,McJavaの型システムをモデル化した核言語であるCore McJavaを導入し,その形式的定義を与えている.Core McJavaにおける計算を簡約規則で定め,型健全性定理を証明するのに必要な型付け規則や部分型規則を形式的に与える.その上でCore McJavaの型健全性の定理を証明し,かつ型付けされたCore McJavaのプログラムはキャスト失敗以外のエラーを実行時に起こさないことも証明した.本章の結果は,McJavaの型システムがJavaの型システムの安全性を損なわないことを示している.

 第4章では,McJavaコンパイラの実装方式について述べている.Core McJavaコンパイラはJavaへのソースコード変換として実現している.Javaへ変換することにより,Javaとの互換性を保ちつつ,実行効率の低下を招かない実装が可能となる.

 第5章では,mixin機構がもたらすメソッド衝突の問題を紹介し,それに対する解決方法を述べている.この問題は,表現力を増すために導入したmixin機構が生み出す新たな課題であるが,本論文では,メソッド割り当てにコンパイル時の受け手の型情報を用いる新しい機構を提案することにより,解決している.

 第6章では,特に最近注目されている新たな言語機構としての総称型やThisTypeという概念と,mixin機構との安全な組み合わせ方法について述べている.そしてこれらの言語機構をすべて組み合わせた言語を提案し,再利用に対して高い柔軟性を持つことを例題を通して示している.

 第7章では関連研究との比較や議論を行い,第8章では本論文の成果と残された課題について総括している.

 現在,信頼性の高いソフトウェアを効率よく生産することに対する社会的要請はますます高まっている.そのため従来のプログラミング言語を発展させ,型システムやモジュール化能力を強力にしていく必要性があるが,本論文で示されたプログラミング言語McJavaのアプローチはその1つの方向性を示すものと言え,学問上貢献するところが大きい.したがって,本審査委員会は博士(学術)の学位を授与するにふさわしいものと認定する.

UTokyo Repositoryリンク