JavaSE7
多プログラミング言語対応
- JavaSE6の時点でJVM上で他プログラミング言語を動作させる仕組(JSR 223)自体は持っていたが、サポートする言語が増えた。
- JVMレベルで動的な型をサポートする仕組みを追加予定(JSR 292(マイコミ記事))
動的型付をしている言語の動的型付をエミュレーションではなく、JVMレベルでサポートするという話。
マイクロソフトが.NETに追加しようとしているDLRと同じようなものだと思う。
RubyやPythonみたいな生産性の高い言語から、
いい肉がたくさん取れる大きな牛だというJavaEEのAPIを叩くのが主流になって、
webアプリ開発のプラットフォームとして使ってもらうには、
RubyやPythonがとりあえずじゃなくてちゃんと動きますってのが将来的には必要になってくるんかね?
Modularityの強化
これまでのJavaのモジュールは、
- 開発時のモジュール…packageによる名前空間
- デプロイ時のモジュール…JARとか
があったのだけど、
- 開発時のモジュールについてはpublicがpublicすぎて、例えばFacadeを作っても、個別のクラスに触らずFacade経由でアクセスするというルールは、開発者が無視しようと思えばいくらでも無視できるという意味でいけてない。
- JARについては、バージョン管理や依存関係の管理をJARに含まれる情報のみで行えない、複数のJARをパッケージできないという意味でいけてない。
前者をどうにかしようというのがSuperpackage(JSR 294(マイコミ記事))で、
後者をどうにかしようというのがJAM(JSR277(マイコミ記事))。
Superpackageは複数packageをimportしてpackageのようなものを作り、
Superpackage外に公開するクラスを明示的に指定しておくというもので、
開発者が作成するクラスでSuperpackageをimportするようにすれば、
先ほどのpublicがpublicすぎる問題は発生しないというわけ。
JAMは複数のJARや依存するネイティブのライブラリ(dll、soなど)リソースファイルなどをまとめてがっちゃんこし、
さらに外部の依存するモジュール、公開するクラスの一覧等をメタデータとして持つというもの。
で、Superpackageと一緒になるとか何とか、そう言えばマイコミ記事にもSuperpackageにアノテーションをつけておくと、
ビルドしたときメタデータが自動生成される仕組みが検討中だとあったのでそれのことかと。
なんか.NETのdllっぽい。
.NETだと同一dll内でのみアクセスできるアクセスレベルinternalとかあるし、
確か、dllのバージョン情報やどのバージョンに依存しているかといった情報も持っているはずだし。
なんというか同じ歴史をたどってるなあと(〜HELLで痛い目を見て初めてモジュールのバージョン管理に乗り出すあたりも含めて)。
Management
JMXの話。櫻庭さんの専門だそうでめっちゃ生き生き話をしてたけど、
私には縁遠いんであんまりよくわかりません。
複数ランタイムや複数マシン上で動いている大規模システムを一括管理するために、
複数のMBeanServerの情報をマスターのサーバに束ねて監視できるというのと、
webサービス経由でRubyとかjava以外の言語で書かれたツールで監視できるというのがキモらしい。(JSR 262(マイコミ記事))
More New I/O(JSR 203(マイコミ記事))
J2SE1.4で導入されたNew I/Oで取りこぼした分がようやっと導入されるというお話。
といったところらしいが、2は更新日時が変わったら事前に設定しておいた処理が走るとかそんな感じなのだろうか?
勘違いしているような気がしなくもない。
Swing
- Swing Application Framework(JSR 296(マイコミ記事))
- Beans Binding(JSR 295(マイコミ記事))
- Bean Validator(JSR 303(マイコミ記事))
コンポーネント指向でイベント駆動なんだからバインド機能はもっと早く欲しかったなあ。
未定の仕様
クロージャの導入は強く反対している人がいるそうで、
クロージャの導入自体が気に入らないから反対しているのか、
クロージャ導入に伴って関数をファーストクラスオブジェクトとして
扱わなければならなくなるという変化がイヤだから反対しているのか
気になるところ。
C#みたいなプロパティの導入の話はどうなったのかも聞いてみましたが、
ExpartGroupを集めた段階で止まってるそうです。