SociĂ©tĂ© Oracle publication de la machine virtuelle universelle , prenant en charge lâexĂ©cution dâapplications en JavaScript (Node.js), Python, Ruby, R, ainsi que dans dâautres langages pour la JVM (Java, Scala, Clojure, Kotlin) et les langages pouvant gĂ©nĂ©rer du bytecode LLVM (C, C++, Rust). La branche 19.3 est classĂ©e comme une version avec un long cycle de support (LTS) et pour son support , y compris avec la possibilitĂ© de compiler du code Java en fichiers exĂ©cutables (GraalVM Native Image). Le code du projet est sous licence GPLv2. De nouvelles versions des implĂ©mentations des langages utilisant GraalVM pour Python, JavaScript, Ruby et R ont Ă©galement Ă©tĂ© publiĂ©es â , , et .
GraalVM un compilateur JIT capable d'exĂ©cuter Ă la volĂ©e dans la JVM du code provenant de divers langages de script, y compris JavaScript, Ruby, Python et R, et permettant aussi dâexĂ©cuter du code natif dans la JVM, transformĂ© en bytecode LLVM. Les outils fournis par GraalVM comprennent un dĂ©bogueur indĂ©pendant des langages, un systĂšme de profilage et un analyseur de distribution de mĂ©moire. GraalVM permet de crĂ©er des applications combinĂ©es avec des composants dans diffĂ©rents langages, permettant d'accĂ©der aux objets et tableaux depuis le code d'autres langages. Pour les langages basĂ©s sur la JVM, il existe la crĂ©ation de fichiers exĂ©cutables compilĂ©s en code machine, pouvant ĂȘtre exĂ©cutĂ©s directement avec une consommation mĂ©moire minimale (la gestion de la mĂ©moire et des threads est rĂ©alisĂ©e via le framework ).
:
- La compatibilité avec Node.js 12.10.0 a été assurée;
- Les propriétés et fonctions globales non standard sont désactivées par défaut :
global (remplacĂ© par globalThis, avec une option de configuration js.global-property pour le retour), performance (js.performance), print et printErr (js.print); - ImplĂ©mentation de Promise.allSettled et de la proposition de fusion nullish, disponibles en mode ECMAScript 2020 («âjs.ecmascript-version=2020»);
- Mises à jour des dépendances ICU4J à 64.2, ASM à 7.1.
dans GraalPython :
- Ajout de stubs gc.{enable,disable,isenabled}, implémentation de charmap_build, sys.hexversion et _lzma;
- Mise Ă jour de la bibliothĂšque standard Python 3.7.8;
- Ajout du support pour NumPy 1.16.4 et Pandas 0.25.0;
- Ajout du support pour timeit;
- socket.socket a été mis à jour pour permettre l'exécution de «graalpython -m http.server» et le chargement de ressources http non chiffrées (sans TLS);
- Correction des problÚmes liés à l'affichage des objets pandas.DataFrame,
Ă un traitement incorrect des tuples dans bytes.startswith,
à l'affectation destructrice des itérateurs et à l'utilisation de dict.__contains__ pour les dictionnaires; - Ajout du support de ast.PyCF_ONLY_AST, ce qui faire fonctionner pytest;
- Ajouté PEP 498 (interpolation de chaßnes dans des littéraux);
- le drapeau «âpython.EmulateJython» pour importer des classes JVM Ă l'aide de la syntaxe d'importation Python normale et pour attraper les exceptions JVM dans le code Python;
- Amélioration des performances du parseur, du cache des exceptions,
de l'accÚs aux objets Python depuis le code JVM. Les résultats des tests de performance ont été améliorés pour le code Python et les extensions natives (l'exécution des extensions natives au-dessus de llvm implique que le bitcode llvm est transmis à GraalVM pour la compilation JIT).
dans TruffleRuby:
- L'outil intégré LLVM est désormais utilisé pour compiler les extensions natives, générant à la fois du code natif et du bitcode. Cela signifie que plus d'extensions natives devraient se compiler facilement, résolvant la plupart des problÚmes d'assemblage;
- Installation distincte de LLVM pour l'installation des extensions natives dans TruffleRuby;
- L'installation de C++ extensions sur TruffleRuby ne nécessite plus l'installation de libc++ et libc++abi;
- La licence a été mise à jour vers EPL 2.0/GPL 2.0/LGPL 2.1, comme dans le récent JRuby;
- Ajout d'un support pour les arguments optionnels dans GC.stat;
- La méthode Kernel#load a été implémentée avec un wrapper et Kernel#spawn avec :chdir;
- Ajout de rb_str_drop_bytes, remarquable car utilisée par OpenSSL;
- Extensions de gemmes préinstallées nécessaires pour rails new dans Rails 6;
- Des drapeaux similaires à MRI ont été utilisés pour la compilation des extensions natives;
- Optimisations des performances et réduction de la consommation de mémoire.
dans FastR:
- Compatibilité assurée avec R 3.6.1;
- Ajout du support préliminaire pour l'exécution d'extensions natives basées sur LLVM. Lors de la construction de paquets natifs R, FastR est configuré pour utiliser l'outil intégré LLVM de GraalVM. Les fichiers binaires résultants contiendront à la fois du code natif et du bitcode LLVM.
Les paquets préinstallés sont également construits de cette maniÚre.
FastR charge et exĂ©cute par dĂ©faut le code natif des extensions, mais, lorsqu'il est exĂ©cutĂ© avec l'option «âR.BackEnd=llvm», le bitcode sera utilisĂ©. Le backend LLVM peut ĂȘtre utilisĂ© sĂ©lectivement pour certains paquets R en spĂ©cifiant «âR.BackEndLLVM=pkg1,pkg2». En cas de problĂšmes lors de l'installation de paquets, il est possible de revenir en arriĂšre en appelant fastr.setToolchain(«native») ou en modifiant manuellement le fichier $FASTR_HOME/etc/Makeconf; - Cette version de FastR est livrĂ©e sans bibliothĂšques d'exĂ©cution GCC;
- Fuites de mémoire corrigées;
- Correction des problÚmes liés à la gestion des grands vecteurs (>1 Go);
- grepRaw a été implémenté, mais uniquement pour fixed=T.
Source : opennet.ru
