読者です 読者をやめる 読者になる 読者になる

kagamihogeの日記

kagamihogeの日記です。

JEP 182: Policy for Retiring javac -source and -target Optionsをテキトーに訳した

http://openjdk.java.net/jeps/182 のテキトーな訳。

ぶっちゃけJEP 182でぐぐって出てくる日本語の解説記事読んだ方が分かりやすいんだけど……まぁ気にしない。

JEP 182: Policy for Retiring javac -source and -target Options

Author    Joseph D. Darcy
Owner   Joe Darcy
Created 2013/04/02 20:00
Updated 2014/07/10 20:16
Type    Informational
Status  Draft
Component   tools / javac
Scope   JDK
Discussion  discuss at openjdk dot java dot net
Priority    4
Reviewed by Brian Goetz
Endorsed by Brian Goetz
Issue   8046172
Relates to  8028563: Remove javac support for 6/1.6 source and target values
    8011043: Warn about use of 1.5 and earlier source and target values
    8011044: Remove support for 1.5 and earlier source and target options
    8010179: Remove transitional target values from javac

*1

Summary

javacのメンテナンスコスト削減のために、このJEPは古い-source-targetオプションを取り除くためのポリシーを定義します。JDK 8ではsourceやtargetに1.5かそれ以前を使うことはdeprecatedとなり、JDK9では1.5かそれ以前のサポートは削除されます。JDK 9および将来的にはjavacのsourceとtargetでサポートするオプションのポリシーは"自身とその三つ前(one + three back)"となります。このポリシー下では、javacは依然として、1996年初出荷のJDK 1.0.2で生成されたversion 45.3クラスファイルまでさかのぼる、すべての過去のJDKのクラスファイルの処理と解釈が可能です。

Goals

陳腐化したコードを削除することでコンパイラーのメンテナンスコストを削減する。

Motivation

古いsourceとtargetオプションを削除することで、javacコンパイラのメンテナンスを簡素化します。JDK 8でサポートしている多くのsourceとtargetの値は、public updatesの終了から長い時間経過しているrelease trainsのためのものです。その古いリリースのユーザはそのリリースのjavacを、もし再コンパイルが将来必要とされる場合、使用可能です。

sourceとtargetオプションはJava SE specificationでは管理されておらず、プログラマ都合の目的用に提供されています。しかし、古いオプションのメンテナンスのコストはゼロではありません。たとえば、rt.jarのソースレベルよりも古い-source Nオプションが指定されるとき、リリースNより新しい(newer-than-release-N)プラットフォームライブラリの言語機能をコンパイルされるコードに組み込むべきかどうか、明確ではありません。サポートするsourceとtargetの期間を縮小することで、そうした質問を考慮する設計を簡素化します。

Description

文書化されなかった(never-documented)targetオプションjsr14, 1.4.1, 1.4.2は既にJDK 8で削除されています。1.5/5とそれ以前のsourceとtargetはJDK 8ではdeprecatedになります。これらのオプションを使用するとwarningが出力されます。JDK 9では、これらのオプションはjavacが最早解釈しません。JDK 9は"one plus three back"サポートポリシーを実装し、このリリースで解釈可能なのは1.9/9, 1.8/8, 1.7/7, 1.6/6となります。このポリシーはJDK 10に引き継がれます。

Impact

*1:Issue, Relates toはその関連ページへのリンクが貼られているが、俺の訳文では割愛。本文を参照。