Report: REFLECTION 2001 @ Kyoto Research Park

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は食べる所が少ない!
眠かった…