netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-04-17 古い日記からの変換データ [長年日記] ▲
_ AOSD 2003 ▲
AOSD2003本会議の論文(の中で興味を引いたもの)はこれで最後.
Mark C. Chu-Carroll, James Wright, Annie T. T. Ying:``Visual Separation of Concerns through Multidimensional Program Storage''
発想は,Separation of Concerns を,「言語的に分けずに,見た目的に分ける」というもの.
必要なのは,クラスより細かい単位でのストレージへの保管,複数のソースフラグメントの集約,動的なフラグメントの選択,フラグメントを認識するエディタ,などなど.
この論文では,「ツールの見た目こんな感じ」というスクリーンショットがやっぱり Eclipse ベースで作られていて,すごく格好よさそうに見える :-)
個人的な好みで言うなら,アスペクトとオブジェクトを分離しておいて,オブジェクトを見るときはアスペクトのコードがあたかもそこにあるかのように(灰色などで)見せる,というのもアリかなーと思うのだが,Visual C# などのコード「折りたたみ」機能などと同様に実装されないものだろうか.
_ AOSD 2003 ▲
だんだん読むのにも疲れてきたのでざっと斜め読み.
Doug Janzen and Kris De Volder:``Navigating and Querying Code Without Getting Lost''
JQuery による検索ツールの実装.Query としてはpackage( ?P, type, ?T) のように"?"で始まる自由変数を満たすノードを見つけてくる Prolog のような言語で書く.パッケージ,型,メソッド,どのメソッドから参照されているか,といった情報が使える.
クエリー結果はツリー構造で表示されるが,その中からさらに検索するときは,ツリーを「接木」していくと検索プロセスが分かる,とか言っているあたりが面白いかも.
ちなみに,プロトタイプは Eclipse ベース.クエリーを直接書くのは面倒だから,何か適当なラッパーを間にかませばすごく便利になりそうな予感.
_ AOSD 2003 ▲
AOSD2003の論文はこれを読んだところであと二つ.もっとも,併設ワークショップの分がさらにあるのだが.
David B. Tucker, Shriam Krishnamurthi:``Pointcuts and Advice in Higher-Order Languages''
Scheme で pointcut 定義や advice の定義をしている論文.pointcutがlambda定義されてるあたりが格好いい.(lambda (jp) (and (eq? f (first jp)) (memq g (rest jp))))とかいう感じで順番に構築していってる様子が説明してある.
この様子を見ている限りでは,Scheme ではかなり頑張れるみたい.ただ,関数型特有の性質について触れてなくて,lambda をカリー化していったときはどうなるのか,とか色々気になるところは残ったまま.今後に期待したい.
_ AOSD2003 (下の続き) ▲
JAsCo のシステムでは,Beans を必要以上に操作しないので,動的にアスペクトの取り外しができる.逆に,アスペクトを回避して元の実装を呼ぶ,という処理は使えなかったりする(そのあたりはコネクタでうまく回避する必要がある).
ツールとして,Visualにコネクタをつないだり外したりする環境もあるらしく,それを使うと格好よくアスペクトの付け替え作業ができそう.何より,動機,モデル,言語要素が理解しやすいのがポイントかも.JAC よりも良くまとまっている気がする.
さりげなく,将来の課題のところに .NET のMSILにも対応してみたいなぁ,とか書いてあって,もし実装されたら一回は使ってみたいかも.
ちょっと気になるところは,コネクタを定義するのが,アスペクトが多くなると意外と大変なのではないか,というところと,アスペクトに対するアスペクトを書くときなんかに怪しげなことが起こったりしないのか言及がないところ.まあ,実際の開発言語として使われるようになったら,もっと利点や弱点が分かるかも.
_ AOSD2003 ▲
論文読みは続く.Davy Suv\acute{e}e, Wim Vanderperren, Viviane Jonckers:``JAsCo: an Aspect-Oriented approach tailored for Component Based Software Development'' コンポーネントベースの世界(とりあえずこの論文ではJava Beansが材料)では,コンポーネント,アスペクトの再利用性は非常に重要.しかし,今のアスペクト指向では,アスペクトの結合基準の記述がアスペクトの定義にくっついていて再利用性が低かったり,コンパイル時に結合するので動的な特性を持ったシステムでは利用できなかったりする. そこで,JAsCo 言語では,アスペクトとして次のように定義する.class AccessManager { hook AccessControl { AccessControl(method(..args)) { executes(method); } replace() { if (p_db.check(currentuser, object) { return method(args); } else { throw new AccessException(); } } } : // other methods and fields, shared by hooks }この hook に対して,コネクタを定義する.
connector PrintAccessControl { AccessManager.AccessControl control = new AccessManager.AccessControl(* Printer.*(*));}ここで,コネクタは結合対象を定義する.また,複数のアスペクトを結合したいときは,ConnectionStrategy というインタフェースを使って「1個目のアスペクトが動作しなければ二つ目も動作しない」といった処理を定義できる. 基本的には動的処理で,バイトコード変換を使って普通の Java Beans にアスペクト用のフックを埋め込み,そのフックに到達するとコネクタ・レジストリを探して,マッチしたらアスペクトを実行させる,といった形になる.