(邦訳:関心事の分離のための破壊的拡張の表現力と安全性の向上)
赤井 駿平 サイボウズ(株) |
[背景]ソフトウェア開発において,状況に応じたプログラムの一部置き換えは重要
[問題]破壊的拡張の表現力,fragile pointcut問題,拡張の干渉の3つの問題
[貢献]破壊的拡張をより安全に,多くの用途に利用可能に
[問題]破壊的拡張の表現力,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種類のスコープを与えることで,拡張の干渉を回避できるような仕組みをプログラマに対し提供する.本研究は,破壊的拡張をより安全に,かつさまざまな目的に利用できるようにするための土台となる技術を提供する.
破壊的拡張は既存のソースコードを直接書き換えずに,その振る舞いを変更する技術である.破壊的拡張の中にはアスペクト指向プログラミング(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日受付)