オラクル、JavaやJavaScript、Ruby、Pythonなど多言語対応を単一ランタイムで実現する「GraalVM」をオープンソースで公開。Twitterが本番環境で採用
JavaやJavaScriptなどには、それぞれその言語を実行するためのランタイムが存在します。JavaならJavaVM、JavaScriptならJavaScriptエンジンといった具合です。
米オラクルがオープンソースで公開した「GraalVM」は、これまで言語ごとに個別に用意されていたランタイムを統合し、単一の高性能なVMにするという同社の研究の結果開発された汎用仮想マシンあるいは汎用ランタイムです(米オラクルのブログ、日本語訳)。
GraalVMのWebサイトには、次のような説明が記されています。
GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Kotlin, and LLVM-based languages such as C and C++.
GraalVMはJavaScript、Python、Ruby、R、JavaやScala、KotlinなどJVMベースの言語、CやC++のようなLLVMベースの言語などを実行するためのユニバーサルな仮想マシンです。
今回リリースされた「GraalVM 1.0」では、前述の通りJavaVMベースの言語(Java、Scala、Groovy、Kotlinなど)とJavaScript、CやC++、Rustで記述されたコードから生成されたLLVMのビットコード、Ruby、R、Pythonなどが実行可能とされています。
ただし現時点では本番利用の場合、JavaVMベースの言語と(Node.jsを含む)JavaScriptが推奨されており、R、Ruby、Python、LLVMベースの言語はまだ実験段階とのこと。
それぞれの言語のランタイムとしての利用法は、「Oracle Labs GraalVM: Programming Languages and Runtimes Overview」で説明されています。
GraalVMのメリットとは?
多言語のランタイムを単一の仮想マシンで実現できるメリットは、組織内でさまざまな言語を用いていたとしても同一ランタイムのデプロイで済むため構成がシンプルになること。そして運用においては、これまでランタイムごとに異なるデバッガやプロファイラを用意し、利用方法を覚えなければならなかったのに比べ、どのような言語でも単一のデバッガ、プロファイラ、ヒープビューアなどが利用できることなどが挙げられます。
また、アプリケーションが複数の言語で開発される場合も、言語間の連携が容易になります。
GraalVM removes the isolation between programming languages and enables interoperability in a shared runtime.
GraalVMはプログラミング言語間の分断を取り除き、単一ランタイム内の相互運用を実現します。
GraalVMはJavaVMやNode.jsではV8を置き換えて利用することができるとされているほか、Javaではプリコンパイルによるネイティブバイナリの生成も可能です。
For JVM-based languages, GraalVM offers a mechanism to create precompiled native images with instant start up and low memory footprint. The image generation process runs a static analysis to find any code reachable from the main Java method and then performs a full ahead-of-time (AOT) compilation.
GraalVMはJavaVMベースの言語では、すぐに起動してメモリフットプリントの小さい、プリコンパイルされたネイティブイメージを作成する機能を提供します。このイメージを生成するプロセスはメインのJavaメソッドから到達可能なコードを見つけるために静的解析を行い、全体を事前コンパイルします。
TwitterはすでにGraalVMを本番投入していると紹介されています。
Twitter is one of the companies deploying GraalVM in production already today for executing their Scala-based microservices. The aggressive optimizations of the GraalVM compiler reduces object allocations and improves overall execution speed. This results in fewer garbage collection pauses and less computing power necessary for running the platform.
TwitterはGraalVMをすでに本番投入している企業の1社であり、Scalaベースのマイクロサービスを実行しています。GraalVMコンパイラの積極的な最適化により、オブジェクトの配置や全体の実行速度が改善されました。これによってガベージコレクション処理による一時的な処理の停止が減少し、プラットフォームの実行に必要なコンピュータの能力もより小さくて済むようになりました。
GraalVMはオープンソースで開発されており、無料のCommunity Editionと、セキュリティやスケーラビリティを高めた商用版のEnterprise Editionが提供されます。
あわせて読みたい
さらばJavaOne、今年から「Oracle Code One」に。Javaだけでなくさまざまな言語と技術を対象としたデベロッパー向けのイベント
≪前の記事
Google、Dockerデーモンに依存せずコンテナイメージをビルドできる「kaniko」オープンソースで公開