Graalvmを触ってみてハマった事など
Graalvmとは
GraalVMは、JavaScript、Python、Ruby、R、Java、Scala、Kotlin、ClojureなどのJVMベースの言語、およびCやC ++などのLLVMベースの言語で作成されたアプリケーションを実行するためのユニバーサル仮想マシンです。
GraalVMはプログラミング言語間の分離を取り除き、共有ランタイムでの相互運用性を可能にします。スタンドアロンでも、OpenJDK、Node.js、Oracle Database、またはMySQLのコンテキストでも実行できます。
公式の翻訳まんまだけど。
公式からは代表的な機能として
- Polyglot
- Native
- Embeddable
とかあったのだけど今回Nativeを触る
native-imageを触ってみた
Nativeを触る前に
意外と知らないJITコンパイラとAOTコンパイラの違いは読んでおくといい
通常scalaなどはJITコンパイラ
生成物が中間ファイルでjavaに任せて実行する。
AOTコンパイラ
だとOSに依存した実行ファイルを生成する。
OS側にはjavaは不要になり実行ファイルのみで起動が可能になる。
環境構築など
ScalaをGraalVMで動かす&ネイティブイメージ化する主にここを参考にできるので
省略
ただnative-image
などは追加でインストールする必要に変わったので
その当たりは公式を参考に下記みたいに追加する必要がある。
$ $GRAALVM_HOME/bin/gu install native-image
また今回はコマンドラインだったけど、brew search graalvm
だと
brew search graalvm
No formula or cask found for "graalvm".
Closed pull requests:
Add GraalVM Community Edition 1.0.0 RC12 (https://github.com/Homebrew/homebrew-cask/pull/58492)
Add GraalVM v1.0.0-rc10 (https://github.com/Homebrew/homebrew-cask/pull/57374)
な感じなんでupdateとかすればbrewでインストールは可能になりそう
scalaをnative化
DB接続系のライブラリなどを使うとリフレクション周りで落ちた
制約事項LIMITATIONS.mdに記載されているので確認すると良い。
後で知ったがGraalVM の native image を使って Java で爆速 Lambda の夢を見るこちらに上がってる記事でリフレクション周りの設定は少し解決できるっぽい
感想
まだscalaでしかやってなかったがnodeなどもちょっと試してみたい。
またnative以外ももうちょっと理解はしていきたいと思う