Version 19.3.0 de la machine virtuelle GraalVM et des implémentations de Python, JavaScript, Ruby et R basées sur celle-ci

SociĂ©tĂ© Oracle a publiĂ© publication de la machine virtuelle universelle GraalVM 19.3.0, 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 est remarquable pour son support JDK 11, y compris avec la possibilitĂ© de compiler du code Java en fichiers exĂ©cutables (GraalVM Native Image). Le code du projet est distribuĂ© 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 — GraalPython, GraalJS, TruffleRuby et FastR.

GraalVM propose 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 possibilitĂ© 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 Substrate VM).

Modifications dans GraalJS:

  • 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.

Changements 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 permet de faire fonctionner pytest;
  • AjoutĂ© la prise en charge PEP 498 (interpolation de chaĂźnes dans des littĂ©raux);
  • l'opĂ©rateur de sĂ©quence optionnelle 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).

Changements 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.

Changements 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

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster