BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java 9が1.5以前のソースコードのコンパイルを非サポートに

Java 9が1.5以前のソースコードのコンパイルを非サポートに

原文(投稿日:2013/06/28)へのリンク

Java 8 と Java 9を目標にした最近のJava Enhancement Proposalは、Javaコンパイラーによって使われる-target-source ディレクティブのサポートモデルを成文化することを目指している。提案では、コンパイラーは、せいぜいJavaコンパイラー自身のバージョンの3つ前までサポートする、と言っている。

-targetフラグによって、コンパイラーはJavaクラスフォーマットの特定のバージョンをターゲットにできる。典型的には1.5 や 1.6のようにJavaバージョンが特定されるけれども、これは実際には生成される出力に使用されるバイトコードのバージョンに翻訳される。

  • 48: Java 4
  • 49: Java 5
  • 50: Java 6
  • 51: Java 7
  • 52: Java 8 (未リリース)
  • 53: Java 9 (未リリース)

-sourceフラグによって、コンパイラーは、ラムダ、try-with-resources, strings-in-switch(switchに文字列が使える)などのような新しい言語要素を認識したり、あるいはエラーとして扱うことができる。幾つかの新言語フィーチャ(ラムダのような)は固有のバイトコードフィーチャ(invokedynamicのような)を使う必要がある。結果として、ターゲットバージョンよりも新しいソースバージョンを使うことは、殆どの場合不可能である。

JEP 182 は、最大3バージョンの-target-sourceがコンパイラーによって今後サポートされることを明言している。今年初めのJava 6の終焉によって、Java 8 コンパイラーではJava 6以降にサポートを制限(そして、Java 9コンパイラーではJava 7)、この制限が重要な障害にとなることは、誰にもないだろう。しかし、あるビルドツール(Mavenのような)では、特に指定しなければデフォルトでソースの互換バージョンが1.5である。これはJava 8上で走るにはアップデートが必要である。

変化はすでに始まっている。Java 8では、 jsr141.4のターゲットはもはやで受け入れられていない。1.5を使用すると警告を出す。Java 9がリリースされるときに、1.5のサポートは削除され、1.6に対しては警告を上げる。

実用的な観点から、これは大きな変化のように見えないかもしれません、しかし最近まで、OSGiのランタイムは、ジェネリックスを具現化できるコードを生成するために、-source 1.5 -target jsr14でコンパイルされたが、J2MEと互換なバイトコードを生成する。jsr14の使用は、Eclipseのコードベースから昨年取り除かれた。Androidは、ほとんどJ2MEを外した(とにかく、もし商業的な必要性があるなら、Felix と EquinoxなどのOSGiランタイムをまだ利用可能だ)ので、それらがもっと最近のランタイムでコンパイルされている事実は、大多数のJava開発者にとっては問題ではない。

この記事に星をつける

おすすめ度
スタイル

BT