netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-01-06 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
Coordination aspect というのがあるらしい,と言われて渡された資料を読んでみる. Demter/J の人たちがやっている仕事で,COOL: COOrdination Langugage というJava のスレッド同期処理を記述する言語を作ったらしい. たとえば以下のようなコードになる.
coordinator BoundedBuffer /* クラス名と同じ */ { // selfex は,それぞれ,あるスレッドが独占する // 異なるスレッドが実行することはありうる selfex {put, take} // mutex は,あるスレッドがアクセスしている間, // その組にあるメソッドの呼び出しはブロックされる. mutex {put, take}; // put メソッドの終了時に実行される処理を記述 // (@ @) の中に,Java コードが入る put requires (@ !full @) { on exit (@ empty = false; if (usedSlots == array.length) full = true; @) }
こういう記述を与えると,weaver はクラスに synchronized や
while (条件) { try { wait(); } catch (InterruptedException e) {} }
といった記述を追加したコードを生成する. Coordination aspect で検索するとヒットしてくる ppt にけっこう丁寧なサンプルコードが載ってたので,これ以上は省略.
_ 論文 ▲
久しぶりに論文読み.アスペクト干渉の検出と解決問題.
F. Douence, P. Fradet, M. Sudholt:``A framework for the detection and resolution of aspect interactions'', Proceedings of the 27th ACM SIGPLAN/SIGSOFT Conferenceon Generative Programming and Component Engineering (GPCE), October (2002).
形式的検証してるのでいまいちよく分からない.やっぱりここまでするのね,というところ.この辺の検証する人たち,実際にどういうものが検証できるのかを目に見える具体例で用意してくれないので論文がすごく読みにくい気がする.検証系の実用性に関しても何も説明がないのが悲しいところ.一般のコンパイラなどにその成果が反映されるにはまだまだ時間がかかるのだろうか.
_ 電子署名 ▲
電子署名の付けかたについて調べてたら,AL-Mail 用では PGP と連携する簡易メールエディタがあるらしい.http://hp.vector.co.jp/authors/VA007478/almail/kmwrite/kmwrite.html
_ Java ▲
先に書いたコードのように,Exception.getCause や .printStackTrace をいじった Exception オブジェクトをネットワーク上で動作するアプリケーションで投げると色々と攻撃ができそうな気がするのだが…….やっぱりその辺は SecurityManager でカバーするんだろうか.
_ Java ▲
思いつきで例外を悪用したコードを書いてみた. EvaluableAsInt は int getInt() を実装していること.getInt() は成功したか失敗したかを throw する.
void evalSquareRoot(EvaluableAsInt o) { try { o.getInt(); assert(false, "this statement never executed"); } catch (IntResult e) { if (e.getValue() > 0) { throw new FloatResult(sqrt(e.getValue())); } else { throw new IllegalArgumentException(e); } } catch (FunctionFailure failure) { throw failure; } }
使う側はこんな感じ.getMessage をオーバーライドしてる時点でけっこう邪悪.
public static void main() { hoge = new Hoge(100); try { evalSquareRoot(hoge); } catch (FloatResult f) { throw new Exception () { public String getMessage() { return f.getValue().toString(); } } } catch (FunctionFailure f) { throw new RuntimeException(f); } throw new Error(); // ここには来ないはずだが }
chained exception や setStackTrace を使えばさらに怪しいコードが書けそうな予感.