Download presentation
Presentation is loading. Please wait.
1
Report: REFLECTION 2001 @ Kyoto Research Park
TABUCHI Naoshi
2
発表の概要 Program Overview Presentation Details Other Presentations
A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
3
Program Overview: 初日(1/2)
The Java Technology Workshop The Workshop on Experience with Reflective Systems Tutorials
4
Program Overview: 初日(2/2)
とりあえず予備知識を仕入れるためTutorialに参加 (後藤さんすみません) 午前: Java Reflection の Tutorial 出なくてもよかったかも… 午後: AspectJ 入門 テロの影響でビデオ講義 AspectJ の Programming Style には結構魅かれた
5
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
6
Program Overview: 3日目 Testing and Verifications of Reflective and SOC systems Invited Talk (Hideyuki Tokuda) Foundations of Reflection and Separations of Concerns このあたりを後で紹介 遠足
7
Program Overview: 最終日 Software Methodologies for Separation of Concerns Panel Discussion
8
発表の概要 Program Overview Presentation Details Other Presentations
A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
9
A Formal Definition of Crosscuts
先日、講義に来た Mario Südholt 氏らのグループ Aspect-Oriented なプログラムの動作のモデル化 特に crosscuts の定義と検出について
10
Background プログラムの本質 (functional aspect) とそれ以外の雑多な部分 (non-functional concern) を切り分けるが AOP の考え方 切り分けた物の再統合(Aspect Weaving)について形式的に理解したい 特に crosscut の定義と検出に対象を絞る
11
Crosscuts Crosscut とは… プログラム上の互いに関連するポイント プログラムの字面からは関連が読み取りにくい
「関連」の仕方は様々
12
Crosscuts: Examples (1/2)
例1: プログラムの随所でログを取りたい 従来: 必要な箇所に「ログ取り」コードを挿入していく Meth2 Meth1 Meth1 Meth4 Meth3
13
Crosscuts: Examples (2/2)
例2: メソッド呼出を飛び越えて情報を受け渡したい 従来: 途中のメソッドに追加の引数として渡していく etc. Other Calls FinalMeth EntryMeth prof = userProfile access to prof
14
Outline プログラム・処理系の動作・crosscut を簡単にモデル化
Crosscut 定義の為のミニ言語 (with Haskell) Java によるプロトタイプ
15
Definition of Program プログラム = イベントの列
Haskell の書き方では… data Program = Over | Cont (Tick -> (Event, Program))
16
Definition of Run-time System
処理系の動作 = プログラムの実行 + イベントの監視 run :: Program -> Monitor -> [Crosscut] Monitor はプログラムが発行したイベントを受け取って crosscut を検出する
17
Definition of Crosscut
リストなのでイベントの順序関係も表現できる e.g. 先程の例2なら、[EntryMeth FinalMeth] というリストが1つの crosscut
18
Summary 処理系は… 検出した crosscut に対する処理 (action) は考慮していない (future work)
プログラムを 1ステップ実行 プログラムの実行情報をモニタに渡す モニタで crosscut を検出 検出した crosscut に対する処理 (action) は考慮していない (future work)
19
Crosscut Detection モニタはどうやって crosscut を検出するか
⇒この論文では: イベント列のパターンマッチとして考える パターンを記述する言語 パターンマッチングの機構
20
Pattern Language パターンを定義するための言語 見た目としては「小さなプログラム言語」 data Pattern =
Return Crosscut | Pattern `Seq` Pattern | Filter (Event -> Bool) Pattern | Pattern `Par` Pattern | etc…
21
Pattern Matching パターンマッチ = パターン言語の“reduction” イベントを受け取ってパターン言語を「評価」
Return foo が出現 ⇒ Crosscut foo を検出
22
Pattern Matching: Example
パターンマッチの例 擬似コードによるイメージ “e1:次のEntryMeth” `Seq` “e2:次のFinalMeth” → Return [e1 e2] EntryMeth イベント ⇒ “e2:次のFinalMeth” → Return [e1 e2] FinalMeth イベント ⇒ Return [e1 e2]
23
Java Prototype 以上のフレームワークを Java でプロトタイプ的に実装した
基本的に、Haskell コードを Java に移しただけ 元が Haskell なのでシンプルで分りやすい(筆者らの主張では)
24
Conclusion 「実行モニタ」をベースとした、crosscut 検出のモデル Java での実装 (プロトタイプ)
パターンの色々な性質を証明できる⇒最適化 AspectJ の cflow 等も定義できる Java での実装 (プロトタイプ)
25
Future Works よくあるパターンを集めてライブラリ化 他の方法でのパターン定義
正規表現 Java 風の構文 Crosscut 検出後のアクションも考慮したモデル化
26
発表の概要 Program Overview Presentation Details Other Presentations
A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
27
Process-Algebraic Foundations of Aspect-Oriented Programming
こちらは Aspect-Oriented Compiler の動作をモデル化しようというお話 道具立てとしてプロセス代数を使っている
28
Background AOP では「Aspect とプログラムを統合する」(Weaving) というコンパイラの仕事が重要
29
Outline AOP プログラムをプロセス代数の言葉で置き換え Weaving = 同期の除去 手続き型言語からの変換
30
Process Language プロセス代数の言語としては CSP (Hoare) を使っている。
31
Process Language: Syntax
構文は以下のような感じ nil (何もしない) t -> P (t を実行して P) P □ Q (P か Q のいずれか) P|S|Q (同期) p[t1,…,tn] (プロセス定義の呼出 c.f. function call) Etc…
32
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’
33
Metaphor AOP の概念とプロセス代数の概念を下のように対応させて考える。 AOP Process Algebra
Aspect/concern Process Program Process Def. Main function Root process w/z Sync Aspect Weaving Sync elimination
34
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… という順序を保証
35
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.)
36
Aspect Weaving Algorithm
入力: プロセス定義 & Root 出力: 変換後のプロセス定義 & Root 出力は入力と trace-equivalent ただし、アルゴリズムは停止しないことも
37
Example 先ほどの電子レンジを変換すると以下のようになる
R1[] = lock(door) -> turn(on) -> S2[] S2[] = lock(door) -> nil □ turn(off) -> S3[] S3[] = unlock(door) -> R1[] Root: R1[]
38
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} で同期させていく
39
Conclusion AOP をプロセス代数に置き換えて、Aspect Weaving を形式的に論じた 手続き型言語からの変換
「正しい」 Weaving ⇔ Trace-equivalence Weaving は停止しないこともある (実用上は問題なし) プロセス代数の良く知られた結果が使える 手続き型言語からの変換
40
Future Works Weaving アルゴリズムのスケーラビリティ 停止性が保証できるアルゴリズムは可能か(多分無理?)
もっと深くつっこんだ解析 実用的な AOP 言語
41
発表の概要 Program Overview Presentation Details Other Presentations
A Formal Definition of Crosscuts Process-Algebraic Foundations of Aspect-Oriented Programming Other Presentations Comments
42
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 の自動生成?
43
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
44
Other Presentations (3/3)
UML Reflections SADES Coping with Crosscutting Software Changes…
45
Comments (1/2) 感想など… 提案レベルというか、いまいち結果が見えにくい発表が多かったような気がする。
実は POPL系の人間には結構食い込む余地がある?
46
Comments (2/2) その他 (知ってたけど)KRPは食べる所が少ない! 眠かった…
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.