最近、SunのJava SEチームはJDK 7 Milestone 5をリリースした。このM5リリースには、Project Coinの機能のおよそ半分、Doug Lea氏らによるjava.util.concurrentパッケージのアップデートなど、数多くの機能強化が含まれている。
Project Coinから導入された新しい言語機能には以下のようなものがある。
- ジェネリックス型のインスタンス生成のための型推論の改善(ダイヤモンド)。クラスのインスタンス生成時には限定的な型推論を使う。これにより、コンストラクタに型パラメータを明示的に宣言する必要のある場所でも、文脈から判断できる場合には型パラメータを空にすることができる。つまり、
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
はこう書けるようになる。
Map<String, List<String>> anagrams = new HashMap<>(); - 可読性向上のための2進リテラルと数値内のアンダースコア区切りのサポート。例えば、こう書けるようになる。long creditCardNumber = 1234_5678_9012_3456L
- Switch文におけるStringのサポート。
java.util.concurrentパッケージのアップデートには、Phasers、TransferQueues、fork/joinフレームワークのサポートが含まれている。Alex Miller氏は、今回入った機能や、まだ入っていないFences APIやParallelArrayといった機能について、素晴しい記事を書いている。
これらの変更に加えて、Swingの新しいコンポーネントとしてJLayerが加わった。これにより、複合コンポーネントの修飾やサブコンポーネントイベントの捕捉が可能になる。Sunはまた、JREを提供しているすべてのプラットフォームをカバーするよう、楕円曲線暗号の実装を拡大した(これまではSolarisでしか利用できなかった)。Milestone 5には、Josh Bloch氏がPythonの「TimSort」からもってきた新しい高速なマージソートアルゴリズムなど、数々のパフォーマンス改善も含まれている。VMレベルでは、エスケープ分析と64ビットポインタを32ビットになるよう圧縮することが、HotSpot仮想マシンのデフォルトとして有効になっている。これはメモリ消費を削減して、パフォーマンスを改善するのに役立つ。
これら以外にも数多くの変更がある。詳細については、変更点についての完全なリストを参照しよう。
Milestone 5はJava 7の最初のFeature Completeリリースになることが期待されていたが、それには至らなかった。Milestone 5リリースに含まれた主要な機能を以下に示す。
vm | コンプレス64ビットオブジェクトポインタ G1ガベージコレクタ JSR 292: 非Java言語のためのVMサポート (InvokeDynamic) |
言語 | JSR 308: Java型におけるアノテーション |
コア | クラスローダーアーキテクチャのアップグレード URLClassLoaderをクローズするメソッド Unicode 5.1 JSR 166y: 並行処理とコレクションのアップデート JSR 203: Javaプラットフォームのためのさらなる New I/O API (NIO.2) SCTP (Stream Control Transmission Protocol) SDP (Sockets Direct Protocol) 楕円曲線暗号 (ECC) |
クライアント | 6u10デプロイメント機能のポーティング 6u10グラフィックス機能のための新しいプラットフォームAPI SwingのためのNimbus look-and-feel |
まだ含まれていない主要な機能には、次のようなものがある。
- モジュールシステム(Project Jigsaw)と、それに関連したモジュラープログラミング (JSR 294) のための言語およびVMサポート。
- 自動リソース管理、コレクションリテラル、JSR-292の言語レベルでのサポート、可変引数メソッド呼び出しの簡素化など、Project Coinの機能の数々。
- もともとM4リリースで予定されていたXMLスタックのアップデート。
- Java 2DのためのXRenderパイプライン。
- Dual-Pivot Quicksortの実装。
実際には、ほとんどクローズに近いものもある。例えば、Dual-Pivot Quicksortに関するコードは、2009年12月3日のMilestone 6の最初のビルド、build 77に入ることになるだろう。しかし、まだほど遠いものもある。Project Jigsawは進展しているものの、現時点ではアルファレベルのLinux向けのバイナリがM5用にダウンロードできるだけだ。同じく、JSR 294も完成までにはまだしばらくかかりそうだ。Alex Buckly氏はエキスパートグループのメーリングリストにおいて、Simple Module System提案を推進するべきではない、と提案している。
JigsawとOSGiはいずれも、当初JCPの外部で定義されたものであり、これらを統一するモジュールシステムを定義するのにJSR 294はふさわしい場とは思えません。善意から出た、厄介な妥協の産物になってしまうでしょう。Simple Module System提案はエキスパートグループにおいて明確に支持されているわけではありません。私はこれ以上、我慢したくはないのです。
JDK 7にはまだ長い道のりがあることを考慮して、Sunは新しいマイルストーンリリースを追加して、Feature CompleteビルドをMilestone 8(2010年6月)へと先送りした。これにより、multi-catchや、以前紹介したクロージャのような機能がJDK 7リリースに入るかもしれないが、最終リリースは2010年9月へと約6か月延期されることになる。