GraalVMがデフォルトで同梱しているJavaScript実装を使ってみよう。(少なくとも現時点では)。6でのスクリプティングAPIの導入時から存在していた。8でのNashornの到来で大きく強化された。これはinvokedynamicベースのJavaScript実装だった。GraalVMの技術が違うところは、今のエコシステムに明示的に複数の言語実装用のSDKやサポートツールがあるということだ。下層のVM上でそれらの言語を同等で相互運用可能なものとして実行できる。この手法を進めるキーはTruffleと呼ばれるコンポーネントと、シンプルで必要最小限なJVMバイトコードを実行する機能を持つVM、SubstrateVMである。Truffleは新しい言語実装用にSDKとツールを提供する。一般的な方法は以下のようなものである。言語の文法から始める。(たとえばCoco/R)。Mavenを使ってインタプリタと単純な言語ランタイムを構築する。構築された言語実装をGraalVM上で実行する。Graalがこの新言語のパフォーマンスを自動的に向上させ始めるまで待機する。AOTモードでGraalを使いインタプリタをネイティブランチャにコンパイルする。追加の設定なくGraalVMはJVMバイトコードとJavaScript、LLVMをサポートする。他言語を呼び出してみよう。Rubyならこうなる。Ruby\"");するとGraalVMは実行時例外をスローする。TruffleバージョンのRubyを使うには、ダウンロードしてインストールする必要がある。(すぐにRC2となるだろうが)、次のようにする。org.graalvm.rubyGraalVMを複数ユーザに対する標準の$JAVA_HOMEとしてシステム全体にインストールする場合はsudoが必要となることに注意してほしい。使う場合、もう1ステップ必要だ。Truffleインタプリタをネイティブコードに変換しよう。言語用に再ビルドするとパフォーマンスが改善されるが、これにはコマンドラインツールを使う必要がある。(GraalVMをシステム全体にインストールしたと仮定しているので、ルート権限が必要だ)。rubyこれはまだ開発中のためいくつか手作業があるが、開発チームは徐々にこの手順をスムーズにしたいと考えている。ネイティブコンポーネントの再ビルドで何か問題に遭遇しても、心配ない。ネイティブイメージの再ビルドがなくても依然として動作はする。polyglotコーディングのもっと複雑な例を見てみよう。+'!');");jsFunc.execute(rubySays);このコードはやや読みづらいが、TruffleRubyとJavaScriptの両方を使っている。初めにRubyコードを少し呼び出している。HelloWorld.newhi.hello("Ruby")これは新しくRubyのクラスを定義し、そこにメソッドを定義し、Rubyオブジェクトをインスタンス化して、そのhello()メソッドを呼び出す。この文字列を強制的にJavaランタイムにおけるJavaの文字列にする。JavaScriptの単純な無名関数を作る。+'!');この関数をexecute()を通じて呼び出し、Rubyの呼び出し結果を関数に渡す。関数はJSランタイム内から出力をする。Contextオブジェクトを生成する際に、Contextへのアクセスを拡大する許可が必要なことに注意してほしい。これはRuby向けで、JSでは必要なかったので、セットアップがより複雑な構造になっている。これは現在のRuby実装の限界で、将来的には取り除かれるかもしれない。polyglotの最後の例を見てみよう。こんなことができる所まで来たのだ。+'!');");jsFunc.execute(sayHello);このバージョンでは実際のRubyオブジェクトを返しており、Stringではない。それだけでなく、いかなるJavaの型にも強制的に変換していない。代わりにJS関数にそのまま渡している。+'!');これは動作するし、期待したとおり出力する。シームレスな型変換で呼び出せるということを意味する。JVMエンジニアの間で議論されていた。GraalVMの出現でメインストリームに向けて重要な一歩を踏み出したのだ。これらの外部オブジェクトがGraalVMでどのように表現されるのか簡単に見てみよう。このちょっとしたJSを使い、渡されたRubyオブジェクトを単に出力するようにする。(もしくは似たようなものになる)。...}!外部オブジェクトはDynamicObjectオブジェクトの袋詰めとして表現されていることを示している。してセマンティックな操作を移譲し、多くの場合そのオブジェクトのホームのランタイムに戻す。この記事を締めくくるには、ベンチマークとライセンスについて一言述べておくべきだ。GraalとGraalVMは大きな望みだが、現時点ではまだ初期ステージ/実験的技術であるとはっきりと理解しておかなければならない。汎用的なユースケース向けに最適化や本番対応がされておらずHotSpot/C2と同等になるまでには時間がかかるだろう。マイクロベンチマークは誤解を招くこともよくある。ある状況下での方法を示すことはできるが、結局本番アプリケーション全体に対するユーザレベルのベンチマークだけがパフォーマンス解析には重要である。これについて考える方法の1つは、C2が本質的にパフォーマンスの局所的最大化であり設計ライフタイムの終わりにあるということだ。Graalは私たちに局所的最大化から抜け出し新たなよりよい領域へ移る、そしてその途中で私たちがVM設計やコンパイラについて知っていると思っている多くのことを潜在的に書き直す機会を与えてくれる。成熟していない技術である。今後数年で完全にメインストリームとなる可能性は極めて低い。ゆえに今日行われているパフォーマンステストはすべて細心の注意を持って解析すべきである、ということだ。りんごとオレンジを比べるようなことだ。成熟し、本番品質のランタイム対超初期ステージの実験的ランタイムとなる。GraalVMのライセンス形態が今まで見たどんなものとも異なるだろう、ということを指摘する必要もある。オラクルがサンを買収したとき、彼らはすでに存在する、とても成熟したプロダクトとしてHotSpotを手に入れた。これはフリーソフトウェアとしてライセンスされていた。HotSpotのコアプロダクト上に付加価値を与え収益化しようとする、わずかな試みもあった。UnlockCommercialFeaturesスイッチだ。このモデルは大きな商業的成功ではなかったと言える。オラクルの研究プロジェクトとして生涯を始めて、今は本番対応の製品へと進んでいる。オラクルはGraalを現実にするために多額を投資してきた。このプロジェクトで必要とされる個人やチームは不足しており、まったく安価ではない。異なる根本的技術をベースにしているので、オラクルはHotSpotと異なる商業モデルを利用するのは自由で、より幅広い顧客に渡ってGraalVMを収益化しようと試みれる。そこには現在HotSpotランタイムに対して支払いをしていない人も含まれる。Cloud上で実行している顧客だけが利用できるようにすることさえ可能だ。両方のバージョンともオラクルのGraalVMのサイトからダウンロードでき、より詳細な情報もそこにある。Evans氏はJVMパフォーマンスの最適化をする企業であるjClarity社の共同設立者である。Committeeのメンバである。Java"の著者である。彼はJavaプラットフォームやパフォーマンス、アーキテクチャ、並列性、スタートアップなどのトピックに関するスピーカーとして常連である。Ben氏は講演や研修、執筆、コンサルタントといった仕事をする時間もあるので、詳細については連絡してほしい。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。