# GraalVM

ES4X 使用的是Graalvm,但同样的代码可用 Java8,9,10 及 OpenJ9 解释执行 或使用 JDK >=11 (支持 JVMCI) 和 GraalVM 编译执行

推荐使用GraalJS,因其提供支持 ES版本 >= 6的JS 及提供开箱即用的generators,promises等工具。

与Java交互需严格遵循Java中类/方法的名称。例如获取类的属性时,必需使用getter和setter。举个例子:

class Hello {
  private String name;
  
  public String getName() {
    return name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
}

当您在Graal中使用Java对象时,下面的代码将是无效的:

var hello = new Hello();
// get the name
var name = hello.name; // FAIL
// set the name
hello.name = 'Paulo';  // FAIL

在Graal中您应该这样写:

var hello = new Hello();
// get the name
var name = hello.getName();
// set the name
hello.setName('Paulo');

GraalJS 不允许多线程访问同一个脚本上下文。如果您需要多线程,请移步Worker API.

# Native Images

目前我们还不能生成ES4X的native镜像,这是因为AOT编译器做静态分析时无法触及那些被脚本调用的java代码(也就没办法获取到java类), 此外,编译器目前还不支持运行时的JVM互操作。

这方面的工作正在进行中,相信在不久的将来就会与大家见面。