netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-11-25 古い日記からの変換データ [長年日記] ▲
_ SIGSE出張 ▲
ホテルウィングインターナショナル後楽園はかなり便利な位置にあることは判明.ただ,無線LANがあるのにDHCPが死んでるのかIPが取れない.仕方ないので b-Mobile を使う.
1Fの部屋は一部携帯の電波が届かないことがある,という但し書きの通り,携帯電話やPHSは窓際(ベッドの上)なら接続できるがテーブルからではアクセスできないみたい.微妙.
_ [論文]Traits の実際の適用 ▲
Emerson R. Murphy-Hill, Andrew P. Black:Traits: Experience with a Language Feature.Companions of OOPSLA 2004, pp.275-282.
本会議のほうではなくショートペーパーなんかが収録されている Companion のほうの論文.
メソッドの集合を扱う Traits を実際に使って,文字列の連結をツリー構造として扱う Rope というクラスをString と一緒に定義してみたという話.
String と Rope では,同じような特性を持っているので横断したような部分を Traits に取り出している.結果としては,Traits は理解しやすい概念でコードの再利用も容易だった(Traits の中のメソッドを使った数が多かった)が,Traits は black-box 的に使いたくなるので,String と Rope の構造にあわせた改造というのができず,非効率的な実装になってしまう可能性があったらしい.(Traits を使わない場合は,コピーしてから実装に合わせて書き換え,という形式になっている)
また,Traits の情報を見ることができるツールなどとセットでないと難しいだろう,とも述べている.
アスペクトによる実装についても少しだけ触れられていて,アスペクトの場合は Rope のツリー構造とツリーのバランス調整機能をきれいに分解はできたけれど,バランスを調整するアスペクトのほうは,Rope クラス決め打ちの実装になってしまって,再利用は Traits のほうが楽だろう,と述べていた.
_ [論文]Generics クラスの型パラメータの自動決定 ▲
Alan Donovan, Adam Kiezun, Matthew S. Tschantz, Michael D. Ernst:Converting Java Programs to Use Generic Libraries.Proceedings of OOPSLA 2004, pp.15-34.
Java Generics の登場にあわせたプログラム変換についての論文の1本.クラスを Generics クラスに書き換えたときに,それを使っているクラスに適切な型パラメータを付与できるよう自動で型推論を行うというもの.
アルゴリズム的には,各変数の Points-To セットを作って複数の取りうる型がある場合は共通の親を取って,というもの.ただし正解は1つ以上ありうる(一番緩くするか,一番厳しくするかなど)ので型キャストができるだけ減るのがいいのだろう,という立場で考えているらしい.
論文としてはそのアルゴリズムの解説.結果のお役立ち度はそれなりな感じがする.テンプレート化(総称型の導入)リファクタリングを行うときには,この種の技術を使うのが正しそう.
_ [論文]Vertical Profiling ▲
Matthias Hauswirth, Peter F. Sweeney:Vertical Profiling: Understanding the Behavior ofObject-Oriented Applications.Proceedings of OOPSLA 2004, pp.251-269.
オブジェクト指向プログラムではシステムの提供する機能を仮想化して取り扱う(スレッドやガベージコレクションなど).で,システムの複数のレイヤから集めたデータを一緒に調べれば,システムの性能についての理解が深まるだろうという話."Vertical" と付いているのは,システム階層を横断して情報を集めることから,らしい.
たとえばキャッシュのヒット率と1サイクルあたりの完了命令数とスレッドの切り替え数とか,パフォーマンス系のメトリクスを時系列に一緒に並べて相関を調べたりする環境を構築している.
ケーススタディでは,主に Virtual Machine レベルとハードウェアレベルのデータを見比べることに使っている.パフォーマンスチューニングなんかの使い道か.
_ [論文]実行時のフェイズの認識 ▲
Andy Georges, Dries Buytaert, Lieven Eeckhout, Koen De Bosschere:Method-Level Phase Behavior in Java Workloads.Proceedings of OOPSLA 2004, pp.270-287.
プログラムの実行履歴をある程度の大きさで(時間消費量を基準に)フェイズに区切って,それぞれのフェイズでのパフォーマンスメトリクスを調べて(たとえばキャッシュのヒット率とか),どのあたりにボトルネックがあるとかを調べる手法の提案.
Java では Runtime 環境も含まれるので,過去の C などを対象にした研究よりも難しい,らしい.
関連研究で,この手のフェイズ分割手法についていくつか触れられているのだが,固定時間間隔で区切る方法や,実行時間が一定の閾値に達するような手続きを基準に分解を行うものが多いよう.
実行履歴のフェイズへの分解については,目的は違うが,このあたりの関連研究は調べてみる必要がありそう.
_ [論文]単位計算用クラスの導入 ▲
出張前に,一部放置していた論文を消化.
Eric Allen, David Chase, Victor Luchangco, Jan-Willem Maessen, Guy L. Steele Jr.:Object-Oriented Units of Measurement.Proceedings of OOPSLA 2004, pp.384-403.
いわゆる単位系(時間・距離など)を数値計算に導入する仕組みとしてメタクラスと総称型を使うことを提案した論文.
次元パラメータ D を受け取る Unit メタクラスを使って,Mile や Meter は Unit[Length] に属するクラスとして,Second や Minutes は Unit[Time] に属するクラスとして定義する.
で,あとは単位の組み合わせを扱えるようにCanonical form(Length * Time * Length^-1 == Time など)を定義したり型変換関数を定義したり,各単位の次元値をパラメータ化してLength^n (int n) のような動的な型の表記を可能にしたり,といったことをしている.
このアプローチの場合,メタクラスが一つの次元を整理してくれるので,摂氏・華氏のような単位混在も可能だし,ログスケール系への拡張も容易である,らしい.言語の拡張が含まれるのでいきなり導入して使えるというものではないが.