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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy