Dynamic AOPと その実装手法について

Slides:



Advertisements
Similar presentations
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
通信処理のカーネル内競合を 検出するアスペクト指向 カーネルレベルロガー
柳澤 佳里* 光来 健一* 千葉 滋* *東京工業大学 情報理工学研究科 数理・計算科学専攻
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
柳澤 佳里 (学籍番号: 03M37311) 指導教官: 千葉 滋 東京工業大学 情報理工学研究科 数理・計算科学専攻
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
プログラミング言語入門 手続き型言語としてのJava
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
{t-isio, kamiya, kusumoto,
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
Javaプログラムの変更を支援する 影響波及解析システム
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
Addistant:アスペクト指向の 分散プログラミング支援ツール
アルゴリズムとデータ構造 2010年6月21日
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
バイトコードを単位とするJavaスライスシステムの試作
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
C言語を用いたマシン非依存な JITコンパイラ作成フレームワーク
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
Java における 先進的リフレクション技術
契約による クラスとアスペクト間の 影響解析
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
「マイグレーションを支援する分散集合オブジェクト」
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
プログラム分散化のための アスペクト指向言語
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

Dynamic AOPと その実装手法について 情報処理学会プログラミング研究会 発表資料 2003年1月23日 Dynamic AOPと その実装手法について  東京工業大学 佐藤芳樹 千葉滋 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 1.AOP(Aspect-Oriented-Programming) 簡単な例 モジュール間を横断する関心事(crosscutting concerns)をアスペクトとしてカプセル化 [ BookShelf ] Book search(String key) { while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; } なぜか遅いんだけど、 一体なんでだろう? どこがボトルネック!? [Book] boolean match(String key) { if (match0(key)) return true; else return false; } モジュール間にまたがる横断的関心事(crosscutting concern)をアスペクトとしてモジュール化する新たなプログラミングパラダイム Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 1.AOP(Aspect-Oriented-Programming) 散らばるコード モジュール間を横断する関心事(crosscutting concerns)をアスペクトとしてカプセル化 [ BookShelf ] public static File loggingFile; Book search(String key) { Profiler.start(BookShelf.loggingFile); while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; Profiler.stop(BookShelf.loggingFile); } あちこちに散らばるコード crosscutting concern 分散、同期、セキュリティ トランザクション、etc… [Book] boolean match(String key) { Profiler.start(BookShelf.loggingFile); if (match0(key)) { Profiler.stop(BookShelf.loggingFile);    return true; } else { return false; } モジュール間にまたがる横断的関心事(crosscutting concern)をアスペクトとしてモジュール化する新たなプログラミングパラダイム 保守性・再利用性が低下 どうやらOOでも駄目らしい Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 1.AOP(Aspect-Oriented-Programming) アスペクトにカプセル化 モジュール間を横断する関心事(crosscutting concerns)をアスペクトとしてカプセル化 [ BookShelf ] Book search(String key) { while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; } Aspect searchとmatchの前後 Profiler#start(),stop() loggingFile [Book] boolean match(String key) { if (match0(key))    return true;   else return false; } 散らばっていた処理、無理に 受け渡してたデータを分離 モジュール間にまたがる横断的関心事(crosscutting concern)をアスペクトとしてモジュール化する新たなプログラミングパラダイム アプリロジックと無関係な 非機能的処理も再利用できる Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 1.AOP(Aspect-Oriented-Programming) アスペクト処理系が合成 モジュール間を横断する関心事(crosscutting concerns)をアスペクトとしてカプセル化 [ BookShelf ] public static File loggingFile; Book search(String key) { Profiler.start(BookShelf.loggingFile); while (_booklist.hasMoreElements()) if (_booklist.next().match(key)) return book[i]; Profiler.stop(BookShelf.loggingFile); } Aspect searchとmatchの前後 Profiler#start(),stop() loggingFile [Book] boolean match(String key) { Profiler.start(BookShelf.loggingFile); if (match0(key)) { Profiler.stop(BookShelf.loggingFile);    return true; } else { return false; } モジュール間にまたがる横断的関心事(crosscutting concern)をアスペクトとしてモジュール化する新たなプログラミングパラダイム weaver アスペクトとプログラムを 静的に合成(weave) Mar 12-14, 2003 SPA 2003, Hakone

Dynamic AOP 2. Dynamic AOPとその実装 実行時にアスペクトとプログラムを合成 利点 開発効率を改善 実行したまま、プロファイリング、アサーション、ロギングのOn/Off  AspectJ : ポーリング箇所を替えるごとにstop-rebuild-restart 実行環境に適応するソフトウェア 要求・環境に応じて、最適なアスペクトに切り替え Mar 12-14, 2003 SPA 2003, Hakone

分散GUIの例 2. Dynamic AOPとその実装 クライアントに応じて アスペクトを合成 ・配置 ・解像度 ・ビットレート Aspect pda = new Aspect(“PDAAspect”); Aspect pc = new Aspect(“PCAspect”); switch(client) { case PDA : weaver.weave(pda); case PC : weaver.weave(pc); } クライアントに応じて アスペクトを合成 PC用Aspect ・配置 ・解像度 ・ビットレート ・色数 etc… Note用Aspect PDA用Aspect Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 AOPのモデル ・フィールド アクセス join-point でアドバイスを実行する プログラム中の場所   コードの断片 ・メソッド 呼び出し ・オブジェクト 生成 ・・・ Dynamic Join Point Model (AspectJ[*1]で提案) アスペクト pointcut 場所の指定 (join-pointを指定) match() search() advice  処理の記述 『AOPはJoin-pointでアドバイスと呼ばれるコードの断片を実行するというモデルに基づく』 join-pointを指定するポイントカットとjoin-pointで実行するコードを表すアドバイスがある join-point Profiler.start() *1 Xerox Corporation. “The AspectJ Programming Guide. Online Documentation”, 2001. http://www.eclipse.org/aspectj/ Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 フックでの典型的な実装 フックコードの挿入 コード変換器でjoin-pointへフックコードを挿入 プログラムの実行をインターセプトし、アドバイスを実行 挿入された フックコード do_before_advice(); do_after_advice(); join point フック 『オブジェクト指向言語でAOPを実装する典型的な方法は、join-pointにあたる場所フックを挿入し フックした場所で適切なアドバイスを実行する』 pointcut 指定 Mar 12-14, 2003 SPA 2003, Hakone

求められるDAOPシステムの要件 2. Dynamic AOPとその実装 実行時にフックを引っ掛けてアスペクトを合成 仕掛けが少なく 通常の実行では性能を落とさない 処理系に手を加えない 合成は早く 停止時間を抑えてプログラムに反映 コードの実行も早く 高速にアドバイスを実行 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 DAOPシステムの実装技法 実行時にフックを挿入するための技法 MOP(Metaobject Protocol) CLOS、Smalltalk、etc リフレクション(イントロスペクション)[3] クラスを巡回 静的コード変換[4,5] 静的なAOPシステムの手法と類似した手法 処理系に用意[6,7] インタプリタ(JIT)、デバッガ ジャストインタイム・フック  埋め込み(我々) オンデマンドにフックを埋め込む [3] D. Orleans and K. Lieberherr. DJ: Dynamic Adaptive Programming in Java In Reflection 2001 [4] J. Baker and W. Hsieh. “Runtime Aspect Weaving Through Metaprogramming” In AOSD’02 [5] A. Popovici, T. Gross, and G. Alonso. “Dynamic Weaving for Aspect Oriented Programming” In AOSD’02 [6] A. Popovici, G. Alonso, and T. Gross. “Just-In-Time Aspects” In AOSD’03 [7] Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 『DAOPシステムは多数存在するが、リフレクションを処理系がサポートする言語では、実行時に容易にフックを挿入できる』 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 DAOPシステムの実装技法 実行時にフックを挿入するための技法 MOP(Metaobject Protocol) CLOS、Smalltalk、etc リフレクション(イントロスペクション)[3] クラスを巡回 静的コード変換[4,5] 静的なAOPシステムの手法と類似した手法 処理系に用意[6,7] インタプリタ(JIT)、デバッガ ジャストインタイム・フック  埋め込み(我々) オンデマンドにフックを埋め込む [3] D. Orleans and K. Lieberherr. DJ: Dynamic Adaptive Programming in Java In Reflection 2001 [4] J. Baker and W. Hsieh. “Runtime Aspect Weaving Through Metaprogramming” In AOSD’02 [5] A. Popovici, T. Gross, and G. Alonso. “Dynamic Weaving for Aspect Oriented Programming” In AOSD’02 [6] A. Popovici, G. Alonso, and T. Gross. “Just-In-Time Aspects” In AOSD’03 [7] Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 イントロスペクションによる手法 DJ(Demeter/Java)[3] Adaptive-Programming アドバイスを実行する場所を、戦略として与える 実行時にクラスを巡回し、アドバイスを実行 フックをかけられず、毎回巡回のため遅い int sumSalaries() { // Adaptiveメソッドを定義 String s = "from Company to Salary"; // traversal strategy Visitor v = new Visitor() { // adaptive visitor private int sum; public void before(Salary man) { sum += man.getSalary(); } public Object getReturnValue() { return new Integer(sum); } }; フックを挿入できないため、かなり制限が大きい Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 DAOPシステムの実装技法 実行時にフックを挿入するための技法 MOP(Metaobject Protocol) CLOS、Smalltalk、etc リフレクション(イントロスペクション)[3] クラスを巡回 静的コード変換[4,5] 静的なAOPシステムの手法と類似した手法 処理系に用意[6,7] インタプリタ(JIT)、デバッガ ジャストインタイム・フック  埋め込み(我々) オンデマンドにフックを埋め込む [3] D. Orleans and K. Lieberherr. DJ: Dynamic Adaptive Programming in Java In Reflection 2001 [4] J. Baker and W. Hsieh. “Runtime Aspect Weaving Through Metaprogramming” In AOSD’02 [5] A. Popovici, T. Gross, and G. Alonso. “Dynamic Weaving for Aspect Oriented Programming” In AOSD’02 [6] A. Popovici, G. Alonso, and T. Gross. “Just-In-Time Aspects” In AOSD’03 [7] Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 『DAOPシステムは多数存在するが、リフレクションを処理系がサポートする言語では、実行時に容易にフックを挿入できる』 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 静的コード変換による手法 コンパイル時リフレクションですべてのjoin-pointへ最小のフックを挿入 (JAC[3], Handiwrap[4]) 静的にはフックする場所を特定できない アドバイスを実行するかどうかをチェック need_advice(); need_advice(); need_advice(); 分岐、無駄なフック - 仕掛けが大 need_advice(); need_advice(); pointcut 指定はここだけ need_advice(); 『静的コード変換ですべてのjoin-pointにフックを挿入すると不必要なフックが多数埋め込まれてしまう』 need_advice(); 常にすべてのjoin-pointでチェック コードサイズの肥大化 need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 DAOPシステムの実装技法 実行時にフックを挿入するための技法 MOP(Metaobject Protocol) CLOS、Smalltalk、etc リフレクション(イントロスペクション)[3] クラスを巡回 静的コード変換[4,5] 静的なAOPシステムの手法と類似した手法 処理系に用意[6,7] インタプリタ(JIT)、デバッガ ジャストインタイム・フック  埋め込み(我々) オンデマンドにフックを埋め込む [3] D. Orleans and K. Lieberherr. DJ: Dynamic Adaptive Programming in Java In Reflection 2001 [4] J. Baker and W. Hsieh. “Runtime Aspect Weaving Through Metaprogramming” In AOSD’02 [5] A. Popovici, T. Gross, and G. Alonso. “Dynamic Weaving for Aspect Oriented Programming” In AOSD’02 [6] A. Popovici, G. Alonso, and T. Gross. “Just-In-Time Aspects” In AOSD’03 [7] Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 『DAOPシステムは多数存在するが、リフレクションを処理系がサポートする言語では、実行時に容易にフックを挿入できる』 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 JITコンパイラによるフック JITが生成したネィティブコード上のすべてのjoin-pointへ最小のフック挿入(PROSE[7]) Javaでのフックよりネィティブのフックは小さい Jalapeno(Javaで書かれたVM、すべてJITコンパイル)へ実装 再JITコンパイルしない 不必要なフックも挿入 need_advice(); need_advice(); need_advice(); need_advice(); 『静的コード変換ですべてのjoin-pointにフックを挿入すると不必要なフックが多数埋め込まれてしまう』 need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); need_advice(); Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 デバッガによるフック フックをbreakpointとして設定 (PROSE[6]) 標準機能 JPDA の利用 HotSpot使用でデバッグ実行(3~6%程度遅い) アドバイスの実行が遅い breakpointセット デバッガが アドバイス実行 デバッガ デバッガ do_advice(); Mar 12-14, 2003 SPA 2003, Hakone

デバッガによるフック挿入・実行 2. Dynamic AOPとその実装 Mar 12-14, 2003 SPA 2003, Hakone do_advice(); Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 DAOPシステムの実装技法 実行時にフックを挿入するための技法 MOP(Metaobject Protocol) CLOS、Smalltalk、etc リフレクション(イントロスペクション)[3] クラスを巡回 静的コード変換[4,5] 静的なAOPシステムの手法と類似した手法 処理系に用意[6,7] インタプリタ(JIT)、デバッガ ジャストインタイム・フック  埋め込み(我々) オンデマンドにフックを埋め込む [3] D. Orleans and K. Lieberherr. DJ: Dynamic Adaptive Programming in Java In Reflection 2001 [4] J. Baker and W. Hsieh. “Runtime Aspect Weaving Through Metaprogramming” In AOSD’02 [5] A. Popovici, T. Gross, and G. Alonso. “Dynamic Weaving for Aspect Oriented Programming” In AOSD’02 [6] A. Popovici, G. Alonso, and T. Gross. “Just-In-Time Aspects” In AOSD’03 [7] Andrei. P, Thomas. G and Gustavo. A. “Dynamic Weaving for Aspect-Oriented Programming” In AOSD’02 『DAOPシステムは多数存在するが、リフレクションを処理系がサポートする言語では、実行時に容易にフックを挿入できる』 Mar 12-14, 2003 SPA 2003, Hakone

情報処理学会プログラミング研究会 発表資料 2003年1月23日 情報処理学会プログラミング研究会 発表資料 2003年1月23日 2. Dynamic AOPとその実装 動的クラス書き換え(我々が開発1) フックをコード中に埋め込む 古いクラス定義を新しいもので置換 HotSwap機能を使用 (Sun JDK1.4 JPDA) デバッガの制御下でロード済みクラスを再ロード 置換処理は低速だが、アドバイスの実行は高速 JVM 『アスペクトとプログラムの合成を可能な限り遅延させる。フックの挿入は必要になるときまで遅延され、プログラムに埋め込まれる』 JPDA ロード済み クラス do_advice(); do_advice(); do_advice(); do_advice(); フック入り クラス do_advice(); do_advice(); do_advice(); do_advice(); クラス再定義 Mar 12-14, 2003 SPA 2003, Hakone

動的クラス書き換え(我々が開発1) 2. Dynamic AOPとその実装 Mar 12-14, 2003 SPA 2003, Hakone do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); Mar 12-14, 2003 SPA 2003, Hakone

ジャストインタイム・フック埋め込み(我々が開発2) 情報処理学会プログラミング研究会 発表資料 2003年1月23日 ジャストインタイム・フック埋め込み(我々が開発2) 2段階のフック挿入 デバッガによるフックと動的クラス書き換えをハイブリッド フック挿入に準備がいらない 高速にフックを挿入 デバッガによるフック アドバイス実行時間 1 switch バイトコード変換でフックを挿入し、クラスを再ロード 頻繁にデバッガへスイッチするなら、フックを埋め込んでしまう 『効率的なDAOPシステムを実現するために、ジャストインタイム・フック埋め込み技術を提案する』 2 動的クラス書き換え フック埋め込み時間 Mar 12-14, 2003 SPA 2003, Hakone

ジャストインタイム・フック埋め込み(我々が開発2) do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); do_advice(); Mar 12-14, 2003 SPA 2003, Hakone

アスペクト処理系 Wool 3. Wool ジャストインタイム・フック埋め込みをPure Javaで実装 実行途中のメソッドにもフック挿入 ActiveFrameで参照されるクラスへもフック挿入 フックを挿入するか否かも選択 Javaでアスペクトを記述 ポイントカットの動的な変更 アドバイスの動的な追加・変更・削除 性能劣化の60~70%がコード変換・再ロード処理 Mar 12-14, 2003 SPA 2003, Hakone

今後のDAOPの展望 4.おわりに ポストDLL 開発時にリンクポイントを用意しなくて良い オートノミックコンピューティング アプリケーションコードの見せ方 フックポイントの制限(セキュリティ) オートノミックコンピューティング あらゆる場所へ改変箇所が浸透 実行時にアスペクトの自動抽出・自動分離 フックの高速化・コードの高質化の両立(Wool) Mar 12-14, 2003 SPA 2003, Hakone