かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

OpenJDKに言語機能を追加するプロジェクト

http://www.infoq.com/jp/news/2007/12/kijaro

なかなか面白い話です。JDKに言語の機能をオープンな場で追加しましょうというプロジェクトなんですが、既に何点かのドラフトが出ています。(実際に取り込まれる可能性については微妙です)

http://kijaro.dev.java.net/

こちらで議論されているのですが、

  • プロパティ構文
  • staticメソッドの抽象化
  • enumの抽象化
  • メソッド、フィールドオブジェクトの参照構文

です。プロパティ構文というのは、.NETの世界にあるアレです。

staticメソッドの抽象化は、今まで俗に言うインスタンスメソッドではなくクラスメソッドとしてインプリメンツできるようにしようという機能です。今まではstaticメソッドの抽象化ができなかったので、汎用的なファクトリクラスあたりを作りのが難しかったのですが、これがあるとファクトリクラスの設計が変わるのではないでしょうか。

enumの抽象化についてはあまりよく知りません。最後のメソッド、フィールドオブジェクトの参照構文については、Javaの世界では手続きが面倒ながらもリフレクションという機能でメソッドオブジェクトを取得できていましたが、もっと簡単なJavadoc等で使われる構文を取り込んで、よくある関数ポインタのような使い方ができるようにしようというものです。クロージャとの相性が非常によさそうです。

こういう議論の場があって、みんなで言語仕様について語れるのはいいですね。

投稿日時 : 2007年12月20日 2:21

Feedback

# re: OpenJDKに言語機能を追加するプロジェクト 2007/12/20 11:14 凪瀬

関数ポインタってJavaではわざと外してあるのでは?
Javaで関数ポインタみたいなことをやりたい場合はinterfaceを使え!ってことでしょう?
もっとも、ちょっとしたやり取りにいちいちメソッドがひとつしかないinterfaceを
定義するのが面倒ってのはあるかもしれないけど、
敢えて似て非なる手法を使えるようにする理由としては弱いかな…

# Javaで関数ポインタのようなことがしたい場合どうするか 2007/12/20 11:54 凪瀬 Blog

Javaで関数ポインタのようなことがしたい場合どうするか

# re: OpenJDKに言語機能を追加するプロジェクト 2007/12/20 12:22 かつのり

ドキュメントを見る限りDuckTypeみたいなことをしたいのかな・・・。
リフレクションのシンタックスシュガーレベルで十分使えそうな気がするんですけど。

# re: OpenJDKに言語機能を追加するプロジェクト 2007/12/20 12:32 凪瀬

リフレクションのシンタックスシュガーってのはなんか怖くないですか?
DuckTypeも個人的にはメリットが見えない…。

# re: OpenJDKに言語機能を追加するプロジェクト 2007/12/21 15:40 NyaRuRu

>メソッド、フィールドオブジェクトの参照構文
Groovy の .& 演算子なんかがそれに近い感じですかね?
http://d.hatena.ne.jp/uehaj/20070806

ちなみに C# にも似たような需要はあります.
C# には,typeof(T) は存在しますが,methodof(T.X) みたいなものはありません.メソッドトークンは本来コンパイル時に確定するものなのですが,methodof が無いために毎回メソッド名を文字列でリフレクション API に渡す羽目になります.この方法は,リファクタリングツールなどによってメソッド名が変わったときに変化が追従しませんし,コンパイル時のチェックも働きません.

幸い C# 3.0 では LINQ 用に構文が大きく拡張されたので,こういう仕組み構文を自前で作ることも可能です.http://d.hatena.ne.jp/NyaRuRu/20070826/p2

タイトル
名前
Url
コメント