netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-08-02 古い日記からの変換データ [長年日記] ▲
2002-08-03 古い日記からの変換データ [長年日記] ▲
_ OCAML ▲
O'CAML という ML の拡張言語のオブジェクト指向版が話題になってたので見てみる.ML 大好きな人間にとってはいい言語かも.今度使ってみることにする.http://www.ocaml.org/
2002-08-05 古い日記からの変換データ [長年日記] ▲
_ 読書 ▲
クリプトノミコン 2 を読み終えた.解説は東大の今井先生が,以前「情報処理」(情報処理学会誌)か何かに書いてたのと似たような話を書いてた.普通は文章や作者に関する解説があるところで,暗号技術についての解説があるというところがこの本がやや専門的領域に踏み込んでるのを感じさせる.
_ 論文 ▲
論文チェック.M. Mock, M.Berryman, C.Chambers, and S.J.Eggers.Calpa: A Tool for Automating Selective Dynamic Compilation実行中に最適化していくコンパイラに関する論文.
C プログラムに観測用プログラムを instrument して,sample input を与えて実行した結果から最適化を行うための情報を得るとか,Dynamic Slice などと一種似たような解析をしている.instrument のやり方についての詳細説明はないけど,Aspect Weaver などが実現してるのと同等の処理を実現していそう.
_ AspectJ ▲
AspectJ の dominates ディレクティブについて誤解していたことが発覚.
aspect A dominates B のとき,A は B より優先である…から A が優先して貼りつく,B before → A before → join point → A After → B After の順序で動作すると思ってたのだけど,正しくは 「A が B を支配する」つまりA before → B before → join point → B After → A After の順序で動作して,A が途中でいきなり throw とかしてB の実行を回避することができるらしい.ちなみに,"dominates *" 「他すべてを支配」するようなアスペクトが複数あった場合の動作は未定義っぽい.(現実には dominates * を記述する必然性はほとんどないが)
_ 論文 ▲
Constantions A. Constantinides, Atef Bader and Tzilla Elrad.An Aspect-Oriented Design Framework for Concurrent Systems.ECOOP '99 Workshop on Aspect-Oriented Programmingをチェック.Moderator というのを使って weaver の代わりにアスペクトの結合をコントロールするっぽい.Moderator のほうが Weaver にくらべてaspect の階層とかを考慮できるから有利,とか言ってる.アスペクトを直接貼り付けるのでなくて仲介役を導入してる点で AJC と似ていて,仲介役にアスペクトの優先度コントロールとかをしてもらえば,特に直交していないアスペクト間の調整ができれば,とても楽だろうなぁ,という印象.AspectJ の現在の実装では利用できないけど,将来的にはこういう問題の解決は必要になってくると予想される.
_ 論文 ▲
論文チェックその3.
On the Requirements for Concurrent Software Architecturesto Support Advanced Separation of ConcernsConstantions A. Constantinides and Tzilla Elradアスペクト指向が持つ色々な問題を列挙しただけ…のようにも見える.[Constantinides et al. 99] で,アスペクトの分類をしているらしいとの言及を発見した.Constantions A. Constantinides, Atef Bader and Tzilla Elrad.An Aspect-Oriented Design Framework for Concurrent Systems.ECOOP '99 Workshop on Aspect-Oriented Programmingということなので,後日チェックしよう.
_ 論文 ▲
論文チェックその2.
Compaction of Large Class Hierarchies in Databases for Chemical EngineeringM. Baumeister and M. Jarkeクラスの複数のインスタンス生成やサブクラスの分類などにアスペクトを導入,またクラスのアスペクト間の関係をモデル化しよう,という話.オブジェクトをクラス階層だけで分類するのは苦しいのでアスペクトというクラスとは別の階層を導入しているだけかも.AOP と直接の関連があるわけではなく,ちょっと期待外れだった.
JAC: A Flexible Solution for Aspect-Oriented Programing in JavaRenaud Pawlak, Lionel Seinturier, Laurence Duchien, and Gerard Florin一貫性や順序性などの inter-aspect problem についてまとめている.JAC 自体はその解決策として,アスペクトを wrapper で実現してWrapperController が起動順序などを設定するという形式っぽいのでAspectJ で実装する場合には利用できそうもない.また,ソースコードへのリフレクションも JAC では使えなさそう.ただ,AspectJ と違って,利用者側が weaver を定義できるっぽく,用途によっては便利となるかもしれない.
_ 論文 ▲
論文チェックその1.
An Approach To Using Formal Methods In Aspect OrientationX. Xie, S. M. ShatzState-Based Object Petri Nets とかいうColored Petri Net のオブジェクト表現用を使って,Aspect を Petri Net で表現して,それを結合することでAspect の合成を行うとかいう話.面白いんだけど,現状では利用する必要はなさそう.
The Watson Subject Compiler & AspectJ(A Critique of Practical Objects)Mark SkipperSOPとAOPを比較した論文.SOPとAOPの類似性について述べている.AOP は,aspect と base program のインタラクションで,n個アスペクトがあればn回インタラクションが発生するだけで,理想的には inter-aspect problem は発生しないはずだが,実際にはそうもいかない.かといって,SOPのようにすべてのモジュールが対等だと,手動で合成ルールを記述しないといけないが,これも難しい作業である…とかいう話.結局 inter-aspect problem を解決するような言語要素が現在の AspectJ には含まれてないので,もっと他に方法を考える必要がある,ということでやっぱり誤魔化されてる気分.
Mutli-Perspective Specification, Design and Implementation of Software Components Using AspectsJohn Grundyコンポーネントにアスペクト情報を持たせて選択的な再利用を実現する.コンポーネントごとに,アスペクトを aspect Collaboration provides hoge require foo end aspectのように定義する,この記述を統合開発環境などのツールから利用する…とかいう話だと思う.興味はあるけど,アスペクトの再利用についてはまだ色々問題がありそうな気がする.
2002-08-07 古い日記からの変換データ [長年日記] ▲
2002-08-08 古い日記からの変換データ [長年日記] ▲
_ ダイクストラ ▲
ダイクストラが 8月6日,死去.謹んで冥福を祈りたい.
情報科学を専攻してる人間にとっては偉大な先駆者のひとりだけど,asahi.com の "おくやみ" 記事とかには載ってない.シャノンは載ってたような気がするんだが….
_ Intentional Programming ▲
Intentional Programming - Innovation in the Legacy AgeCharles Simonyi
Intentional Programming は,プログラマの意図 (Intention) を再利用することが目標?Intention に,そのソースコードへのマップのやり方だけでなく,エディタでの表示をどうするかとか,色々な情報を付加している.
うまく使えば,抽象的なボキャブラリを言語に導入できる.たとえば forall x in A, do {} を Iterator 表現に置換するとか….でも,Intention 自体を抽象的に書けるかどうかとか,色々問題もありそう.個人的には,IDEの支援がないとまったく利用不能なツールは,しかもツールの実装そのものが高コストなものは,好みではない.
どうでもいいけど,IP (Internet Protocol) という既存の言葉とかぶる略称はやめてほしいなぁ.
_ 論文 ▲
Support for Subtyping and Code Re-use in TimorJ. Lesile Keedy, Gisela Menger, Christian Heinleinをチェック.Subtyping (is-a) と,実装の再利用としての継承というのは別物だから,区別して使えないといけない,という主張.この筆者が作った(?) Timor という言語では,impl ArrayDEQueue of DoubleEndedQueue reuses ArrayQueueといったようにインタフェースは DoubleendedQueueだけど実装だけは継承しているみたいなことが書けるらしい.(ここで Queue と DoubleEndedQueue は特に関係のない type, type とは Java でいう interface みたいなもの)これは,Java の "implements" などにくらべて記述の自由度が高いので,面白いかもしれない.
_ JREVEAL, Java Decompiler ▲
TOOLS (Technology of Object-Oriented Languages and Systems)2002 の論文でREVEAL というのが紹介されてたので検索してみるとhttp://www.jreveal.org/index.htmlという Java の逆コンパイラを発見した.逆コンパイラが役立つかどうかはともかくとして(設計書の残ってないバイナリコードのメンテナンスには役立つか?)興味深いシステムである.
_ 論文 ▲
http://www.fuka.info.waseda.ac.jp/~washi/diary/200202.html
>[TOOLS Pacific 2002] 初日>http://www.cse.unsw.edu.au/tools/>>"Specifying and Implementing the Operational Use of Constraints in Object-Oriented Applications">Verheecke, B. and Straeten, R.V.D. (2002). >>Constraints を元のクラスとは別の Constraints Class を>自動生成して、その内容を CASE Tool から生成した元の>クラスに ”埋め込んで”検証する試み。
気になるアプローチだったのでチェックしてみた.
OCL と呼ばれる制約記述言語を UML に加えて,クラス図からコードを生成するときに検証用のコードと,それを破った場合の例外 throw 文が加えられる.ツールによるサポートが前提だけど,面白い試みだと思う.ただ,throw されうる例外は必ず正しく catch しないと意味がないので,コードを書く人が不慮の例外発生,および不慮の例外 catch に気をつけないといけない.たとえば,リソースの解放は確実に finally をかましとかないとまずい,とかいうことになるわけで,その辺は不安がある.
_ 論文 ▲
Constantions A. Constantinides, Atef Bader and Tzilla Elrad.An Aspect-Oriented Design Framework for Concurrent Systems.ECOOP '99 Workshop on Aspect-Oriented Programmingを読み直し.アスペクトの階層化という言葉で引っかかってたけど,(C + A) で合成した結果に対してさらに別のクラス C' とアスペクト A' をくっつける,といったような階層化らしい.これは,システム全体を横断するようなアスペクトが他のアスペクトから影響を受けたくない場合などに有用.AspectJ では現状ただの足し算になるので,「このアスペクトには他のアスペクトはくっつくな」と宣言できないんだけど,それが実現可能になる.(この「他のアスペクトはくっつくな」表明は, 逆にくっつかないと困る場合もあるので一概にはいえない問題. たとえば,ファイルへの出力をすべてネットワークへマップするとか いうアスペクトがあった場合,それはログ吐きアスペクトにも くっつかないとダメ)
2002-08-10 古い日記からの変換データ [長年日記] ▲
2002-08-13 古い日記からの変換データ [長年日記] ▲
2002-08-17 古い日記からの変換データ [長年日記] ▲
2002-08-20 古い日記からの変換データ [長年日記] ▲
2002-08-23 古い日記からの変換データ [長年日記] ▲
_ 玄人指向? ▲
「玄人志向」の箱に Expert-Oriented って書いてあったが,Oriented は指向じゃないのだろうか….
とかいうので四方山話をしてたときに思い浮かんだ小ネタ.
玄人志向プログラミング Expert-Oriented Programming
以下の三つに価値を置く.・目指せ最速(速ければ速いほどよい)・限界まで短く(短ければ短いほどよい)・ソースがドキュメントだ(コメントなんていらないよ)コーディングのお供はテスト自動化ツールとプロファイラ.単体テストが通過した瞬間からチューニング開始で,仕様変更があったらまた次の機会のためにコードを取っておこう.
2002-08-25 古い日記からの変換データ [長年日記] ▲
2002-08-26 古い日記からの変換データ [長年日記] ▲
_ Robocode Japan Cup ▲
IBM Official な Robocode の日本大会,Robocode Japan Cup が開催.締め切りは11月25日….参加してる余裕はあるだろうか?後輩をがんばって焚き付けたいところ.
_ AspectJ ▲
AspectJ の Tips に,「Decorator としてのアスペクト」を追加.アスペクトは入出力双方を包む Decorator として機能できることに最近気付いたけど,まだうまく使えていない.
2002-08-28 古い日記からの変換データ [長年日記] ▲
_ AspectJ ▲
AspectJ の話のところに,「ワームホール」のことを追加.「ワームホール」という名前自体は AspectJ Users メーリングリストで「こう呼んだらいいかもね」みたいな話があったのでそこから拝借.もっとも,まだアスペクトのイディオムというのがそれほど整理されてないので,将来的には名前が変わるかもしれない.
ワームホールは,個人的には嫌い.AspectJ IDE for Emacs みたいなツールの助けがないとコードが追えないから.そもそもアスペクトの存在を仮定してクラスのコードを書くということ自体おかしいと思うんだけどなぁ.アスペクトなしでもクラスは動くべきで,コンポーネントの接続には別のメカニズムを使うべきだと思う.