Report: REFLECTION 2001 @ Kyoto Research Park TABUCHI Naoshi (tabee@yl)
発表の概要 Program Overview Presentation Details Other Presentations A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
Program Overview: 初日(1/2) The Java Technology Workshop The Workshop on Experience with Reflective Systems Tutorials
Program Overview: 初日(2/2) とりあえず予備知識を仕入れるためTutorialに参加 (後藤さんすみません) 午前: Java Reflection の Tutorial 出なくてもよかったかも… 午後: AspectJ 入門 テロの影響でビデオ講義 AspectJ の Programming Style には結構魅かれた
Program Overview: 2日目 Keynote Talk (Gregor Kiczales) Reflection and SOC in Java Software Adaptation using Reflection and SOC Techniques Reflective Middleware for Distributed Mobile Applications Posters + Reception
Program Overview: 3日目 Testing and Verifications of Reflective and SOC systems Invited Talk (Hideyuki Tokuda) Foundations of Reflection and Separations of Concerns このあたりを後で紹介 遠足
Program Overview: 最終日 Software Methodologies for Separation of Concerns Panel Discussion
発表の概要 Program Overview Presentation Details Other Presentations A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
A Formal Definition of Crosscuts 先日、講義に来た Mario Südholt 氏らのグループ Aspect-Oriented なプログラムの動作のモデル化 特に crosscuts の定義と検出について
Background プログラムの本質 (functional aspect) とそれ以外の雑多な部分 (non-functional concern) を切り分けるが AOP の考え方 切り分けた物の再統合(Aspect Weaving)について形式的に理解したい 特に crosscut の定義と検出に対象を絞る
Crosscuts Crosscut とは… プログラム上の互いに関連するポイント プログラムの字面からは関連が読み取りにくい 「関連」の仕方は様々
Crosscuts: Examples (1/2) 例1: プログラムの随所でログを取りたい 従来: 必要な箇所に「ログ取り」コードを挿入していく Meth2 Meth1 Meth1 Meth4 Meth3
Crosscuts: Examples (2/2) 例2: メソッド呼出を飛び越えて情報を受け渡したい 従来: 途中のメソッドに追加の引数として渡していく etc. Other Calls FinalMeth EntryMeth prof = userProfile access to prof
Outline プログラム・処理系の動作・crosscut を簡単にモデル化 Crosscut 定義の為のミニ言語 (with Haskell) Java によるプロトタイプ
Definition of Program プログラム = イベントの列 Haskell の書き方では… data Program = Over | Cont (Tick -> (Event, Program))
Definition of Run-time System 処理系の動作 = プログラムの実行 + イベントの監視 run :: Program -> Monitor -> [Crosscut] Monitor はプログラムが発行したイベントを受け取って crosscut を検出する
Definition of Crosscut リストなのでイベントの順序関係も表現できる e.g. 先程の例2なら、[EntryMeth FinalMeth] というリストが1つの crosscut
Summary 処理系は… 検出した crosscut に対する処理 (action) は考慮していない (future work) プログラムを 1ステップ実行 プログラムの実行情報をモニタに渡す モニタで crosscut を検出 検出した crosscut に対する処理 (action) は考慮していない (future work)
Crosscut Detection モニタはどうやって crosscut を検出するか ⇒この論文では: イベント列のパターンマッチとして考える パターンを記述する言語 パターンマッチングの機構
Pattern Language パターンを定義するための言語 見た目としては「小さなプログラム言語」 data Pattern = Return Crosscut | Pattern `Seq` Pattern | Filter (Event -> Bool) Pattern | Pattern `Par` Pattern | etc…
Pattern Matching パターンマッチ = パターン言語の“reduction” イベントを受け取ってパターン言語を「評価」 Return foo が出現 ⇒ Crosscut foo を検出
Pattern Matching: Example パターンマッチの例 擬似コードによるイメージ “e1:次のEntryMeth” `Seq` “e2:次のFinalMeth” → Return [e1 e2] EntryMeth イベント ⇒ “e2:次のFinalMeth” → Return [e1 e2] FinalMeth イベント ⇒ Return [e1 e2]
Java Prototype 以上のフレームワークを Java でプロトタイプ的に実装した 基本的に、Haskell コードを Java に移しただけ 元が Haskell なのでシンプルで分りやすい(筆者らの主張では)
Conclusion 「実行モニタ」をベースとした、crosscut 検出のモデル Java での実装 (プロトタイプ) パターンの色々な性質を証明できる⇒最適化 AspectJ の cflow 等も定義できる Java での実装 (プロトタイプ)
Future Works よくあるパターンを集めてライブラリ化 他の方法でのパターン定義 正規表現 Java 風の構文 Crosscut 検出後のアクションも考慮したモデル化
発表の概要 Program Overview Presentation Details Other Presentations A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
Process-Algebraic Foundations of Aspect-Oriented Programming こちらは Aspect-Oriented Compiler の動作をモデル化しようというお話 道具立てとしてプロセス代数を使っている
Background AOP では「Aspect とプログラムを統合する」(Weaving) というコンパイラの仕事が重要
Outline AOP プログラムをプロセス代数の言葉で置き換え Weaving = 同期の除去 手続き型言語からの変換
Process Language プロセス代数の言語としては CSP (Hoare) を使っている。
Process Language: Syntax 構文は以下のような感じ nil (何もしない) t -> P (t を実行して P) P □ Q (P か Q のいずれか) P|S|Q (同期) p[t1,…,tn] (プロセス定義の呼出 c.f. function call) Etc…
Process Language: Sync 同期について… P|S|Q は a ∈ S かつ P, Q が共に a を実行できる時にのみ実行できる e.g. a->P’|{a}|a->Q’ → P’|{a}|Q’ a->P’|{a}|b->Q’ → a->P’| {a}|Q’
Metaphor AOP の概念とプロセス代数の概念を下のように対応させて考える。 AOP Process Algebra Aspect/concern Process Program Process Def. Main function Root process w/z Sync Aspect Weaving Sync elimination
Example 例: 電子レンジのプログラム 同期(青字)によって on → off → on… という順序を保証 button[] = lock(door) -> turn(on) -> button[] □ turn(off) -> unlock(door) -> button[] seq[] = turn(on) -> turn(off) -> seq[] Root: button[] | {turn(_)} | seq[] 同期(青字)によって on → off → on… という順序を保証
Sync Elimination Aspect Weaving = 同期の除去(前述) そのために、以下のような関係を使う (nil|S|nil) ~ nil (P□P’|S|Q) ~ (P|S|Q)□(P’|S|Q) (nil|S|t->Q) ~ if (t ∈ S) then nil else t->(nil|S|Q) Etc… 右と左は「等価」なプロセス (trace-equiv.)
Aspect Weaving Algorithm 入力: プロセス定義 & Root 出力: 変換後のプロセス定義 & Root 出力は入力と trace-equivalent ただし、アルゴリズムは停止しないことも
Example 先ほどの電子レンジを変換すると以下のようになる R1[] = lock(door) -> turn(on) -> S2[] S2[] = lock(door) -> nil □ turn(off) -> S3[] S3[] = unlock(door) -> R1[] Root: R1[]
Translation of Imperative Language プロシージャ定義とAspect定義を持つ仮想的な手続き型言語を、プロセス言語に変換する方法について 詳細は略。直観的には… プロシージャ p ⇒ call -> 処理 -> return Aspect a ⇒ call -> if (callee is p) then 処理 (before), return -> if (from p) then 処理 (after), etc… それらを適宜 {call, return} で同期させていく
Conclusion AOP をプロセス代数に置き換えて、Aspect Weaving を形式的に論じた 手続き型言語からの変換 「正しい」 Weaving ⇔ Trace-equivalence Weaving は停止しないこともある (実用上は問題なし) プロセス代数の良く知られた結果が使える 手続き型言語からの変換
Future Works Weaving アルゴリズムのスケーラビリティ 停止性が保証できるアルゴリズムは可能か(多分無理?) もっと深くつっこんだ解析 実用的な AOP 言語
発表の概要 Program Overview Presentation Details Other Presentations A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
Other Presentations (1/3) JAC: Pure Java な AOP フレームワーク Reflex: Reflection を強化した Java 拡張 System Checkpointing Using Reflection and Program Analysis JavaPod・DJ: Java での Dynamic Adaptation関連 K-Component: Architecture meta-model の自動生成?
Other Presentations (2/3) Separation of Concerns in Mobile Agent… MolèNE: Mobile Agent のためのミドルウェア Simple Security Aware MOP for Java Reflective Middleware Solutions for Context-Aware Applications Testing MetaObject Protocols Generated by Open Compilers for Safety-Critical Systems Supporting Formal Verifications of Crosscutting Concerns
Other Presentations (3/3) UML Reflections SADES Coping with Crosscutting Software Changes…
Comments (1/2) 感想など… 提案レベルというか、いまいち結果が見えにくい発表が多かったような気がする。 実は POPL系の人間には結構食い込む余地がある?
Comments (2/2) その他 (知ってたけど)KRPは食べる所が少ない! 眠かった…