ニコニコ大百科モバイル

7/2(月)よりスマホまたはPCでアクセスした場合、各デバイス向けのサイトへ自動で転送致します


GraalVM


ヨミ: グラールバーチャルマシン

GraalVMとは、さまざまな言シーレスに動作する仮想マシンである。


概要


GraalVMとは複数の言シーレスに動かす仮想マシンである。サポートする言同士でお互いを呼び出すことができ、その際にパフォーマンスの低下がないことを特長とする。

2018年4月17日Oracleによってversion 1.0 RC1が発表されたが、その後1年ほどRCの状態が続いていた。2019年5月10日、RCがとれてversion 1.0になるかと思いきや、version 1.0 RC16からいきなりversion 19.0.0となった。


公式サイト



プラットフォーム


LinuxMacOSサポートする。version 19からWindowsの試験的サポートも開始されたようである。


対応言語


サポートする言は以下の通り。


参考


GraalVMでなく、Graalというものがあり、GraalVMに含まれるJITコンパイラす。

Graal: 聖杯を意味する単(英語ではGrailに相当)


動作原理


内部に複数の処理系を抱えているようだ。バージョン1.0時点では各処理系は現時点の最新版に対応しているようだが、独自実装であり各言のデファクトスタンダードリファレンス実装の変化についていけないリスク


Java仮想マシン(JVM言語)


内部にOpenJDK 8を持っているようである。JVM言語バイトコードに変換されるので、OpenJDKのJava仮想マシンで実行される。


Node.js(JavaScript)


ブラウザから独立して動作するメジャーJavaScriptインタプリタNode.jsも含まれているようだが、後述のようにJavaScriptの処理系はGraalVM自身も別に持っている。


Truffle


Javaで書かれたTruffle(トリュフ英語り、フランス語truffe)という構文解析器があり、JVM言語以外の言はこちらが処理する。

LLVM(C, C++, Rust等)

コンパイルLLVMを用いる言は一旦bitcodeという中間コードに変換されるが、この中間コードインタプリタがあり、それを実行するということのようである。対応する言の例としてC言語C++Rustがあがっっている。LLVMを使用する言であればSwiftObjective-Cなどもいけそうな気がするが、名前があがっていないのはAppleと仲でも悪いのだろうか。

JavaScript, Ruby, R, Python

JavaScriptを実行する機は(JavaにもJavaScriptエンジンNashornが搭載されているが)上記Truffleを用いて独自に実装されているよう。他の試験的なサポートであるRuby, R, PythonもTruffleを用いて独自に実装したもので、標準的インタプリタが内部に組み込まれているわけではない。


Native Image


ネイティブコード(機械語)への変換もサポートしている。バイトコードの実行時コンパイルを介さないので理論的にはJavaの実行が高速になるはずだが、バージョン1.0の段階では仮想マシンの起動時間はなくなるもののJava仮想マシンよりも速度が落ちる(善予定)とのことで、多言と連携する時に使用するということのようである。速度善されたとしても、Oracleのことだから有償版専用の機とかになりそう。

仮想マシンにあるライブラリは使えないので、リフレクションなどで実行時にクラスを選んでロードするプログラムは(ロードするクラスネイティブコードに含まれていないので)動かないようだ。


関連項目



最終更新日: 19/06/29 08:21
タグ検索 パソコン版を見る


[0]TOP
ニコニコ動画モバイル
運営元:ドワンゴ