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

Société Oracle опубликовала sortie d'une machine virtuelle universelle GraalVM 19.3.0, qui prend en charge l'exécution d'applications en JavaScript (Node.js), Python, Ruby, R, tous les langages pour la JVM (Java, Scala, Clojure, Kotlin) et les langages pour lesquels le bitcode LLVM peut être généré (C, C++ , Rouiller). La branche 19.3 est classée comme version LTS (Long Term Support) et remarquable soutien JDK 11, y compris la possibilité de compiler du code Java en fichiers exécutables (GraalVM Native Image). Code de projet distribué par sous licence GPLv2. Dans le même temps, de nouvelles versions d'implémentations des langages Python, JavaScript, Ruby et R utilisant GraalVM ont été publiées - GraalPython, GraalJS, TruffeRubis и RapideR.

GraalVM fournit Un compilateur JIT capable d'exécuter du code à partir de n'importe quel langage de script à la volée dans la JVM, notamment JavaScript, Ruby, Python et R, et permet également d'exécuter du code natif dans la JVM converti en bitcode LLVM. Les outils fournis par GraalVM incluent un débogueur indépendant du langage, un système de profilage et un analyseur d'allocation de mémoire. GraalVM permet de créer des applications combinées avec des composants dans différents langages, vous permettant d'accéder à des objets et des tableaux à partir de code dans d'autres langages. Pour les langages basés sur JVM, il existe occasion créer des fichiers exécutables compilés en code machine qui peuvent être exécutés directement avec une consommation de mémoire minimale (la gestion de la mémoire et des threads est implémentée via la connexion du framework Machine virtuelle de substrat).

Changements dans GraalJS:

  • La compatibilité avec Node.js 12.10.0 est assurée ;
  • Les propriétés et fonctions globales non standard sont désactivées par défaut :
    global (remplacé par globalThis, définissant js.global-property sur return), performance (js.performance), print et printErr (js.print) ;

  • Implémentation des propositions de fusion Promise.allSettled et nullish, disponibles en mode ECMAScript 2020 (« -js.ecmascript-version=2020 ») ;
  • Dépendances mises à jour ICU4J vers 64.2, ASM vers 7.1.

Changements dans GraalPython :

  • Ajout des stubs gc.{enable,disable,isenabled}, implémentation de charmap_build, sys.hexversion et _lzma ;
  • Bibliothèque standard Python 3.7.8 mise à jour ;
  • Ajout de la prise en charge de NumPy 1.16.4 et Pandas 0.25.0 ;
  • Ajout du support timeit ;
  • socket.socket a été amené à un état qui vous permet d'exécuter « graalpython -m http.server » et de charger des ressources http non chiffrées (sans TLS) ;
  • Correction de problèmes d'affichage des objets pandas.DataFrame.
    traitement incorrect des tuples dans bytes.startswith,
    affectation de déstructuration des itérateurs et utilisation de dict.__contains__ pour les dictionnaires ;

  • Ajout de la prise en charge de ast.PyCF_ONLY_AST, qui permis assurez-vous que pytest fonctionne ;
  • Ajouté par soutenir PEP 498 (interpolation de chaînes en littéraux) ;
  • Mis en œuvre l'indicateur « --python.EmulateJython » pour importer les classes JVM en utilisant la syntaxe d'importation Python normale et intercepter les exceptions JVM du code Python ;
  • Amélioration des performances de l'analyseur, mise en cache des exceptions,
    accéder aux objets Python à partir du code JVM. Résultats améliorés dans les tests de performances pour le code Python et les extensions natives (l'exécution d'extensions natives au-dessus de llvm implique que le bitcode llvm est transmis à GraalVM pour la compilation JIT).

Changements dans TruffleRuby :

  • Pour compiler les extensions natives, la boîte à outils LLVM intégrée est désormais utilisée, créant à la fois du code natif et du bitcode. Cela signifie que davantage d'extensions natives devraient être compilées immédiatement, éliminant ainsi la plupart des problèmes de liaison ;
  • Installation LLVM séparée pour l'installation d'extensions natives dans TruffleRuby ;
  • L'installation d'extensions C++ sur TruffleRuby ne nécessite plus l'installation de libc++ et libc++abi ;
  • Licence mise à jour vers EPL 2.0/GPL 2.0/LGPL 2.1, identique au récent JRuby ;
  • Ajout de la prise en charge des arguments facultatifs dans GC.stat ;
  • Implémentation de la méthode Kernel#load avec un wrapper et Kernel#spawn avec :chdir;
  • Ajout de rb_str_drop_bytes, ce qui est génial car OpenSSL l'utilise ;
  • Extensions incluses de gemmes préinstallées nécessaires pour les rails nouveaux dans Rails 6 ;
  • Pour compiler des extensions natives, des drapeaux sont utilisés, comme en MRI ;
  • Des optimisations de performances ont été apportées et la consommation de mémoire a été réduite.

Changements dans FastR :

  • La compatibilité avec R 3.6.1 est assurée ;
  • Ajout d'un support préliminaire pour l'exécution d'extensions natives basées sur LLVM. Lors de la création de packages R natifs, FastR est configuré pour utiliser les outils LLVM intégrés de GraalVM. Les fichiers binaires résultants contiendront à la fois du code natif et du bitcode LLVM.

    Les packages préinstallés sont également construits de cette façon.
    FastR charge et exécute le code d'extension natif par défaut, mais lorsqu'il est lancé avec l'option "--R.BackEnd=llvm", le bitcode sera utilisé. Le backend LLVM peut être utilisé de manière sélective pour certains packages R en spécifiant "--R.BackEndLLVM=pkg1,pkg2". Si vous rencontrez des problèmes pour installer des packages, vous pouvez tout annuler en appelant fastr.setToolchain("native") ou en éditant manuellement le fichier $FASTR_HOME/etc/Makeconf ;

  • Dans cette version, FastR est livré sans les bibliothèques d'exécution GCC ;
  • Correction de fuites de mémoire ;
  • Correction de problèmes lors du travail avec de grands vecteurs (> 1 Go) ;
  • GrepRaw implémenté, mais uniquement pour fixed=T.

Source: opennet.ru

Ajouter un commentaire