BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース オラクルはバリュータイプ実装の最初の提案を公開した

オラクルはバリュータイプ実装の最初の提案を公開した

原文(投稿日:2016/11/09)へのリンク

2、3ヶ月前、オラクルのJVMアーキテクトであるJohn Rose氏とオラクルのJava言語アーキテクトであるBrian Goetz氏は、初めての、そして最小限のバリュータイプの提案を公開した。バリュータイプは開発者にいくつかプリミティブのセマンティクスを共有する新しい型を定義する能力を提供するだろう。この最初の提案の目的は単にプロトタイピングと実験、最初のベンチマークの提示を許可することである。完成バージョンはJava 10まで期待できないので、提案はバリュータイプをサポートするために新しいバイトコード命令を1つ追加するだけだ。Java言語の変更は将来のバージョンに引き伸ばしている。

Java言語それ自身はこの提案の一部として修正されないので、新しい機能を利用するただ1つの方法は直接関連するバイトコードの構築を通じてだろう。これはバイトコード生成ツールに取り組む開発者、たとえばJVM言語開発者だけがバリュータイプにアクセスするであろうことを意味する。この上に、バリュータイプの能力はその労力が示され、構築されたクラスで利用できるだけだろう。それはバリューに対応した特定のモジュールへロードされ、特定のメジャーマイナーバージョンのクラスファイルに含まれる。これは非常にサンドボックス的なアプローチである。これは、上級ユーザが新しい機能にアクセスできることを保証する。その一方で普通のユーザはまだ問題につまずくことなく新しいJVMのバージョンを使うことができる。

バリュータイプのこの最初のバージョンをサポートするための完全な更新セットは、提案にあるが、次の4つの項目にまとめられる。

  • バリュー対応型についてJVMに伝達するための@DeriveValueTypeと呼ばれる新しいアノテーション。バリュータイプとバリュー対応型をここで区別することが重要だ。バリュー対応型は普通のJavaクラスである。これはJVMがバリュータイプを生成するためのものである。もしバリュータイプが可能でなかったら、バリュー対応型は単なる普通のクラスである。
  • 新しいQタイプ記述子の定義を追加するためのクラスファイルフォーマットの拡張。現在のクラスファイルフォーマットは英字で、プリミティブ(数値はI、文字はCなど)とオブジェクトのためのLタイプと呼ばれるもの(Lの次に完全修飾クラス名が続く。"Ljava/lang/String;"のように。)の両方を含む型シグネチャを定義している。 QタイプはLタイプに似た方法で動作するが、バリュータイプに指定されるだろう(そしてその記述子は文字Qで始まるだろう)。
  • 1つの新しいバイトコード命令は、"typed"と呼ばれるものだが、Q対応をスタックへ/スタックから移動させるためである。新しい命令はマクロ命令の1種として動作するだろう。そのことは、複数の新しいバイトコードを利用するような効果を作り出すために他のすでにある命令と組み合わせることができることを意味している。このアプローチは2つのパラメータを持つ"typed"を提供するだろう。まずはQタイプの定義を指し示すインデックスである。つまりJVMはそれがロードまたはストアする必要があるものを知っている。次に他のバイトコードだ。これは実行する処理を示している。これは 現行の"wide"処理に似ている。
  • ValueType<T>と呼ばれる新しいクラスはQタイプにおけるリフレクション処理を実行するためのメソッドを持つ。これはすでにある普通の型のためのClass<T>に類似するだろう。これはとくに重要だ。なぜなら最小限のみ表に出るように新しいバイトコード命令の数を減らすために、少なくとも今はQタイプを生成し操作するためには何の命令もないからだ。リフレクション能力を提供することはこれらの処理がまだ関連があるメソッドハンドルを通じて、しかし新しいバイトコード命令を追加することなく実行されることを意味する。

この提案は完全な実装から遠く離れているが、その実験的な性質は最終バージョンと異なるであろうことを述べている。著者自身が強調しているように、つねにこれらの項目がどれも最終リリースの一部となっていない可能性がある。しかしながら、この早期のバージョンはプロジェクトPanamaまたはGPUの実験を伴ったプロトタイピングを許可するだろう。これはパフォーマンスや完全な解決策への開発努力、有用性についてのフィードバックを提供するだろう。一例として、この活動で発見が期待されることの1つは、バリュータイプを完全にサポートするためにJVMに追加されるべきバイトコード命令の最終セットである。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT