GraalVM in 2022: a year in review

原文はこちら。
The original article was written by Alina Yurenko (Developer Advocate for GraalVM, Oracle Labs).
https://medium.com/graalvm/graalvm-in-2022-a-year-in-review-57679af9c55e

2022年はGraalVMプロジェクトとコミュニティにとって非常に生産的な年でした。協同して多くの新機能を開発し、最新のJavaバージョンと新しいプラットフォームのためにGraalVMをリリースし、GraalVMのいくつかの新しい興味深いユースケースを目にしました。

それでは今年のハイライトを見てみましょう。

Aligning GraalVM with OpenJDK

まずは今年のJavaOneで、GraalVMのJava技術の該当部分をOpenJDKに提供することを発表しました。

OpenJDK Announcement
https://graalvm.org/2022/openjdk-announcement/

これにより、OpenJDKの開発プロセスとより密接に連携し、リリース・スケジュールや機能、ライセンスなどを調整することで、ユーザーやパートナーにGraalVMの採用を促進することができるようになります。実用的な成果の1つは、GraalVMが年に2回の機能リリース、4回のCPUリリース、2年ごとのLTSリリースを行うことでしょう。

この方向性の次のステップの一つとして、Java関連のGraalVMの技術をOpenJDKに貢献することを目的としたProject Galahadが導入されました。

Call for Discussion: New Project: Galahad
https://mail.openjdk.org/pipermail/discuss/2022-December/006164.html

リリースサイクルの変更とProject Galahadに関する詳細は以下のブログエントリをご覧ください。

GraalVM, Galahad, and a New Release Schedule
https://medium.com/graalvm/graalvm-galahad-and-a-new-release-schedule-d081d1031bba
https://logico-jp.io/2022/12/28/graalvm-galahad-and-a-new-release-schedule/

Supporting the latest JDK versions

22.3リリースでは、GraalVMは最新のJavaバージョン19のビルドを提供しています。そのため、最新のJavaとGraalVMの機能を一緒に利用できます。これはつまり、例えば、GraalVMでProject Loomの仮想スレッドを使用したり(--enable-previewを渡してサポートの有効化をお忘れ無く)、jwebserverを使用したり、Native Imageでこれらのアプリケーションをコンパイルすることさえできるのです。

Faster, lighter, and more user-friendly Native Image builds

Native Imageは、コード解析とコンパイルのオーバーヘッドをビルド時に移し、高速起動とメモリ節約を可能にしますが、ビルド時間とリソースの増加という代償を伴います。私たちは、過去数回のリリースで、これらの要件を減らすために取り組んできました。現在、GraalVM 22.3 JDK19では、例えば私のごく標準的なマシン(16GB Macbook Pro)で、HelloWorldはわずか16.2秒でネイティブコンパイルが完了し、それなりのサイズのMicronautウェブアプリケーションは1m26秒でコンパイルされます🎉。

Building a HelloWorld Java application with GraalVM 22.3 and new build output

数多の要望により、ビルドプロセスも軽量化されました。GraalVM 22.2 以降、Native Imageはたった2 GBのJavaヒープで多くの大きなネイティブ実行ファイルを正常にビルドできるようになりました。これは、DockerコンテナやGitHub Actionsのようなメモリに制約のある環境では特に有益です。

私たちが知っている新しいNative Image Build Output (ビルド出力) は、ビルドプロセスを段階に分けて、それに関する有用な統計を共有するもので、これも今年のGraalVM 22.0で初めて導入されました。

Native Image Build Output
https://graalvm.org/22.3/reference-manual/native-image/overview/BuildOutput/

GraalVM Reachability Metadata Repository

ビルドプロセス中、Native Imageはアプリケーションのメインエントリーポイントから到達可能なコードのみをコンパイルします。Native Imageが到達不可能と判断した要素をビルド対象に含めるには、Native Imageにメタデータ(構成情報)を提供する必要があります。このメタデータは、ライブラリやフレームワークが自動的に提供する、もしくはトレースエージェントの助けを借りて手動作成します。

Assisted Configuration with Tracing Agent
https://graalvm.org/22.0/reference-manual/native-image/Agent/

このタスクをさらに簡素化するために、今年初め、GraalVM Reachability Metadata Repository(ネイティブ・イメージのためのメタデータを共有し再利用するためのコミュニティのための一元的リポジトリ)を導入しました。

Repository which contains community-driven collection of GraalVM reachability metadata for open-source libraries.
https://github.com/oracle/graalvm-reachability-metadata

コミュニティと一緒にこのリポジトリに積極的に取り組んでいます。現時点では、Hibernate、Tomcat、Testcontainers、様々なデータベースコネクタなど、30以上のよく使われるプロジェクトのメタデータが含まれています。

reachability repositoryを使い始める方法と、reachability repositoryへの貢献方法については、関連するブログエントリをご覧ください。

Enhancing 3rd-Party Library Support in GraalVM Native Image with Shared Metadata
https://medium.com/graalvm/enhancing-3rd-party-library-support-in-graalvm-native-image-with-shared-metadata-9eeae1651da4
https://logico-jp.io/2022/07/29/enhancing-3rd-party-library-support-in-graalvm-native-image-with-shared-metadata/

GitHub Action for GraalVM

GraalVM (CommunityおよびEnterprise)、Native Image、Truffle言語とツールを簡単にセットアップして使用できるGitHub Action for GraalVMもリリースしました。現在、600以上のプロジェクトで使用されています(2023/01/08現在704プロジェクトで利用されています)。

GitHub Action for GraalVM
https://github.com/marketplace/actions/github-action-for-graalvm
Network Dependents
https://github.com/graalvm/setup-graalvm/network/dependents

New Compiler Optimizations

JITコンパイルならびにAOTコンパイルの両方にメリットのあるコンパイラの最適化をいくつか追加してきました。以下はその一例です。

ループローテーション最適化https://medium.com/graalvm/graalvm-22-0-is-here-c7acc82a8c2e#d9a0
https://logico-jp.io/2022/01/26/graalvm-22-0-is-here/#d9a0
加算ループのための新しいストリップマイニングの最適化https://medium.com/graalvm/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more-cb34b5b68ec0#408a
https://logico-jp.io/2022/07/27/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more/#408a
整数のmin/max演算のループベクトル化https://medium.com/graalvm/graalvm-22-3-is-here-jdk-19-builds-jlink-support-new-monitoring-features-and-more-f6e2b2eeff95#677e
https://logico-jp.io/2022/10/27/graalvm-22-3-is-here-jdk-19-builds-jlink-support-new-monitoring-features-and-more/#677e
コンパイル・パイプライン初期における、固定ノードに対するグローバルな値のナンバリングhttps://medium.com/graalvm/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more-cb34b5b68ec0#8f41
https://logico-jp.io/2022/07/27/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more/#8f41
Native Imageにおける型切り替えのパフォーマンス向上https://medium.com/graalvm/graalvm-22-0-is-here-c7acc82a8c2e#d4bb
https://logico-jp.io/2022/01/26/graalvm-22-0-is-here/#d4bb
(アプリケーションが安定状態に到達したら、不使用のメモリをシステムに解放することで)JITモードでのメモリ使用量削減https://medium.com/graalvm/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more-cb34b5b68ec0#0a30
https://logico-jp.io/2022/07/27/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more/#0a30

Native Build Tools

Native ImageのためのGraalVMのMavenとGradleプラグインであるNative Build Toolsは、いくつかの機能と改善、特にreachability metadata repositoryとの統合を追加し、Gradleにおけるエージェントのサポートを完全に作り直しました。

Native Build Tools
https://graalvm.github.io/native-build-tools/latest/index.html

Native Build Toolsは、reachability metadata repositoryを使いNative Imageのメタデータの自動検出もサポートしています。これは、pom.xmlbuild.gradleでアクセスを有効にするだけで利用できます。

GraalVM on Apple Silicon 🚀

このプラットフォーム向けのビルドは、GitHubリポジトリに寄せられたものの中で最も多かったものの一つでした。そのため、現在利用頂けるようになっていることをを嬉しく思っています。

Support for Apple M1 (darwin-aarch64) #2666
https://github.com/oracle/graal/issues/2666

Apple Siliconユーザーは、JDK、Native Image、GraalVM言語とツールなど、GraalVMコンポーネントをすべて使用できますし、高速にコンパイルできます。

Building Native Images with GraalVM and Spring Native on Apple’s M1 Architecture
https://spring.io/blog/2022/03/23/building-native-images-with-graalvm-and-spring-native-on-apple-s-m1-architecture

Developer experience improvements

この一年を通して、Native Imageやその他のGraalVMコンポーネントの開発者体験に対する改良も多く実施しました。

最新の主要なNative Image機能とオプションの概要については、Native Imageクイックリファレンスを参照してください。

Native Image Quick Reference v2.
https://medium.com/graalvm/native-image-quick-reference-v2-332cf453d1bc
https://logico-jp.io/2022/11/18/native-image-quick-reference-v2/

GraalPy 🐍

名前を短くしただけでなく、デフォルトで新しいバイトコードインタープリタに切り替えて非常に高速な起動と優れたインタープリタ性能を実現するため、GraalVM Pythonランタイムの起動時間を改善しました。さらにnumpyscikit-learnpyexpatkiwipdbprofilepytestなどのいくつかのパッケージに対するサポートを追加・拡張しました。

frozenモジュールの追加
https://medium.com/graalvm/graalvm-22-1-developer-experience-improvements-apple-silicon-builds-and-more-b7ac9a0f6066#7876
https://logico-jp.io/2022/04/29/graalvm-22-1-developer-experience-improvements-apple-silicon-builds-and-more/#7876
GraalPython: faster startup and extended library support
https://medium.com/graalvm/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more-cb34b5b68ec0#96ea
https://logico-jp.io/2022/07/27/graalvm-22-2-smaller-jdk-size-improved-memory-usage-better-library-support-and-more/#96ea

GraalPyがFlaskをサポートしました。Flaskは、開発サーバーやデバッガー、ユニットテストのサポート、拡張機能などの機能を持つ、マイクロウェブフレームワークです。

GraalPy running a Flask server

また、Oracle CloudWorldのRaspberry Piスーパーコンピュータでは、GraalPyを使用してPythonコードを8倍高速に実行しました。

The Raspberry Pi Super Computer at Java One 2022
https://medium.com/oracledevs/the-raspberry-pi-super-computer-in-devnucleus-at-cloud-world-2022-2d24208d1712

新しいAPI、Pythonのバージョンや実装を超えたバイナリ互換性、そして進化可能性をもたらす、Pythonの新しいC APIであるHPyにも積極的に貢献しました。

HPy – A better C API for Python
https://hpyproject.org

例として、MatplotlibをC APIからHPyへのポーティングに関するエントリをご覧ください。

Porting Matplotlib from C API to HPy
https://medium.com/graalvm/porting-matplotlib-from-c-api-to-hpy-aa32faa1f0b5
https://logico-jp.io/2022/10/02/porting-matplotlib-from-c-api-to-hpy/

2023年のGraalPyからのさらなるエキサイティングなアップデートにご期待ください。

Community and Ecosystem

GraalVMはオープンソースのプロジェクトであり、プロジェクトに積極的に参加し、貢献し、フィードバックを共有し、GraalVMの改善を助けてくれる素晴らしいコミュニティがあることに感謝しています。

9月には、チューリッヒで第2回GraalVMコミュニティ・ワークショップを開催しました。コミュニティ・メンバーやパートナーとともに、プロジェクトのロードマップやガバナンス、最近および今後の機能、Native Image、Truffle、GraalVM言語とのライブラリの互換性向上など、いくつかの重要なトピックについて議論しました。参加者の皆様から頂いたフィードバックに感謝し、毎年このようなミートアップを開催していく予定です。

GraalVM Community Meetup in Zurich

GitHubにGraalVMの公開ロードマップを追加しました。ここから現在取り組んでいること、そして今後のリリースで期待できることを一箇所で確認できます。ロードマップはこちらでご確認ください。

GraalVM Community Roadmap
https://github.com/orgs/oracle/projects/6

GraalVM Community Roadmap


GraalVM Native ImageをサポートしたSpring Boot 3.0の一般提供が始まりました!🎉 このリリースは、Native Imageをフルサポートした最初のSpring Bootです。使うにあたっては、Spring InitializrでGraalVM Native Supportを依存関係として追加するだけです。

Spring Initializr
https://start.spring.io/

Spring Framework 6.0とSpring Boot 3.0におけるAOTとNativeのアップデートについては、Stéphane NicollとBrian Clozelによるプレゼンテーションをご覧ください。

Micronautは、JITとNative Imageの両モードで、外部の依存関係(例えばTestcontainers経由)に対して簡単にテストできるTest Resourcesを追加しました。

Introducing Micronaut Test Resources
https://melix.github.io/blog/2022/08/micronaut-test-resources.html

Helidonチームは、仮想スレッドベースのマイクロサービスフレームワークである Helidon Nimaを発表しました。これはNative Imageでも動作します。ぜひお試し下さい。

Helidon Níma Example – Loom based webserver
https://github.com/tomas-langer/helidon-nima-example

Red Hat は、Quarkus のいくつかの新しいバージョンをリリースして最新の GraalVMリリースをサポートしています。そしてNative Imageでのデバッグとモニタリングに対して貢献してくださいました。

また、JUnit 5.9.1では、GraalVMでビルドされたネイティブ実行ファイルをテストするため、新たにEnabledInNativeImageDisabledInNativeImageのアノテーションが追加されています。

JUnit 5 Release Notes
https://junit.org/junit5/docs/snapshot/release-notes/#release-notes-5.9.1

また、GraalVMの新しい興味深い使用例もいくつか出てきました。

Disney Streaming超高速なServerless JavaのためにGraalVMとMicronautを利用Improving Developer Productivity at Disney with Serverless and Open Source
https://aws.amazon.com/blogs/opensource/improving-developer-productivity-at-disney-with-serverless-and-open-source/
AdyenGraalVMを使い、Java空間でC/C++のコードを安全に実行GraalVM: running C/C++ application safely in the Java world
https://adyen.com/blog/graalvm-running-c-applications–in-the-cloud
クラウドベンダークラウドベンダーがライブラリやSDKでのNative Imageのサポートを提供OCI SDK for Java
https://blogs.oracle.com/cloud-infrastructure/post/announcing-oci-java-sdk-300
Azure
Azure GraalVM Netty Support client library for Java
https://learn.microsoft.com/java/api/overview/azure/aot-graalvm-support-netty-readme?view=azure-java-preview
Setting up a GraalVM Native Image project for the Amazon SDK for Java – Amazon SDK for Java 2.x
https://docs.amazonaws.cn/en_us/sdk-for-java/latest/developer-guide/setup-project-graalvm.html
Enables GraalVM Native Image support for Google Cloud Java Client Libraries.
https://github.com/GoogleCloudPlatform/native-image-support-java
OCIGraalVM Enterpriseを直接Oracle Cloud DevOpsビルドパイプラインやOCI Code Editor、Cloud Shellで利用可能directly in OracleCloud DevOps build pipelines
https://blogs.oracle.com/java/post/announcing-graalvm-enterprise-in-oci-devops
OCI Code Editor and Cloud Shell
https://blogs.oracle.com/java/post/announcement-of-graalvm-enterprise-in-oracle-cloud-infrastructure-code-editor-and-cloud-shell
JHipsterjhipster-nativeブループリントを新規追加し、GraalVMのおかげで非常に高速で完全なWebアプリケーションを簡単に起動できるようにしました。
jhipster-nativeブループリントはSpring Bootを使っているが、JHpisterとGraalVMでMicronautやQuarkusを利用可)
Introducing Spring Native for JHipster: Serverless Full-Stack Made Easy
https://developer.okta.com/blog/2022/03/03/spring-native-jhipster
HPI
(The Hasso Plattner Institute at the University of Potsdam, Germany)
HPIの学生が、GraalVMを使って Minecraftサーバーをネイティブコンパイルしました。Native Minecraft Servers with GraalVM Native Image
https://medium.com/graalvm/native-minecraft-servers-with-graalvm-native-image-1a3f6a92eb48
StepstoneGraalVM WASMを使ってJavaにDoomを組み込みましたPoC of running Doom on top of GraalVM
https://github.com/stepstone-tech/doom-graalvm
Iris project深層学習ワークロードの高速化にGraalVMを利用Groovy: Classifying Iris Flowers with Deep Learning, Groovy and GraalVM
https://blogs.apache.org/groovy/entry/classifying-iris-flowers-with-deep
BabashkaClojureコミュニティのMichiel Borkentが、Clojureの高速スクリプト環境を構築するためにNative Imageを使用した経験を紹介しましたBabashka: How GraalVM Helped Create a Fast-Starting Scripting Environment for Clojure
https://medium.com/graalvm/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure-b0fcc38b0746
https://logico-jp.io/2023/01/07/babashka-how-graalvm-helped-create-a-fast-starting-scripting-environment-for-clojure/
Grabbit — the new GraalVM mascot

GraalVMコミュニティに、独自のマスコットができました。2023年にはGrabbitをもっとご覧になることでしょう!🐰

みんなのためにGraalVMを改善のための手助けになるあらゆる貢献とフィードバックに対して、コミュニティに感謝しています。

残念ながら、今年は悲しいニュースなしには終わりませんでした。GraalVMおよびRubyコミュニティは、TruffleRubyを立ち上げ、Oracle Labsで何年も一緒に働いていたChris Seatonを失いました。

Chris Seaton
https://chrisseaton.com/
A high performance implementation of the Ruby programming language, built on GraalVM
https://github.com/oracle/truffleruby/

彼はその後も知識を共有し、ShopifyでTruffleRubyに取り組む際にもコミュニティのメンバーを助けてくれました。Chrisのご家族とご友人に深い哀悼の意を表します。

See you in 2023!🎄

すでに、2023年に皆様にご覧いただけるような新しいエキサイティングな機能の開発に取り組んでいます。フィードバックや提案がありましたら、Slack、GitHub、Twitter、Mastodonでお気軽にシェアしてください(そして何より、私たちの開発者アンケートにご協力ください!)。

Slack invitation
https://www.graalvm.org/slack-invitation
GitHub Issues
https://github.com/oracle/graal
Twitter
https://twitter.com/graalvm
Mastodon
https://mastodon.online/@graalvm

GraalVM Community Survey FIN
https://graalvm.typeform.com/to/mbVLI58l

素晴らしいGraalVMコミュニティの一員であることに感謝しています。Happy holidays!2023年にお会いしましょう!

— GraalVM team

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中