新たな歴史の1ページ~Oracle Code One 2018現地レポート

【Oracle Code Oneレポート】Javaの進化は止まらない―将来導入が計画されている新機能とは

この記事を読むのに必要な時間:およそ 3.5 分

2018年10月22日から25日にかけての4日間,米サンフランシスコのMoscone CenterにおいてOracle主催の開発者向けイベント「Oracle Code One 2018」が開催されています。これは,これまでは「JavaOne Conference」として開催されていたイベントの後継となるもので,対象となる技術の裾野を広げてエンジニア同士のコラボレーションを促進しようという目的で名称が変更されました。

今回のOracle Code Oneでは,とくにJavaのコア機能に関わる発表がとくに注目されているように感じられます。その背景には,昨秋に公開されたJDK 9からJDKのリリースモデルが大幅に変更され,アップデートの速度が格段に早くなったという事情があります。そこで本記事では,現在開発が進められているJavaの新機能のうち,とくに重要とされる4つのプロジェクトについて取り上げます。

Javaの新機能はどのように決まるのか

そもそも,将来のJavaに導入される新機能はどのように決定されるのでしょうか。現在,JDKのコア機能の開発はOpenJDKプロジェクトが担っています。

OpenJDKプロジェクトでは,将来のJavaへの導入が検討される機能要望を「JEP(JDK Enhancement Proposals))⁠という形でまとめています。新機能の要望がJEPとして認可されれば,その機能の重要性やほかのJEPとの依存関係などを考慮して優先度が付けられ,担当者やターゲットとするJDKのバージョンなどが協議されます。

気をつけなくてはいけないのは,JEPはあくまでも提案であり,JEPに登録されたからといって必ずしも将来のJDKに導入されるとは限らないということです。

JEPの情報はこのページで公開されています。それぞれのJEPのターゲットとなるJDKバージョンを確認すれば,将来のJDKにどのような機能が追加されるのかがある程度見えてきます。たとえばJDK 12をターゲッチとしたJEPとしては,JEP325,JEP326,JEP340,JEP341があります。JDK 12にはこの4つの変更が加わる可能性が高いということです。

なお,各バージョンの最終的な仕様の決定は,従来通りJCP(Java Community Process)にしたがって行われます。Java 12のJSRはJSR 386です。

大きなインパクトのある機能については,JEPに登録されるだけでなく,OpenJDK内にサブプロジェクトを発足させて開発を行うケースもあります。そのようなプロジェクトは,OpenJDKの公式サイトの左側にある「Projects」の一覧から探すことができます。Oracle Code Oneでは,これらのプロジェクトのうち以下の4つがとくに重要度の高いものとして繰り返し取り上げられました。

この4プロジェクトの成果物は,将来的にJDKに導入される可能性がとくに高いものとして注目されています。実際,一部の機能は先行してすでにリリース済みのバージョンに導入されていますし,前述のように明確にJDK 12をターゲットとしたものもあります。

初日のキーノートでもMark Reinhold氏が1時間近くも使ってデモを披露したほどであり,とくに力を入れて開発されていることが分かります。

任意のプリミティブ型を作れる「Project Valhalla」

Project Valhallaは,JVMおよびJava言語の型に関する定義や実装を拡張するプロジェクトです。本稿執筆時点では,次のような機能が提案されています。

Value Typesは,intのようなプロミティブ型と同じ挙動をする任意の型を定義できるようにする拡張です。具体邸には,クラスを定義する際に特別なキーワードを付けることで,そのクラスのオブジェクトは参照を経由しないで値を保持できるようにメモリ上に展開されます。これによって,コード上ではクラスと同じように見えながら,実際にはプリミティブ型のようには参照のオーバーヘッドが無い,メモリ内でより効率的にレイアウトされる型を作れるようになります。

通常のクラスのメモリレイアウトの例

通常のクラスのメモリレイアウトの例

Value Typesのメモリレイアウトの例

Value Typesのメモリレイアウトの例

Generic Specializationは,Genericsに対してプリミティブな型の引数によるインスタンス化をサポートするというものです。従来のGenericsの型引数は,intなどのプリミティブ型には対応していませんでした。その代わりに,パフォーマンスを考慮した場合に備えてIntStreamのような専用のクラスが用意されていました。

しかし,Value Typesが実現した場合,Value Typesはプリミティブ型のように振る舞うため,この制約が非常に大きな負担となります。そこで,Generic Specializationを同時に実現することで,Value TypesもGenericsの型引数として利用できるようにしようというわけです。

著者プロフィール

杉山貴章(すぎやまたかあき)

ONGS Inc.所属のプログラマ兼テクニカルライター。雑誌,書籍,Webメディアで多数の著作をもつ。

著書

コメント

コメントの記入