# GraalVM
ES4X использует GraalVM, однако тот же код будет работать и в режиме интерпретации в Java 8, 9, 10 и OpenJ9.
Для JDK >= 11 (с поддержкой JVMCI support) или GraalVM ES4X работает в режиме компиляции.
TIP
Другими словами, используйте Java >= 11 или GraalVM, пожалуйста.
Использование GraalJS дает такие преимущества, как поддержка языка >=ES6, поддержка "из коробки" генераторов, Promise и т.д.
# Отличия от Nashorn
В отличие от Nashorn
, функциональная совместимость GraalJS
с Java требует точного имени класса/метода из Java.
Например, если для свойства name заданы геттеры и сеттеры, необходимо использовать геттеры и сеттеры:
class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Следующий подход не сработает при использовании Java объекта из Graal:
var hello = new Hello();
// получаем имя
var name = hello.name; // FAIL
// задаем имя
hello.name = 'Paulo'; // FAIL
Правильным будет следующий подход:
var hello = new Hello();
// получаем имя
var name = hello.getName();
// задаем имя
hello.setName('Paulo');
# Работа с потоками
GraalJS строго требует, чтобы с JS контекстом работал только один поток. В случае работы только с Asynchronous Vert.x
API никаких проблем быть не должно, но они могут быть при работе с иными библиотеками. Чтобы избежать этих ограничений,
рекомендуется использовать Worker
API или EventBus
.
WARNING
GraalJS не позволяет нескольким потокам получить доступ к одному и тому же контексту скрипта. Если перед вами возникла необходимость работы с несколькими потоками, рекомендуется ознакомиться с Worker API.
# Нативные исполняемые файлы
В данный момент вы не можете создавать нативные исполняемые файлы с ES4X, так как статический анализ AOT-компилятора не будет учитывать Java-код, вызванный из скрипта (а потому эти классы не будут доступны), а также потому что компилятор в данный момент не поддерживает функциональную совместимость с JVM во время выполнения.
В процессе дальнейшей разработки возможны какие-либо изменения в этой области в будущем.