kagamihogeの日記

kagamihogeの日記です。

JEP 199: Smart Java Compilation, Phase Twoをテキトーに訳した

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ビルドに関する問題を解決することに取り組みます。これには以下の内容が含まれます。

他の問題としては以下の内容を扱う予定です。

  • 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となっており、直訳すると~するための~するための~するためのもの、となってしまい、これをうまく日本語として通る文に訳せなかった……