ポリグロット・ネイティブ実行可能ファイル(JavaおよびJavaScript)のビルド

GraalVMポリグロットAPIを使用すると、Javaベースのホスト・アプリケーションにゲスト言語のコードを埋め込んで実行できます。GraalVMを使用すると、JavaScriptが埋め込まれたJavaアプリケーションも事前にコンパイルして、ポリグロット・ネイティブ実行可能ファイルを作成できます。詳細は、Javaホスト・アプリケーションからJavaScriptなどのゲスト言語と対話する方法に関する埋込みリファレンスを参照してください。

このガイドでは、Javaをホスト言語、JavaScriptをゲスト言語とするポリグロット・ネイティブ実行可能ファイルをビルドする方法を示します。

デモでは、このJSON Pretty Printer Javaアプリケーションを使用して、JSON形式で出力します:

import java.io.*;
import java.util.stream.*;
import org.graalvm.polyglot.*;

public class PrettyPrintJSON {
  public static void main(String[] args) throws java.io.IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String input = reader.lines()
    .collect(Collectors.joining(System.lineSeparator()));
    try (Context context = Context.create("js")) {
      Value parse = context.eval("js", "JSON.parse");
      Value stringify = context.eval("js", "JSON.stringify");
      Value result = stringify.execute(parse.execute(input), null, 2);
      System.out.println(result.asString());
    }
  }
} 
  1. GraalVM JDKがインストール済であることを確認します。最も簡単に始めるには、SDKMAN!を使用します。その他のインストール・オプションについては、「ダウンロード」セクションを参照してください。

  2. JavaScriptランタイムをインストールします:

     gu install js
    
  3. 前述のアプリケーションをPrettyPrintJSON.javaという名前のファイルに保存し、コンパイルします:

     javac PrettyPrintJSON.java
    
  4. JavaScriptの相互運用性を有効にして、ネイティブ実行可能ファイルをビルドします:

     native-image --language:js PrettyPrintJSON
    

    --language:js引数により、生成されたイメージでJavaScriptが使用可能になります実行可能ファイルをビルドするだけでなく、JavaScriptエンジンもプルするため、数分かかります。

    ノート: ポリグロット・ネイティブ実行可能ファイルをビルドする場合、Truffleフレームワークが含まれているため、より多くの物理メモリーが必要です。

  5. 生成された実行可能ファイルを実行し、いくつかの整形出力を実行します:

     ./prettyprintjson <<EOF
     {"GraalVM":{"description":"Language Abstraction Platform","supports":["combining languages","embedding languages","creating native images"],"languages": ["Java","JavaScript","Node.js", "Python", "Ruby","R","LLVM"]}}
     EOF
    

    予想される出力は次のとおりです。

     {
     "GraalVM": {
         "description": "Language Abstraction Platform",
         "supports": [
         "combining languages",
         "embedding languages",
         "creating native images"
         ],
         "languages": [
         "Java",
         "JavaScript",
         "Node.js",
         "Python",
         "Ruby",
         "R",
         "LLVM"
         ]
     }
     }
    

ネイティブ実行可能ファイル・バージョンは、JVMで同じアプリケーションを実行するよりも高速に実行されます。

ノート: GraalVMネイティブ・イメージによるJavaScriptサポートは、一般提供とみなされています。残りの言語サポートは試験段階です。