Expressive and Safe Destructive Extensions for Separation of Concerns

(邦訳:関心事の分離のための破壊的拡張の表現力と安全性の向上)

 
赤井 駿平
サイボウズ(株)

[背景]ソフトウェア開発において,状況に応じたプログラムの一部置き換えは重要
[問題]破壊的拡張の表現力,fragile pointcut問題,拡張の干渉の3つの問題
[貢献]破壊的拡張をより安全に,多くの用途に利用可能に


 ソフトウェアを開発する際に,状況に応じてプログラムの一部を置き換えることは重要である.たとえば,環境に応じてプログラムを切り替え最適な性能を得ることができたり,OS特有の機能を利用したりできるようになる.また,既存のライブラリの一部をカスタマイズし,最低限の変更で必要な機能を得ることができる.このようなプログラムの置き換えは,C言語やC++言語では,#ifや #ifdefなどのマクロを用いて実現している.しかし,マクロでは置き換えたい部分に直接記述するため,モジュールに分割することが十分に行うことができない.プログラムをモジュールに分割することができれば,プログラムの置き換えがより容易になり,再利用性やメンテナンス性が向上する.

 破壊的拡張は既存のソースコードを直接書き換えずに,その振る舞いを変更する技術である.破壊的拡張の中にはアスペクト指向プログラミング(AOP)とクラス拡張という2種類があり,いくつかのプログラミング言語で利用されている.アスペクト指向プログラミングでは,既存のプログラムの中の特定の式の振る舞いを変更できる.クラス拡張は既存のクラスにメソッドを追加したり,メソッドを再定義したりでき,RubyやObjective-Cなどのプログラミング言語で利用されている.破壊的拡張を利用することで,横断的関心事をモジュールにまとめて記述しやすくなる.

 破壊的拡張には次のような改善すべき点がこれまで議論されてきた:(1)表現力の向上,(2)AOPでのfragile pointcut問題,(3)拡張の干渉.表現力を向上させることで,さまざまな関心事をよりモジュールに分割しやすくなる.fragile pointcut問題はソースコードの変更を行うと意図していた拡張がうまく動かなくなってしまう問題である.拡張の干渉は同じ場所を別のモジュールから拡張した場合に正しく動かなくなってしまう問題である.

 本研究では,これらの問題を改善するために,Regioncut,Assertion for Advice,Method Shelters,という3つの技術を導入した.RegioncutはAOPにおいて,コードの領域を選択し,その領域の振る舞いを変更するための言語機構である.既存のAOPでは,単一の式やメソッドボディを選択して振る舞いを変更できたが,メソッド内の一部分は選択できなかった.これにより表現力が向上し,同期処理などの関心事をモジュールに分割して記述できる.Assertion for AdviceではAOPでの振る舞いの変更が意図した部分に適用されているかを検査する技術である.これによりfragile pointct問題を緩和することができる.Method Sheltersはクラスが干渉する問題を解決するための言語機構である.クラス拡張に対しexposedとhiddenという2種類のスコープを与えることで,拡張の干渉を回避できるような仕組みをプログラマに対し提供する.本研究は,破壊的拡張をより安全に,かつさまざまな目的に利用できるようにするための土台となる技術を提供する.
 
 
 (2013年6月24日受付)
取得年月日:2013年3月
学位種別:博士(理学)
大学:東京工業大学



推薦文
:(プログラミング研究会)


オブジェクト指向プログラミング(OOP)の継承機構やアスペクト指向プログラミング(AOP)を,既存のプログラムの変更のために用いる際には粒度や安全性などの面でさまざまな問題が生じる.本研究は,OOP, AOP言語に3つの拡張機能を提案することでプログラムの変更特有の問題を軽減させる意義深い研究である.


著者からの一言


指導教員をはじめとする研究室の皆様のお陰で学位を取得することができました.博士課程の学生生活ではさまざまな貴重な経験をする機会に恵まれました.博士号取得の現在は,民間の企業に就職しました.ソフトウェアの開発を通して情報科学の発展に寄与することができればと思います.