BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java18が利用可能に

Java18が利用可能に

原文(投稿日:2022/03/22)へのリンク

Oracleは、Javaプログラミング言語と仮想マシンのバージョン18リリースした。この最終機能セットの9つのJEPは次のとおりである。

Java 18の機能サイクルでは、以前のリリースよりも機能がわずかに少なくなっている。Java17は14の機能、Java16は17の機能、Java15は14の機能、Java14は16の機能である。

このリリースには、Project AmberProject LoomProject Panamaに向けて継続的に貢献するJEPと、便利な新しいツールがいくつか含まれている。この記事では、新機能をいくつか見ていく。

Project Panama

JEP 417とJEP 419はProject Panamaの支援を受けている。Project Panamaは、JVMと明確に定義された「外部」との間の相互運用性を改善し、強化するように設計されたプロジェクトだ。「外部」とは、つまり、Java以外のAPIであり、一般的にCライブラリ内で使用されるインターフェイスが含まれる場合が多い。

パフォーマンスの向上に加えて、JEP 417 Vector API(第3インキュベータ)には、以前の2ラウンドのインキュベーションからのフィードバックに応えて強化されている。その2ラウンドは、JEP 414 Vector API(第2インキュベータ)とJEP 338 Vector API(インキュベータ)である。JEP 338はJDK 16にインキュベータモジュールとして統合され、JEP 414はJDK 17を対象とした最終JEPの1つとして定義されていた。

JEP 419 外部関数・メモリAPI(第2インキュベータ)は、JDK 17で提供された最初のインキュベータJEP412 外部関数・メモリAPI(インキュベータ)から進化している。Javaコミュニティのフィードバックを基に改善されている。この第2インキュベータの変更点は次のとおりである。メモリアクセス変数ハンドルで、booleanMemoryAddressインターフェイスなど、より多くのキャリアをサポートする。MemoryAddressインターフェースとMemorySegmentインターフェース向けのより一般的なデリファレンス(間接参照)APIを提供する。外部メソッド呼び出しハンドルを取得するためのよりシンプルなAPI(MemoryType列挙型を渡す必要がない)を提供する。Java配列をメモリセグメントとの間でコピーするための新たなAPIを提供する。

Project Loom

JEP 418はProject Loomの支援を受けている。Project Loomは、Java VM機能とAPIを探索、インキュベート、提供することを目的として設計されたプロジェクトである。このJava VM機能とAPIは、使いやすく、高スループットで軽量の同時実行性があり、新しいプログラミングモデルをサポートすることを目的として構築されるものである。これは、仮想スレッド、Delimited Continuation(実行を待つプログラムの区切り)、末尾呼び出しを通して実行される。

JEP 418 インターネットアドレス解決SPIは、ホスト名・アドレスの解決のためのサービスプロバイダーインターフェイスを定義している。これにより、java.net.InetAddressで、デフォルトの組み込みOpenJDKリゾルバ以外のリゾルバを利用できる。

Project Amber

JEP 420はProject Amberの支援を受けている。これは、生産性を向上させるために、より小さなJava言語機能を調査し、インキュベートすることを目的に設計されたプロジェクトである。

JEP 420 switchのパターンマッチング(第2プレビュー)により、ターゲットswitch式を、それぞれが特定のアクションを持つ複数のパターンに対してテストできるようになる。そのため、複雑なデータ指向のクエリを簡潔で安全に表現できる。これは、JDK 17で提供されているJEP406 switchのパターンマッチング(プレビュー)に続く第2プレビューである。機能強化としては、固定値のcaseラベルが、同じタイプの条件パターンに先行することを強制するドミナンスチェックが改善された。また、switchブロックの徹底チェックは、Sealed階層によって、より正確に行われるようになった。

Java Tools

JEP 413 Java APIドキュメントにコードスニペットでは、Oracleの標準Docletに@snippetタグが導入されている。Oracleの標準Docletは、デフォルトでHTML形式の出力を生成する有名なJava APIドキュメントユーティリティである。その目的は、APIドキュメントにサンプルソースコードを簡単に含められるようにすることである。次の2つの例が示すように、コードスニペットはインラインか外出しとなる。

このインラインの例では、ソースコードが@snippetタグで始まるコメントに追加され、中括弧で囲まれている。

    
/**
 * The following code shows how to use {@code Optional.isPresent}:
 * {@snippet :
 * if (v.isPresent()) {
 *     System.out.println("v: " + v.get());
 *     }
 * }
 */
    

この外出しの例では、既存のソースファイルShowOptional.java@startタグと@endタグが含まれている。定義されたリージョン、つまりregion="example"は、コメントとソースファイルで参照される。

    
/**
 * The following code shows how to use {@code Optional.isPresent}:
 * {@snippet file="ShowOptional.java" region="example"}
 */

public class ShowOptional {
    void show(Optional<String> v) {
        // @start region="example"
        if (v.isPresent()) {
            System.out.println("v: " + v.get());
            }
        // @end
        }
    }
    

JEP408 Simple Web Serverでは、静的ファイルのみを提供する最小限のHTTPコマンドラインWebサーバが提供される。このユーティリティは、特に教育環境でのプロトタイピング、アドホックコーディング、テストで役立つことを目的として設計されている。サーバは次のように起動できる。

    
java -m jdk.httpserver [-b bind address] [-p port] [-d directory] [-h to show help message] [-o none|default|verbose]
    

Java 19

現在、Java 19にインキュベーションとしてTargetedあるいはIntegratedとなっているJEPは1つだけである。

Java 19の正式なリリース日はまだ発表されていないが、6か月のリリースサイクルに従って2022年9月中旬にリリースされることが予想される。開発者は、2022年6月中旬に機能がフリーズすると予想できる。

Java 18は、Oracleからダウンロードできるようになっており、他のベンダーのバイナリが数日中に利用可能になる見込みである。

作者について

この記事に星をつける

おすすめ度
スタイル

BT