asatoの技術的な日常日記

「成長に最大の責任をもつ者は、本人であって組織ではない。自らと組織を成長させるためには何に集中すべきかを、自らに問わなければならない」  非営利組織の経営 - ピーター・ドラッカー

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

アーキテクチャ・メタプログラミング

Don Batory さんの次の論文を読んだ。

D. Batory,

Program Refactorings, Program Synthesis, and Model-Driven Design,

Invited Presentation, European Joint Conferences on Theory and Practice of Software (ETAPS) Compiler Construction Conference (April 2007).

DL: http://www.cs.utexas.edu/users/schwartz/pub.htm


色々適当に解説っぽいことをしながら、学んでみることにしよう。

「アーキテクチャメタプログラミング(Architectural metaprogramming)」とは何か。

プログラムリファクタリング、アスペクト指向などのプログラム合成、モデル駆動開発なんかは、彼によれば、アーキテクチャメタプログラミング技術とみなせるらしい。というのもこれらの技術は、プログラムを値とみなし、関数(変換)を使うことで、プログラムのプログラムにマップするため。

図で書くとこんな感じか(図は僕のオリジナル)。
arch_meta.png

arch_meta2.png



論文は、アーキテクチャメタプログラミングからではなく、ソフトウェアの複雑性の話から始まっている。

20年前に、Brooks さんは、プログラマーは、本質的な複雑性(essential complexity)ではなく、偶発的な複雑性(accidental complexity)において多くの時間を費やしている、と観測したらしい。

Batory さんによれば、多くの場合、これらの複雑性の違いをうまく言い表せないらしい。

それはさておき、Brooks さんの話によれば、複雑性には、上記の二つがあることになる。
complexity.png


この二つ複雑性について詳しくは、僕は知らないけど、Batory さんによれば、複雑性というのは、構造に関して制約を強いる(imposing structure)ことで制御できるらしい。で、この論文は、ソフトウェア構造の本質的な複雑性についてのものらしい。

で、プログラムリファクタリングとか、プログラム合成、モデル駆動開発なんかは、プログラム構成についてのもの。

ちなみに、論文では「ソフトウェア構造」と「プログラム構造」は厳密に区別していないように見える。


で、次に、アーキテクチャメタプログラミングの基本的なことについての話に移ってる。

上述のように、アーキテクチャメタプログラミングでは、プログラムを値と見なす。例として、次のような「値 C」と「値 D」が紹介されてた。

class c { // 値 C
int x;
void inc() {
x++;
}
}
class d { // 値 D
int compute() { }
}



値は加算することができる。加算 C + D は、クラス c と d からなるプログラム。

次の例。
arch_meta_eg.png



この後、足し算と引き算の特性についての議論があったけど省略。


次に、distributive transformations (DTs) と呼ばれるオペレーションについての話題。

DT の例は、rename(p, q, r) があるらしい。これは、プログラム p における名前 q を r で置き換えるらしい。

たとえば、名前 "x" を "x" で置き換えたいなら、こうする: rename(C2, xx, y)。この適用により、値 C3 が生じる。
rename.png



ここまで書いて力尽きたので続きはまた今度。
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://asatohan.blog77.fc2.com/tb.php/41-48c9a1a4
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。