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となった。2019年にリリースされたから19.0.0という方式である。
LinuxとMacOSのサポートから始まったが、WindowsやDockerもサポートしている。
サポートする言語は以下の通り。
GraalVMでなく、Graalというものがあり、GraalVMに含まれるJITコンパイラを指す。
Graal: 聖杯を意味する単語(英語ではGrailに相当)
内部に複数の処理系を抱えているようだ。バージョン1.0時点では各処理系は現時点の最新版に対応しているようだが、独自実装であり各言語のデファクトスタンダードやリファレンス実装の変化についていけないリスクも。
内部にOpenJDK 8を持っているようである。JVM言語はバイトコードに変換されるので、OpenJDKのJava仮想マシンで実行される。
ブラウザから独立して動作するメジャーなJavaScriptインタプリタNode.jsも含まれているようだが、後述のようにJavaScriptの処理系はGraalVM自身も別に持っている。
Javaで書かれたTruffle(トリュフの英語綴り、フランス語はtruffe)という構文解析器があり、JVM言語以外の言語はこちらが処理する。
コンパイルにLLVMを用いる言語は一旦bitcodeという中間コードに変換されるが、この中間コードのインタプリタがあり、それを実行するということのようである。対応する言語の例としてC言語、C++、Rustがあがっっている。LLVMを使用する言語であればSwiftやObjective-Cなどもいけそうな気がするが、名前があがっていないのはAppleと仲でも悪いのだろうか。
JavaScriptを実行する機能は(JavaにもJavaScriptエンジンNashornが搭載されているが)上記Truffleを用いて独自に実装されているよう。他の試験的なサポート言語であるRuby, R, Python, WebAssmblyもTruffleを用いて独自に実装したもので、標準的インタプリタが内部に組み込まれているわけではない。
JavaをわざわざTruffleで実行するJava on Truffleというものも追加されている。Javaで実装されたJava仮想マシンを用いるらしい。プロジェクト名はEspresso。
ネイティブコード(機械語)への変換もサポートしている。バイトコードの実行時コンパイルを介さないので理論的にはJavaの実行が高速になるはずだが、バージョン1.0の段階では仮想マシンの起動時間はなくなるもののJava仮想マシンよりも速度が落ちる(改善予定)とのことで、多言語と連携する時に使用するということのようである。速度が改善されたとしても、Oracleのことだから有償版専用の機能とかになりそう。
仮想マシンにあるライブラリは使えないので、リフレクションなどで実行時にクラスを選んでロードするプログラムは(ロードするクラスがネイティブコードに含まれていないので)動かないようだ。
掲示板
1 ななしのよっしん
2021/01/08(金) 15:52:26 ID: dlJ7Rq0s4J
GraalVM Offers COBOL Support
https://
Integrating Cobol with JavaScript
https://
多言語対応ランタイムの魅力
2 ななしのよっしん
2021/01/08(金) 15:56:22 ID: dlJ7Rq0s4J
続・多言語対応ランタイムの魅力
WebAssemblyをWin/Mac/Linuxで実行可能なランタイム「Wasmer 1.0」正式リリース。事前コンパイルによる高速起動やクロスコンパイルなどにも対応
https://
>Windows、Mac、Linux、FreeBSDに対応。Apple M1チップのMacにも対応します。
>Wasmerは、WebAssembly形式のバイナリを内部でネイティブなバイナリにコンパイルし、それをメモリに展開して実行していますが、このコンパイラをプラガブルにしています。対応しているのは「Singlepass」「Cranelift」「LLVM」の3種類。
>さらにWasmerではWebAssemblyエンジンとして、コンパイラが生成したネイティブバイナリを扱うエンジンを2種類備えています。
>1つは「JITエンジン」で、これはコンパイラが生
(省略しています。全て読むにはこのリンクをクリック!)
急上昇ワード改
最終更新:2024/11/30(土) 00:00
最終更新:2024/11/29(金) 23:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。