netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-10-26 古い日記からの変換データ ▲
_ バックアップ ▲
Libretto (ネットワーク名 'asteria')のバックアップを取る.ここ最近バックアップを取っていないなーと思ってたら,バックアップ先のディレクトリの日付を見るとなんと2ヶ月ぶり.
Home 以下と cygwin,メールなど,ほぼ丸ごとバックアップを取った.しかしこのマシンの設定,一回壊れたら復活させることできるのかな?ちょっと不安だ.
2003-10-26 古い日記からの変換データ ▲
_ 論文 ▲
Curtis Clifton and Gary T. Leavens:Obliviousness, Modular Reasoning, andthe Behavioral Subtyping Analogy
これも出典はSPLAT2003.アスペクトが勝手にクラスを置き換えてBehavioral Subtyping を破壊することがあり,しかもクラスはこれに気づくことがない.(これはAspectJ の obliviousness であるという特徴)
しかし,実際には,それではプログラマは「1モジュールずつ理解する」ということができないので,このような Behavioral Subtyping を破壊するようなアスペクトについては "Assistants" と呼んで別扱いし,(破壊しないものは "Spectators" と呼ぶ)Assistants については明示的に取り扱いません?という論文.これ,出典は忘れたが前に同じ著者がどこかで出していた論文(or テクニカルレポート)と内容的には同じ.今後は Assistants を接続するような言語を作ったりしようか,とか言っている.
参考文献としてFilman and Friedman, Aspect-oriented programming is quantification and obliviousness (OOPSLA2000) を挙げている.http://ic.arc.nasa.gov/~filman/text/oif/aop-is.pdf
_ 論文 ▲
SPLAT2003 Workshop の論文を読む.Therapon Skotiniotis, Karl Lieberherr, David H. Lorenz:Aspect Instances and their Interactions
6ページ弱のショートペーパー.アスペクトを記述するときに,「あるクラスのインスタンスのみ」を指定しようとすると!call((Circle+ && !Circle).*) && call(Circle.*) といった記述になる.また,if(thisJoinPoint.getTarget().getName() == ...)といった式や aspectOf をうまく使おう,というテクニック紹介みたいな論文.
アスペクトのインスタンスを生成したり特定のオブジェクトに install したりするAspectS の設計は良さげだと思える,らしい.Dynamic Aspect なほうが柔軟なアスペクトの管理ができていいなぁ,ということなのかな?
2004-10-26 古い日記からの変換データ ▲
_ [work]例外ハンドラのデータ依存解析 ▲
OOPSLA 開催でまた論文リストが増えるぞっと思いながらコード書きが続く.
例外ハンドラ(catch ブロック,finally ブロック)へはどこから例外で移動してくるか分からないので,実はデータフローが決定できない.Checked Exception や Null Pointer Exception 系などは絞れないことはないのだが,あまり効果として嬉しくないので,とりあえず例外ハンドラの先頭(Handler Entry 仮頂点)ですべてのローカル変数を初期化したとみなしてデータ依存関係を整理することにした.
_ [Java]enum ▲
enum 型が使いたくなったので Eclipse 3.1M2 で使えたのかなと思って試してみたら,まだ対応してなかった.Eclipse 3.1M2 のリリースノート
構文的には通るが型としては認識できないみたい.
2006-10-26 ▲
_ [論文] プログラム実行履歴からオブジェクトのステート図を抽出する ▲
Valentin Dallmeier, Christian Lindig, Andrzej Wasylkowski, Andreas Zeller: Mining Object Behavior with ADABU.
Proceedings of WODA 2006, pp.17-23.
状態遷移はメソッド呼び出しによって引き起こされるのだから,メソッド呼び出しによってラベル付けされる状態遷移図を実行履歴から抽出してしまおう,という論文.
状態遷移のラベルは状態変更を起こすメソッド群(mutator)とする一方で,状態のほうは状態監視用のメソッド群(inspector)の戻り値によって定義している.inspector メソッドの条件は,引数なし,戻り値が void で,副作用を持たないこと.
プログラムの監視方式はかなり単純.mutetaor メソッドの中身をすべてtry-finallyでくくって,finallyの中でinspectorをすべて呼び出し状態を記録している.
inspector によって int 型などを返されると状態数が大変なことになるので,整数値の範囲などを抽出して(dynamic invariant detection などの手法),abstract state として状態数を減らして,それらを mutator メソッドで接続することでモデルを作成する.
動的抽出なので,モデル上に,何回その遷移が起きたかを表示することで,一般的なパスとそうでないパスを明示したりできる.
関連研究としてはインタフェース抽出,dynamic invariant detection 他.けっこう挙げられているので,文献読みの基点としてもよさそう.
監視用のメソッドがある程度用意されていないと動かないかなとも思ったけれど,AspectJのインタータイプ宣言とかを使って監視用インタフェースを勝手に追加して,データ記録もアスペクトとして実装すれば,けっこう簡単に既存システムに組み込んで使えそう.状態の抽象化部分を何とか実装できればという条件付きだけど.