Report: REFLECTION 2001 @ Kyoto Research Park TABUCHI Naoshi (tabee@yl) 発表の概要 Program Overview Presentation Details A Formal Definition of Crosscuts Process-Algebraic Foundations of AspectOriented 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 A Formal Definition of Crosscuts Process-Algebraic Foundations of AspectOriented 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: メソッド呼出を飛び越えて情報を受け渡 したい EntryMeth prof = userProfile Other Calls FinalMeth access to prof 従来: 途中のメソッドに追加の引数として渡 していく etc. 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 Crosscut = イベントのリスト 関連のあるイベント同士が一つの crosscut を作る リストなのでイベントの順序関係も表現で きる e.g. 先程の例2なら、[EntryMeth FinalMeth] というリストが1つの crosscut Summary 処理系は… プログラムを 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 検 出のモデル Crosscut を定義するための小さな言語 パターンの色々な性質を証明できる⇒最適化 AspectJ の cflow 等も定義できる Java での実装 (プロトタイプ) Future Works よくあるパターンを集めてライブラリ化 他の方法でのパターン定義 正規表現 Java 風の構文 Crosscut 検出後のアクションも考慮したモ デル化 発表の概要 Program Overview Presentation Details A Formal Definition of Crosscuts Process-Algebraic Foundations of AspectOriented Programming Other Presentations Comments Process-Algebraic Foundations of Aspect-Oriented Programming こちらは Aspect-Oriented Compiler の動 作をモデル化しようというお話 道具立てとしてプロセス代数を使っている Background AOP では「Aspect とプログラムを統合す る」(Weaving) というコンパイラの仕事が 重要 現状: Weaving のアルゴリズムの「正しさ」 を保証するための手段がない Outline AOP プログラムをプロセス代数の言葉で 置き換え Weaving = 同期の除去 正しい 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 Aspect/concern Program Main function Aspect Weaving Process Algebra Process Process Def. Root process w/z Sync Sync elimination Example 例: 電子レンジのプログラム 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 上の関係 (+その他の同値関係) を繰り返 し適用して、できる限り同期を無くすことが Aspect Weaving に相当 入力: プロセス定義 & 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 A Formal Definition of Crosscuts Process-Algebraic Foundations of AspectOriented 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は食べる所が少ない! 眠かった…
© Copyright 2025 ExpyDoc