http://www-06.ibm.com/jp/developerworks/java/060621/j_j-cb05236.shtml
IBMのdeveloperWorks記事です。
ライトウェイト・ランゲージ(Ruby等)とコンパイラ・ランゲージ(Java等)を型定義モデルの観点で比較している記事です。著者のBruce Tate氏は、「軽快なJava―Better,Faster,Lighter Java」などの著者で、記事中では「Rubyに改宗した者」と自分を称していますが、記事は両者をよく分析しておりどちらの肩を持つものでもない内容となっています。
型定義に関する戦略
型定義は、少なくとも次の3本の軸に沿って考えることが出来ます。
- 静的型定義と動的型定義という区別・・・(略)
- 強い型定義と弱い型定義という区別・・・(略)
- 明示的型定義(『マニフェスト型定義』とも言われます)と推論(inferred)型定義という区別・・・(略)
Javaの型定義モデルは、静的型定義・強い型定義・明示的型定義となります。Rubyは、動的型定義・強い型定義・推論型定義となります。
静的型定義の強みとして、早期のエラー検出、リファクタリング等のツールのサポート容易性、セキュリティ、コード可読性、コンパイラによるパフォーマンス改善などを挙げています。
動的型定義の強みとして、少ないキーワードで多くの概念を表現できる、メタプログラミング構成体(?)を生成・利用できる、既存のクラスにメソッドやデータを後付けできる(Ruby)、コンパイル作業が不要、などを挙げています。
また、静的型定義言語のOCamlでは推論型定義でタイプ量を減らせる例を挙げています。
最後にJavaでの動的型定義の特性を利用する例としてXMLや文字列でランタイム・バインディングや疎結合を、AspectJ等で後付けの変更を(苦労して)実現している例を紹介して終わっています。