http://openjdk.java.net/jeps/199をテキトーに訳した。
JEP 199: Smart Java Compilation, Phase Two
Owner Andreas Lundblad Created 2014/05/16 11:43 Updated 2014/08/18 22:34 Type Feature Status Targeted Component tools / javac Scope JDK Discussion compiler dash dev at openjdk dot java dot net Effort L Priority 2 Reviewed by Brian Goetz Endorsed by Brian Goetz Release 9 Issue 8043311 Depends 8014510: Fix sjavac on all platforms in jprt 8019239: Properly clean up sjavac heuristics
Summary
sjavac
ツールを、JDKビルド時にデフォルトで使用可能にし、また、JDK以外の大規模プロジェクトのビルドにも使用可能なように、ツールの改善と一般化を行います。
Goals
sjavac
は、安定性と移植性に関する様々な問題があるため、JDKビルドスクリプトのデフォルトには使用されていません。本JEPの第一目的はそうした問題を解決することです。これには、すべてのソフトウェア/ハードウェア環境において、何時でもツールが信頼出来る結果を生成するのを確認することが含まれます。
より全般的な目的としては、任意の大規模Javaプロジェクトをコンパイル可能な汎用javac
ラッパーとして提供可能なように、sjavac
の品質を改善することです
これに続くプロジェクトでは、JDKツールチェーンでsjavac
をどのように公開するかを調査します。それは恐らく、複数の対応スタンドアローンツール、未対応ツール、javac
統合、などから構成されると思われます。
Non-Goals
本JEPの目的外なのは、原状存在せず我々のビルドスクリプトで必要としない新機能*1の導入や、汎用用途のjavac
ラッパーに向けての活動です。ラッパーの書き直しは目的としません。現行機能は引き続き現状維持をします。
プロダクトへのsjavac
の取り込み*2は、要望があれば、別のJEPで扱います。
Motivation
現行の実装は有用であり、ビルドスピードを実際に改善してインクリメンタルビルドを可能にしました。しかしながら、全体としてツールの安定性とコードの移植性は不十分であり、公開リリースが出来る状態ではありません。
Description
本JEPの作業はJEP 139で定義されて既に開発済みの実装に基づいて行われます。本JEPで定義する作業は、既存実装に対してインクリメンタルにパッチを記述・テスト・コミットすることで、少しずつ実施していきます。
まず、JDKビルドに関する問題を解決することに取り組みます。これには以下の内容が含まれます。
- JDK-8014510 JPRTの全プラットフォーム上の
javac
の修正 - JDK-8019239
sjavac
ヒューリスティックの適切なクリーンアップ
他の問題としては以下の内容を扱う予定です。
- RMIの活用が可能であればプロトコルのリファクタリング*3
- オプション名およびシンタックスを
javac
との間で整合性を取る System.{out,err}
ログ出力を他の適切なものに置き換える- 可能であれば、
javac
でもっとリソース共有をすることでパラレル化を向上する
対処すべき問題には以下の内容も含まれますが、以下に限定するわけではありません。
- 国際化
- Jigsaw対応
javac
にはある種の適応化が要求されます。とりわけ、マルチプル・コンカレント・コンパイルを実現するにはjavac
のリファクタリングが必要です。javac will have to be refactored to allow for multiple concurrent compilations to share common data structures to enable better speed up and higher CPU utilization on multicore machines.*4。
Testing
通常の必須ユニットテスト(mandatory unit tests)に加え、sjavac
を徹底的にパフォーマンステストしますが、その理由は、ツールは部分的にプラットフォーム固有の機能であるファイルパスやバックグラウンドプロセスの生成などを含むためです。
更に、sjavac
は同時実行性を考慮に入れた負荷テストを実行しますが、その理由は、サーバクライアントアーキテクチャは本質的にパラレルだからです。
Dependences
JEP 139: Enhance javac to Improve Build Speedの内容を踏まえて本JEPは提案されています。
*1: new features that are not in place today, not required by our own build scripts,が原文。not required byはnew featuresにかかってるとして訳したがちょっと自信が無い。
*2:The incorporation of sjavac into the productが原文。productが何指してるか分からなかったので、曖昧な訳になっている。
*3:Refactor the protocol, possibly by leveraging RMIが原文。カンマの位置とpossiblyのうまい訳し方が分からず
*4:原文。allow for ~ to shere ~ to enableとなっており、直訳すると~するための~するための~するためのもの、となってしまい、これをうまく日本語として通る文に訳せなかった……