日別アーカイブ: 2019年5月13日

Announcing GraalVM 19.0

このエントリは以下のエントリをベースにしています。
This entry is based on the following one, writtern by Oleg Šelajev (Developer advocate for GraalVM at OracleLabs).
https://medium.com/graalvm/announcing-graalvm-19-4590cf354df8

昨年からGraalVMのRelease Candidateビルドを提供してきましたが、これまでにたくさんのフィードバックをいただきました。こうした内容を踏まえ、このたびGraalVM 19.0がリリースされました。いくつかのコンポーネントに分かれており、Coreには以下のコンポーネントが含まれています。

 GraalVM Downloads
https://www.graalvm.org/downloads/

Java 8 SE 互換(OpenJDK 1.8.0_212ベース)の Java Virtual Machine

GraalVMコンパイラは、allocation-heavyなワークロードの高速実行に効果があります。Twitterは、GraalVMコンパイラを使用してシステムを実行しています。

[VDM19] Performance tuning Twitter services with Graal and Machine Learning by Chris Thalinger

また、ScalaプログラムはGraalVM上で実行したときにパフォーマンスが大幅に向上します。

Compiling Scala Faster with GraalVM
https://medium.com/graalvm/compiling-scala-faster-with-graalvm-86c5c0857fa3

ES4x for Vert.xは、TechEmpowerベンチマークで選択したランタイムとしてGraalVMを含めました。

ES4x for Eclipse Vert.x
https://reactiverse.io/es4x/
es4x.dockerfile
https://github.com/TechEmpower/FrameworkBenchmarks/blob/cffabe9d29f4bf4b3a9ad845d70726a8ac87fd11/frameworks/JavaScript/es4x/es4x.dockerfile

Renaissance suiteという、JVM上の最新のワークロードをまとめた新しいベンチマークでは、GraalVMを使った実行結果は他のJavaアプリケーション実行方法よりもがよい結果だったことがわかりました。

Renaissance Suite – A benchmark suite for the JVM
https://renaissance.dev/

Node.js v10.15.2ベースのNode.js(polyglot 機能付き)

JavaやScalaライブラリをNode.jsから利用できます。Wixエンジニアリングがこのアプローチについて実験しました。発表内容は以下の動画からどうぞ。

Graal: Using JVM libraries in Node.js – Laurynas Lubys

また、逆にJavaアプリケーションでNode.jsモジュールを使うこともできます。

Mixing NodeJS and OpenJDK
https://blog.plan99.net/vertical-architecture-734495f129c4

最新のECMAScript 2019標準互換のJavaScriptエンジン

もうメンテナンスされないJavaScriptエンジンのRhinoやNashornから最新の標準に準拠するGraalVMのJavaScriptエンジンに以降できます。

ECMAScript 2016+ compatibility table
https://kangax.github.io/compat-table/es2016plus/
Oracle GraalVM announces support for Nashorn migration
https://medium.com/graalvm/oracle-graalvm-announces-support-for-nashorn-migration-c04810d75c1f

LLVM 6.0.0 bitcodeをマネージド環境で実行するためのランタイム

これを使うとネイティブ言語をJavaプログラムにより直接的に統合できます。

Safe and sandboxed execution of native code
https://medium.com/graalvm/safe-and-sandboxed-execution-of-native-code-f6096b35c360

その他のコンポーネントは gu(GraalVM Updater)ユーティリティを使ってインストールできます。

gu install native-image

GraalVM Native Image

現在早期導入機能として利用可能なGraalVM Native Imageは、信じられないほど起動時間が高速になります。これはクラウドへの展開シナリオで非常に歓迎されています。エコシステムの多くのプロジェクトが、成果物やワークロードのプラットフォームとしてGraalVM Native Imageを受け入れています。Quarkus、Micronaut、Helidon ではGraalVM Native Imageをサポートしています。

Quarkus
https://quarkus.io/
Micronaut
https://micronaut.io/
Helidon
https://helidon.io/

Nettyは最近、GraalVM Native Imageのための設定をその成果物に含め、すべてのNettyプロジェクトおよびダウンストリーム・プロジェクトのユーザーがネイティブイメージを生成する作業を簡素化しました。また、Pivotalのエンジニアと共同で作業を続けており、今後Springアプリケーションのネイティブイメージサポートを期待しています。

Netty 4.1.36.Final released
https://netty.io/news/2019/04/30/4-1-36-Final.html

その他の gu ユーティリティでインストール可能なコンポーネントは言語コンポーネントです。

gu install ruby R python

Python、Ruby、Rという言語はOracle Labsで開発しており、このリリースにおいてもなおexperimental(実験的)の状態です。さらなるフィードバックをお待ちするとともに、さらなる安定化やコミュニティ活動が必要です。

しかしながら、GraalVMのpolyglot の性質を探求するプロジェクトはすでにあります。例えばEclipse Vert.x、nodejvmやgKnitは、それぞれJavaとJavaScript、Node.jsとJava、およびRとRubyを混在させるためにGraalVMを使用します。

Eclipse Vert.x
https://vertx.io/
Mixing NodeJS and OpenJDK
https://blog.plan99.net/vertical-architecture-734495f129c4
How to do reproducible research in Ruby with gKnit
https://towardsdatascience.com/how-to-do-reproducible-research-in-ruby-with-gknit-c26d2684d64e

Versioning

これまでGraalVMのマンスリービルドをリリースし、今後プラットフォームの進化・改善を進めていきますが、リリースが公開されたことで、コミュニティがこれまで以上にプラットフォームを信頼するだろうと認識しています。

GraalVM 19.0は、商用利用に推奨する現在の安定版リリースです。少なくとも四半期に1回のペースで、GraalVM 19.1、19.2といった感じでアップデート・リリースを出していく予定です。これらのアップデートにはバグ修正、安定化、性能改善などが含まれますが、メジャーな新機能は含まれません。One-offパッチは必要に応じてリリースしますが、そのバージョンは19.x.1、19.x.2といった具合になります。

同時に、GraalVMの限界を押し広げるために、マンスリーでベータリリースを出す予定です。これにはメジャーな新機能や、新たなプラットフォームのサポートの追加などが予定されています。例えば、エコシステムへの追従と、定期的なプラットフォームのアップデートバージョンに対応したリリースを予定しています。JDK 11ベースのビルドだけでなく、Node.js 12ベースのビルドも計画中です。

ベータリリースは”20.0-betaN”として表現します(Nは増分値)。このベータリリースに含まれる新機能などは、来年リリース予定の次回の安定版リリースであるGraalVM 20.0に含まれる予定です。

Community

日々コミュニティでのGraalVMへの関心が増えていることを認識しており、どんな種類の貢献にも感謝しています。コミュニティとの関わりやプロジェクト全体のガバナンスをさらに改善するために、定期的なcommunity callを実施します。community callの議題は、graalvm-devメーリングリストのメッセージ、GitHubのIssue、もしくはハッシュタグ#GraalVMCommunityのついたTweetに基づきます。つまり、最もいいねが付いたTweetが議題にのるはずです。

graalvm-dev mailing list
https://oss.oracle.com/mailman/listinfo/graalvm-dev

GraalVM Committer Workshopを定期的に開催する予定です。第1回目はCode Oneで実施する予定です。詳細はgraalvm-devメーリングリストで発表します。

我々はGraalVM がエコシステムにもたらす価値を理解しており、さまざまなコントリビュータからの参加を促し、関係者全員にとって最高のバージョンになるように進化していく、素晴らしいオープンソースプロジェクトにしたいと考えています。

Enterprise

GraalVM 19.0 Community Editionのリリースに加えて、GraalVM 19.0 Enterprise EditionもOracleから入手可能です。Enterprise Editionはパフォーマンスを向上させるためのさらに多くのオプションを提供し、商用サポートが付属しています。Enterprise Editionに関する公式ブログ記事は以下からご覧ください。

For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition
https://blogs.oracle.com/graalvm/announcement

私たちはGraalVMのすべてのエディションを改良することを約束し、当該製品に対し、サポート対象の商用製品があるというのは、エコシステム全体に価値を付加するものと信じています。これは、企業に対して安定した長期的なサポートを有する製品という選択肢を提供し、今後のコア開発のための資金集めにも有用です。

Outlook

GraalVMチームは、GraalVMをすべてのサポート対象言語に対してクラス最高のランタイムにすることを目指しています。これは野心的な目標であり、時間がかかりますが、GraalVMは現在本番環境で使用でき、多くのシナリオで利点があることがわかっています。我々自身もJavaデプロイメントにGraalVMを使っていますし、TwitterはScalaマイクロサービスをスピードアップするために使っています。GoldmanSachsエンジニアリングチームはGraalVMへの内部プログラミング言語の移行を評価しています。

One VM to Rule Them All? Lessons Learned with Truffle and Graal

WixエンジニアリングチームはJavaとNode.jsのPolyglotアプリケーションを使った実験をしていますし、また軽量なNative Clojureもあります。

clojureD 2019: “Native Clojure with GraalVM” by Jan Stępień

GraalVMを使用するプロジェクトや企業が増えていることは承知しています。そうしたお話をパブリックに伺えることを期待しています。

ぜひGraalVMをダウンロードして開発してください!