JDK 7 Milestone 12リリース (と、JDK 7とJSR 336の関係について)

先週の話なので少々出遅れましたが、JDK 7のDeveloper Previewがリリースされました。これはマイルストーン番号で言うとMilestone 12(M12)、ベータバージョン番号で言うとb130に該当します。次のページよりダウンロードすることができます。
— Project Kenai

また、最新のスナップショット(現在はb130が最新です)は次のページで入手できます。スナップショットは原則として毎週更新されることになっているようですが、遅れたり抜けたりすることもあります。
http://download.java.net/jdk7/

Windowsの場合は.exe形式のバイナリを使えばインストーラによって簡単にインストールできるのですが、その際JRE 7は同時にインストールせず、JDK 7のインストールだけにしておいた方がいいかもしれません。JRE 7をインストールするとシステムがデフォルトで使うJavaJRE 7にされてしまいます。具体的にはC:\windows\system32\のjava.exeが上書きされてしまうのですが、レジストリに登録されたJavaのバージョンも変えられてしまうので、単にファイルを元に戻しても動かないのです。*1
これまでの環境を維持しつつJRE 7を使いたい場合は、別途「Windows X64 self-extracting JRE Jar file」の方をダウンロードして、実行時にフルパスでJRE 7の方のjava.exeを指定すればいいでしょう。

JDK 7を試す場合はNetBeans 7.0を使うのがお勧めです。Beta版がダウンロードできます。NetBeans 7.0にはJDK 7のサポートが含まれているので、新しい言語仕様にしたがったコード補完やシンタックスハイライトなどを利用することができます。

今回リリースされたDeveloper Previewは、JDK 7のFeature Complete版、すなわち一通りの新機能の実装が完了しているバージョンということになります*2JDK 7の新機能の一覧はOpenJDKのサイトにまとめられています。
JDK 7 Features

それとは別に、Java 7の仕様についてはJSR 336としてJCPに提案されており、最初の承認投票(JSR Review Ballot)を通過しています。誤解している人が多いのですが、JCPのJSR Review Ballotは仕様の細かな内容に関する投票ではなくて、あくまでも「JCPとして仕様策定を開始することを承認する」という内容の投票です。要するに「こういう機能を盛り込んだ仕様を作りたいんだけど、JSRに登録して話し合いを進めてもいいかな?」ということであり、一応の方向性はあるものの、具体的な内容はこれから決めていくことになるわけです。

じゃあJDK 7のFeature Completeって何なの?ということになるわけですが、現在のJDK 7プロジェクトは、"Java 7仕様の参照実装"ではなく、「次期版のJDKに取り入れる機能の候補を実装する」という役割を担っています。なのでJDK 7で新機能の実装を進めつつ、それを元にしてJSRに提案するという順番をとっています。このような事情があるため、JDK 7で実装が完了している機能についても、それがそのままJava 7に導入されると決まっているわけではありません。もちろん有力な候補であることは間違い無いので、Java 7の機能を予習したいという場合は、JDK 7のマイルストーンを試しておくのがいいと思います。

2/24追記:
Developr Preview用のページができていたので、ダウンロードサイトのURLを修正しました。

2/24追記その2:
Mark Reinholdのブログにアナウンスが掲載されていました。「JDK 7を使ってみるときがきた」ということで、広くフィードバックを募集しています。
JDK 7 Developer Preview - Mark Reinhold’s Blog

If you’ve been watching JDK 7 development from the sidelines then now is a great time to download a build and take it for a spin. See if your favorite project still compiles and runs, see if it runs any faster than before, or try out one of the many new features.

*1:HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime\CurrentVersionあたりの値がチェックされて、バイナリのバージョンがこれと異なっているとエラーになるようです。なのでこの値も同時に書き換えれば直ったような覚えがあります。

*2:本来はM11でFeature Completeとなる予定だったのが、少し遅れてb126で完了し、それが1月にリリースされました。その後多数のバグ修正とテストを行ったものがこのM12とです。