# GraalVM

Το ES4X χρησιμοποιεί GraalVM, ωστόσο, ο ίδιος κωδικός θα τρέξει είτε σε interpreted mode σε Java 8, 9, 10 ή OpenJ9.

Για JDK >= 11 (με υποστήριξη για JVMCI) ή GraalVM ES4X τρέχει σε compiled mode.

TIP

Χρησιμοποιήστε Java >= 11 ή GraalVM.

Υπάρχουν οφέλη από τη χρήση του GraalJS, δηλαδή την ενημερωμένη υποστήριξη γλώσσας >= ES6 και την υποστήριξη για generators, promises, etc....

# Διαφορές με Nashorn

Σε αντίθεση με το Nashorn, το GraalJS java ενδιάμεσο ακολουθεί το ακριβές class/method όνομα από την Java. Για παράδειγμα, η χρήση των ονομάτων των ιδιοτήτων για να αναφερθούν σε getters και setters, πρέπει να χρησιμοποιούν τους getter και setter. Για παράδειγμα:

class Hello {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Όταν χρησιμοποιείτε αυτό το αντικείμενο Java από το Graal, αυτό δεν θα λειτουργήσει:

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

Αυτό δεν ισχύει σε Graal και πρέπει να είναι:

var hello = new Hello();
// πάρτε το όνομα
var name = hello.getName();
// ορίστε το όνομα
hello.setName('Paulo');

# Threading

ο GraalJS είναι πολύ αυστηρό με μόνο ένα thread στο πλαίσιο JS κάθε φορά. Όταν εργάζεστε μόνο με ασύγχρονα API Vert.x, αυτό δεν θα είναι πρόβλημα. Ωστόσο, άλλες βιβλιοθήκες μπορεί να προκαλέσουν προβλήματα. Για να αποφύγετε αυτόν τον περιορισμό, συνιστάται να χρησιμοποιήσετε το API Worker ή το EventBus.

WARNING

Το GraalJS δεν επιτρέπει την πρόσβαση πολλαπλών threads στο ίδιο περιβάλλον σεναρίου. Εάν υπάρχει ανάγκη να δουλέψετε με πολλά thread, τότε σκεφτείτε να κοιτάξετε το Worker API.

# Εγγενείς εικόνες

Προς το παρόν δεν μπορείτε να δημιουργήσετε εγγενείς εικόνες με ES4X, ο περιορισμός είναι επειδή η στατική ανάλυση του μεταγλωττιστή AOT δεν θα λάβει υπόψη τον κώδικα java που επικαλέστηκε από το σενάριο (οπότε οι classes δεν θα είναι διαθέσιμες), καθώς και το γεγονός ότι ο compiler δεν έχει υποστήριξη για jvm interop στο χρόνο εκτέλεσης.

Υπάρχουν εργασίες σε εξέλιξη σε αυτόν τον τομέα, οπότε μπορεί να είναι δυνατή στο μέλλον.