netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-11-11 [長年日記] ▲
_ [Java][ツール] プリミティブ型を格納するコレクションライブラリ ▲
各種調べてみたので少し整理.Javaでは,autoboxing はパフォーマンス上のオーバーヘッドが大きいので,たくさん要素を処理する場合はこれらのコレクションが有効(なはず).
- GNU Trove for Java: http://trove4j.sourceforge.net/
- Primitive Collections for Java: http://pcj.sourceforge.net/
- The Colt Distribution: Open Source Libraries for High Performance Scientific and Technical Computing in Java: http://hoschek.home.cern.ch/hoschek/colt/index.htm
- Type-Specific Collections Library: http://www.sosnoski.com/opensrc/tclib/
int や boolean など,各プリミティブに対する List, Set, Map, Iterator を提供するパッケージ.
コレクションの各要素に対して手続きを呼び出す foreach が利用可能.また,任意の型から int への Map については,int→int変換をかけて別の Map に変換する transformValues というメソッドもある.
Java Collections API との互換性を保つための Decorator も提供(ただし効率は悪い).ライセンスはLGPL.
Troveと同様,各プリミティブに対するList,Set,Map,Iteratorを提供するが,それに加えてSortedSet,範囲型(Range)なども提供.
ハッシュの実装を Chained (ハッシュ結果が Linked Listになっているもの)と Open (ハッシュ結果のエントリが埋まっていたら他にさらに移動するもの)から選択する必要があり,選べて嬉しいともいえるし,いちいち選択するのは面倒ともいえる.
Java Collections API との互換性を保つための Adapter も提供.ライセンスはLGPL.
Trove4Jと比べた場合,こちらだけが提供するSortedSetなどを使いたいか,それとも Trove4J だけが持つ foreach などが使いたいか,によってどちらを選ぶかが決まりそう.
主に int と double に関する配列・行列処理用クラス群.事前条件をチェックしない setQuick などの高速処理用メソッドを持つ.
その他,複素数,行列演算,様々な分布の乱数生成などのパッケージもくっついている.
ライセンスはパッケージごとに異なっており,ほとんどは非商用なら利用可能.一部 Mutex などを提供するパッケージのみ GPL になっている様子.
array, queue, stack, set, map をサポート.array は,主に配列との相互変換を重視している.
short や long などはサポートしていないコレクションもあり,また全体的にメソッド数も少ない(add と get での利用が基本のよう).
機能が少ないぶんシンプル(目的のものを探すのが容易)なパッケージだと思われる.ライセンスは独自で,基本的には自由にしてくれというもの.
2005-11-10 [長年日記] ▲
_ [work]コールグラフのサイズ ▲
開発用の小道具として使えるかな?と思って,クラスを指定したら,そのクラスから参照しているクラスも全部見つけてきてコールグラフを作ってくれるようなプログラムを作ってみた.
Main クラスを指定してみると,47クラスのプログラムに対して,約25000頂点のコールグラフが生成されてしまった.java. とか javax. とかがやたら多く,全部除去しても500頂点くらいで,Graphviz レイアウトでは既に人間が取り扱えないサイズ.Eclipse の呼び出し階層ビュー(素直なツリー形式)がいかに無難かよく分かる.呼び出し元へたどっていくか,呼び出す先へたどっていくか,同時にはどちらかしか使えないが…….
2005-11-09 [長年日記] ▲
_ [論文] 副作用のないメソッドの自動検出 ▲
Alexandru Salcianu and Martin Rinard: Purity and Side Effect Analysis for Java Programs.
Proceedings of the 6th International Conference on Verification, Model Checking and Abstract Interpretation. Paris, France January 2005.
外部に副作用を残さないメソッドを JML などでは pure メソッドと呼んで,アサーションの定義に使えるようにしているが,@pure の指定は手作業になる.それを自動的に検出する方法を提案している.既存の研究と異なる点は,メソッド内で新しいオブジェクトを確保したとき(一時使用のイテレータなど),そのオブジェクトに対するデータの書き込みは許容するところ.
各メソッドごとにどの変数がどのオブジェクトを指すかを示す Points-To グラフを構築しておき,メソッド呼び出し関係をたどるときに呼び出し側の Points-To グラフのノードと,呼び出し先のグラフとで,対応する引数やthis参照を接続することで,呼び出し先まで含んだ解析グラフにしていくらしい.末端にnativeメソッドが入ってしまうと解析できないので,いくつかには手であらかじめ定義したグラフを与えている.
2005-11-08 [長年日記] ▲
_ 研究室の来客 ▲
Bashar Nuseibeh, Jeff Kramer, Anthony Finksletein という3人が来訪.Requirement と Architecture の間の関連性とか,XMLの中のデータ一貫性制約を記述するxlinkitとか,たぶんどこかで聞いたことがある(図に見覚えのある)話を聞いた.
コードクローンの検出に使うCCFinderの "識別子をシンボル化した" トークン列が,コード自体ではないので公開しても差し支えなく,しかもライセンス上同一であっては困るコードと比較できる signature として使えるだろう,という指摘があった.トークン列の使い道としては面白いところかもしれない.
2005-11-06 [長年日記] ▲
_ [Delphi] pas2dox ▲
Delphiでドキュメント生成系のツールがないのかと思ってたら,実はpas2dox という Delphi から Doxygen 用入力を生成するためのツールがあるらしい.そのうち試してみることにする.