Έκδοση 19.3.0 της εικονικής μηχανής GraalVM και υλοποιήσεις Python, JavaScript, Ruby και R που βασίζονται σε αυτήν

Oracle Company опубликовала κυκλοφορία μιας παγκόσμιας εικονικής μηχανής GraalVM 19.3.0, το οποίο υποστηρίζει εφαρμογές σε JavaScript (Node.js), Python, Ruby, R, οποιεσδήποτε γλώσσες για το JVM (Java, Scala, Clojure, Kotlin) και γλώσσες για τις οποίες μπορεί να δημιουργηθεί bitcode LLVM (C, C++ , Σκουριά). Το υποκατάστημα 19.3 ταξινομείται ως έκδοση Long Term Support (LTS) και αξιοσημείωτος υποστήριξη JDK 11, συμπεριλαμβανομένης της δυνατότητας μεταγλώττισης κώδικα Java σε εκτελέσιμα αρχεία (GraalVM Native Image). Κωδικός έργου διανέμονται από άδεια σύμφωνα με το GPLv2. Ταυτόχρονα, κυκλοφόρησαν νέες εκδόσεις των υλοποιήσεων γλώσσας Python, JavaScript, Ruby και R χρησιμοποιώντας GraalVM - GraalPython, GraalJS, Τρούφα Ρούμπι и FastR.

GraalVM παρέχει Ένας μεταγλωττιστής JIT που μπορεί να εκτελέσει κώδικα από οποιαδήποτε γλώσσα δέσμης ενεργειών στο JVM, συμπεριλαμβανομένων των JavaScript, Ruby, Python και R, και επίσης καθιστά δυνατή την εκτέλεση εγγενούς κώδικα στο JVM που έχει μετατραπεί σε bitcode LLVM. Τα εργαλεία που παρέχει η GraalVM περιλαμβάνουν έναν ανεξάρτητο από τη γλώσσα εντοπισμό σφαλμάτων, ένα σύστημα δημιουργίας προφίλ και έναν αναλυτή εκχώρησης μνήμης. Το GraalVM καθιστά δυνατή τη δημιουργία συνδυασμένων εφαρμογών με στοιχεία σε διαφορετικές γλώσσες, επιτρέποντάς σας να έχετε πρόσβαση σε αντικείμενα και πίνακες από κώδικα σε άλλες γλώσσες. Για γλώσσες που βασίζονται σε JVM υπάρχει ευκαιρία δημιουργία εκτελέσιμων αρχείων μεταγλωττισμένων σε κώδικα μηχανής που μπορούν να εκτελεστούν απευθείας με ελάχιστη κατανάλωση μνήμης (η διαχείριση της μνήμης και του νήματος υλοποιείται μέσω της σύνδεσης του πλαισίου Υπόστρωμα VM).

Αλλαγές στο GraalJS:

  • Εξασφαλίζεται η συμβατότητα με το Node.js 12.10.0.
  • Οι μη τυπικές καθολικές ιδιότητες και λειτουργίες είναι απενεργοποιημένες από προεπιλογή:
    καθολική (αντικαταστάθηκε από globalThis, ρύθμιση js.global-property για επιστροφή), απόδοση (js.performance), print και printErr (js.print);

  • Εφαρμόστηκε το Promise.allΚαταλυτική και μηδενική πρόταση συγχώνευσης, τα οποία είναι διαθέσιμα σε λειτουργία ECMAScript 2020 (“-js.ecmascript-version=2020”).
  • Ενημερώθηκαν οι εξαρτήσεις ICU4J σε 64.2, ASM σε 7.1.

Αλλαγές στο GraalPython:

  • Προστέθηκαν στελέχη gc.{enable,disable,isenabled}, υλοποιήθηκαν charmap_build, sys.hexversion και _lzma;
  • Ενημερώθηκε η τυπική βιβλιοθήκη Python 3.7.8.
  • Προστέθηκε υποστήριξη για NumPy 1.16.4 και Pandas 0.25.0.
  • Προστέθηκε υποστήριξη timeit.
  • Το socket.socket έχει τεθεί σε κατάσταση που σας επιτρέπει να εκτελείτε "graalpython -m http.server" και να φορτώνετε μη κρυπτογραφημένους (χωρίς TLS) πόρους http.
  • Διορθώθηκαν προβλήματα με την εμφάνιση αντικειμένων panda.DataFrame.
    εσφαλμένη επεξεργασία των πλειάδων σε bytes.startswith,
    καταστροφική ανάθεση επαναλήψεων και χρήση dict.__contains__ για λεξικά.

  • Προστέθηκε υποστήριξη για το ast.PyCF_ONLY_AST, το οποίο επιτρέπεται βεβαιωθείτε ότι το pytest λειτουργεί.
  • Προστέθηκε υποστήριξη PEP 498 (παρεμβολή συμβολοσειρών σε κυριολεκτικά).
  • Εφαρμόστηκε τη σημαία "--python.EmulateJython" για εισαγωγή κλάσεων JVM χρησιμοποιώντας κανονική σύνταξη εισαγωγής Python και σύλληψη εξαιρέσεων JVM από τον κώδικα Python.
  • Βελτιωμένη απόδοση του αναλυτή, προσωρινή αποθήκευση εξαιρέσεων,
    πρόσβαση σε αντικείμενα Python από κώδικα JVM. Βελτιωμένα αποτελέσματα σε δοκιμές απόδοσης για κώδικα python και εγγενείς επεκτάσεις (η εκτέλεση εγγενών επεκτάσεων πάνω από το llvm σημαίνει ότι ο bitcode llvm μεταβιβάζεται στο GraalVM για μεταγλώττιση JIT).

Αλλαγές στο TruffleRuby:

  • Για τη μεταγλώττιση εγγενών επεκτάσεων, χρησιμοποιείται τώρα το ενσωματωμένο κιτ εργαλείων LLVM, δημιουργώντας τόσο εγγενή κώδικα όσο και bitcode. Αυτό σημαίνει ότι περισσότερες εγγενείς επεκτάσεις θα πρέπει να μεταγλωττίζονται εκτός πλαισίου, εξαλείφοντας τα περισσότερα προβλήματα σύνδεσης.
  • Ξεχωριστή εγκατάσταση LLVM για εγκατάσταση εγγενών επεκτάσεων στο TruffleRuby.
  • Η εγκατάσταση επεκτάσεων C++ στο TruffleRuby δεν απαιτεί πλέον εγκατάσταση libc++ και libc++abi.
  • Η άδεια ενημερώθηκε σε EPL 2.0/GPL 2.0/LGPL 2.1, όπως και το πρόσφατο JRuby.
  • Προστέθηκε υποστήριξη για προαιρετικά ορίσματα στο GC.stat.
  • Εφάρμοσε τη μέθοδο Kernel#load με wrapper και Kernel#spawn με :chdir;
  • Προστέθηκε rb_str_drop_bytes, το οποίο είναι υπέροχο επειδή το χρησιμοποιεί το OpenSSL.
  • Συμπεριλαμβάνονται επεκτάσεις προεγκατεστημένων πολύτιμων λίθων που χρειάζονται για ράγες νέες στο Rails 6.
  • Για τη σύνταξη εγγενών επεκτάσεων, χρησιμοποιούνται σημαίες, όπως στη μαγνητική τομογραφία.
  • Έχουν γίνει βελτιστοποιήσεις απόδοσης και έχει μειωθεί η κατανάλωση μνήμης.

Αλλαγές στο FastR:

  • Εξασφαλίζεται η συμβατότητα με το R 3.6.1.
  • Προστέθηκε προκαταρκτική υποστήριξη για την εκτέλεση εγγενών επεκτάσεων που βασίζονται στο LLVM. Κατά τη δημιουργία εγγενών πακέτων R, το FastR έχει ρυθμιστεί ώστε να χρησιμοποιεί τα ενσωματωμένα εργαλεία LLVM της GraalVM. Τα δυαδικά αρχεία που προκύπτουν θα περιέχουν τόσο εγγενή κώδικα όσο και bitcode LLVM.

    Τα προεγκατεστημένα πακέτα κατασκευάζονται επίσης με αυτόν τον τρόπο.
    Το FastR φορτώνει και εκτελεί τον εγγενή κώδικα επέκτασης από προεπιλογή, αλλά όταν εκκινηθεί με την επιλογή "--R.BackEnd=llvm", θα χρησιμοποιείται ο bitcode. Το backend LLVM μπορεί να χρησιμοποιηθεί επιλεκτικά για ορισμένα πακέτα R, προσδιορίζοντας "--R.BackEndLLVM=pkg1,pkg2". Εάν αντιμετωπίζετε προβλήματα με την εγκατάσταση πακέτων, μπορείτε να επαναφέρετε τα πάντα καλώντας το fastr.setToolchain("native") ή με μη αυτόματο τρόπο επεξεργασίας του αρχείου $FASTR_HOME/etc/Makeconf.

  • Σε αυτήν την έκδοση, το FastR αποστέλλεται χωρίς τις βιβλιοθήκες χρόνου εκτέλεσης του GCC.
  • Διορθώθηκαν οι διαρροές μνήμης.
  • Διορθώθηκαν προβλήματα κατά την εργασία με μεγάλα διανύσματα (>1 GB).
  • Υλοποιήθηκε το grepRaw, αλλά μόνο για fixed=T.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο