A note to our readers: As per your request we have developed a set of features that allow you to reduce the noise, while not losing sight of anything that is important. Get email and web notifications by choosing the topics you are interested in.
2017年も終わりに近づいたので、2018年のJavaプラットフォームの未来を見てみよう。
私たちは2018年に入る。いつもよりも多くの変化がJavaの世界にもたらされた1年の次の年だ。部分的にはJava 9の到来によるものだ。ほぼ1年遅れではあったが。
しかし、このリリースは次第に重要視されなくなったようだ。新バージョンとともにリリースサイクルの変更があったからだ。このリリースプロセスへの変更が意味することは、2018年のJavaの新しいリリースは1つではなく2つになるということだ。
最初のリリースはJava 10、2番目のリリースはJava 11となる。この命名規則は既存の状況を参照しているように見えるかもしれないが、重要な公開討論と最終的に合意に至ったあとで実現したことである。
この厳格な期日ベースのサイクルへの切り替えの結果、Javaの各機能リリースに入る内容は今まで歴史的にあったものよりスコープとして小さくなると思われる。Java 10はとくにそうで、機能数はかなり少なくなる。
InfoQは以前主要な項目をカバーしておりそれ以降マイナーなもの(追加のUnicode拡張)、掃除(ネイティブヘッダ生成ツールの削除やデフォルトのルートCA証明書の提供)、実験的なもの(Graal - JavaベースのJITコンパイラ)、現状ニッチな機能(ヘテロジニアスメモリアーキテクチャのサポート)だけがリリースに対して追加された。
Java 11では、リリースに向け検討されている一連の機能はより漠然としており、現時点ではスコープにいくつかの機能だけがある。
- Epsilon (null GCアルゴリズムの参照実装)
- 動的なクラスファイル定数(プラットフォームの機能であり、ライブラリ作者やinvokedynamicハッカーが主に興味を持つものだ)
- JITコンパイルイベントの実行時トレーシング
このリストはリリース日が近づくに連れて確実に埋まっていくだろう。しかしそこにない機能で注目に値するものはJavaバリュータイプだ。意外ではないかもしれない。バリュータイプはJava言語と実行環境に対する大きな変更であり、Javaの型システムの一面を完全に再構築する提案であるからだ。ここにはジェネリック型も含まれる。
現時点のプロトタイプは、動作するがまだ提供までに長い道のりがある。現時点での状態では低レベルプラットフォームのハッカーやリフレクティブまたはMethodHandleハンドルベースのツールでのハッキングに慣れている人だけに適したものである。現時点での状況ではJava 11の一部としてバリュータイプがリリースされることはまったく考えられないように思える。いつバリュータイプが来るのかということに関してオラクルからの公式なコメントはまったくないが。
しかし、もしバリュータイプがJava 11の一部としてリリースされなければ、これがもたらす波及効果として、バリュータイプを含んだ最初の長期間サポートリリースは少なくとも2021年9月まで現れないことになる。
これを書いている時点では提案されているデータクラス機能がJava 11に入るかどうかに関してもはっきりしない。Java言語アーキテクトであるBrian Goetz氏は以下のように述べている。
データクラスは、複雑ではっきりしないクラス表現とそのAPI契約の間の関係を否定することについてです。そうすることで、コンパイラは共通のクラスメンバを書き込めます。
提案とScalaのケースクラスにはいくつか類似点がある。しかしGoetz氏はデータクラスで取り組む設計空間としては幅広い可能性をカバーしており、データクラス機能での全体的なセマンティクス的な意味は見えている部分より深いとはっきり述べている。データクラスの現在のコンセプトは同様に開発中のパターンマッチング機能と深く結び付けられている。しかし可能性としてはこの2つを別のリリースにできる。
この2つの機能に関連することとしては、switchの拡張形式が実現するかどうかである。これは文だけではなく式も使って構築できるようにするものである。
この機能は比較的小さく、データクラスやパターンマッチング抜きであってもJava 11で当然提供されるかのように思われている。しかし現時点ではまだJEPのドラフトに過ぎない。
9月リリースに対しての最終的な機能完成日は2018年6月であり、我々はJava 11の全体像がはっきりするまでもう数カ月見守らなければならないだろう。
Rate this Article
- Editor Review
- Chief Editor Action