netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-04-24 古い日記からの変換データ ▲
2004-04-24 古い日記からの変換データ ▲
_ 論文 ▲
プログラム依存グラフの計算簡略化のための方法を探して論文読み.
Mark Harman, Rob Hierons, Sebastian Danicic, Mike Laurence, John Howroyd and Chris Fox: Node Coarsening Calculi for Program Slicing.
8th IEEE Working Conference on Reverse Engineering (WCRE 2001). 2-5 October 2001, Stuttgart, Germany, 2001. Pages 25-34.
制御フローグラフに対して,隣接したノードを集約していくことでノード数を減らしていこうというもの.そのときに,一貫性を維持した中で一番良い結果を出すような方法を考えましょう,というもの.集約時に少しだけ不正確な結果が加わるが,それでも集約を重視するという姿勢.
R-Coarsening という手法をケーススタディ形式で紹介している.
Rb = ( I, D, d, R ) I = ノードのラベル集合 D = そのノードが実行されたときに必ず定義される変数 d = そのノードで定義されることがある変数(Dの要素もすべて含む) R = 参照される変数
という四項組を定義して,
Assignment: v := f(R) --> Rb({f}, {v}, {v}, R) b1 = Rb(I1, D1, d1, R1), b2 = Rb(I2, D2, d2, R2)とすると
Sequence: b1;b2 --> Rb(I1∪I2, D1∪D2, d1∪d2, R1∪(R2-D1)) Conditional: if p(R) then b1 else b2 --> Rb({p}∪I1∪I2, D1∩D2, d1∪d2, R∪R1∪R2) 注: D = D1∩D2 なのは,if なので分岐の両方でも更新されるものだけということ. Loop: while p(R') do b --> Rb( {p}∪I,φ,d, R∪R')
というようにルールを定義する.論文ではこれが一貫性があって,しかもできうる限りでは最適であるという証明も付属している.ただ,Minimalではない(スライス結果に関係ない文が含まれることがある).
関連研究としてCFGのグラフ上での変換作業が載っていて,グラフ操作では不必要に不正確になる可能性があることに言及している.
ちなみに,この粗粒度化の方法自体の適用についてどのくらい時間がかかるかは不明.どのくらい粗粒度化するのかとかに依存か.制御フローグラフ構築時にいきなりこれを意識しながら作業すれば,そんなにコストはかからないかもしれない?
そのうち引用することになりそう.
2006-04-24 ▲
_ [論文] cflow 内部での context exposure の束縛の提案 ▲
SPLAT 2006 の論文のメモの残り.
Remi Douence: Relational Aspects for Context Passing Beyond Stack Inspection. Proceedings of SPLAT 2006.
cflow の中で,target や this などの値を保存しておけるようにしようという提案.「p.doSomething() を実行している間に呼ばれた q.getData() 」に対してアドバイスを動かして,p や q への参照を獲得できるようにする.
有用性については,たぶん便利だろうな,と感じるのだけど,オーバーヘッドが大変なことになりそう.cflowのマッチしかたにもよるだろうけど,「p → q → x」のような呼び出しで (p, x) のペアと (q, x) のペアの両方がポイントカットにマッチしたらどうするんだ,とか気になる.
_ [論文] アスペクト間の相互作用の自動合成 ▲
Anis Charfi, Michel Riveill, Mireille Blay-Fornarino, Anne-Marie Pinna-Dery: Transparent Dynamic Aspect Composition. Proceedings of SPLAT 2006.
アスペクトの定義である「Pointcut → Advice」が複数与えられたとき,
それらが一緒に動くときの動作順序を自動合成するという手法の提案
(説明を聞くまで自動合成だと気づかなかった).
1つのポイントカットに複数のアドバイスが同時に動くとき,
「pointcut → advice 」ルールをすべて満たすような動作順序を出力するらしい.
考えていた出力と違ってたら declare precedence とか変更すればいいのか,と
質問してみたが,
ポイントカット定義が正しければちゃんと適切な出力が出るはずだ,というような
微妙な答えが返ってきただけだった.あまり考えてなかったのかもしれない.
_ [論文] MATLAB で AOP ▲
Joao M.P. Cardoso, Joao M. Fernandes, Miguel P. Monteiro: Adding Aspect-Oriented Features to MATLAB. Proceedings of SPLAT 2006.
SPLAT の中ではちょっと変り種.MATLABで,数値計算をするときの変数の型をデフォルトの数値型ではなく,別途記述するアスペクトによって固定小数点とかに変更できるようにしたという話(それ以外も計算途中のモニタリングとかも分離しているが).
この「型を外部から変える」という発想が珍しくて,それでプログラムを壊してしまうのではないか,というような否定的な意見もあったけれど,この手法の場合は数値型のインタフェース(使える演算の種類)は変わらず内部的な表現が変わっているだけだからいいのではないか,という意見もあった.