Versión 19.3.0 da máquina virtual GraalVM e implementacións de Python, JavaScript, Ruby e R baseadas nela

Compañía Oracle publicado liberación dunha máquina virtual universal GraalVM 19.3.0, que admite a execución de aplicacións en JavaScript (Node.js), Python, Ruby, R, calquera linguaxe para a JVM (Java, Scala, Clojure, Kotlin) e linguaxes para os que se pode xerar código de bits LLVM (C, C++). , ferruxe). A rama 19.3 está clasificada como versión de soporte a longo prazo (LTS) e notable apoiar JDK11, incluíndo a capacidade de compilar código Java en ficheiros executables (Imaxe nativa de GraalVM). Código do proxecto distribuído por licenciado baixo GPLv2. Ao mesmo tempo, lanzáronse novas versións das implementacións da linguaxe Python, JavaScript, Ruby e R usando GraalVM - GraalPython, Graal JS, TrufaRuby и Rápido.

GraalVM fornece Un compilador JIT que pode executar código desde calquera linguaxe de script sobre a marcha na JVM, incluíndo JavaScript, Ruby, Python e R, e tamén permite executar código nativo na JVM convertido en código de bits LLVM. As ferramentas proporcionadas por GraalVM inclúen un depurador independente da linguaxe, un sistema de creación de perfiles e un analizador de asignación de memoria. GraalVM fai posible crear aplicacións combinadas con compoñentes en diferentes idiomas, o que lle permite acceder a obxectos e matrices desde código noutros idiomas. Para linguaxes baseadas en JVM hai oportunidade creando ficheiros executables compilados en código de máquina que se poden executar directamente cun consumo mínimo de memoria (a xestión de memoria e fíos implícase a través da conexión do framework). Substrato VM).

Cambios en GraalJS:

  • A compatibilidade con Node.js 12.10.0 está garantida;
  • As propiedades e funcións globais non estándar están desactivadas por defecto:
    global (substituído por globalThis, configurando js.global-property para devolver), rendemento (js.performance), print e printErr (js.print);

  • Implementouse a proposta de coalescencia Promise.allSettled e nula, que están dispoñibles no modo ECMAScript 2020 ("-js.ecmascript-version=2020");
  • Dependencias actualizadas ICU4J a 64.2, ASM a 7.1.

Cambios en GraalPython:

  • Engadíronse stubs gc.{enable,disable,isenabled}, implementáronse charmap_build, sys.hexversion e _lzma;
  • Biblioteca estándar actualizada de Python 3.7.8;
  • Engadido soporte para NumPy 1.16.4 e Pandas 0.25.0;
  • Engadido soporte timeit;
  • socket.socket pasou a un estado que lle permite executar "graalpython -m http.server" e cargar recursos http sen cifrar (sen TLS);
  • Solucionáronse problemas coa visualización de obxectos pandas.DataFrame.
    procesamento incorrecto de tuplas en bytes.startswith,
    asignación de desestruturación de iteradores e uso de dict.__contains__ para dicionarios;

  • Engadido soporte para ast.PyCF_ONLY_AST, que permitidas asegurarse de que pytest funciona;
  • Engadido apoiar PEP 498 (interpolación de cadeas en literais);
  • Implementado a marca "--python.EmulateJython" para importar clases de JVM usando a sintaxe normal de importación de Python e capturar excepcións de JVM do código de Python;
  • Rendemento do analizador mellorado, almacenamento en caché de excepcións,
    acceder a obxectos Python desde o código JVM. Resultados mellorados nas probas de rendemento para o código Python e as extensións nativas (a execución de extensións nativas enriba de llvm implica que o código de bits llvm se pasa a GraalVM para a compilación JIT).

Cambios en TruffleRuby:

  • Para compilar extensións nativas, agora utilízase o kit de ferramentas LLVM integrado, creando código nativo e código de bits. Isto significa que deberían compilarse máis extensións nativas fóra da caixa, eliminando a maioría dos problemas de ligazón;
  • Instalación LLVM separada para instalar extensións nativas en TruffleRuby;
  • Instalar extensións de C++ en TruffleRuby xa non require instalar libc++ e libc++abi;
  • Licenza actualizada a EPL 2.0/GPL 2.0/LGPL 2.1, igual que a recente JRuby;
  • Engadido soporte para argumentos opcionais a GC.stat;
  • Implementouse o método Kernel#load cun envoltorio e Kernel#spawn con :chdir;
  • Engadiuse rb_str_drop_bytes, que é xenial porque o usa OpenSSL;
  • Incluíron extensións de xoias preinstaladas necesarias para os carrís novos en Rails 6;
  • Para compilar extensións nativas utilízanse bandeiras, como en MRI;
  • Realizáronse optimizacións de rendemento e reduciuse o consumo de memoria.

Cambios en FastR:

  • A compatibilidade con R 3.6.1 está garantida;
  • Engadido soporte preliminar para executar extensións nativas baseadas en LLVM. Cando se crean paquetes R nativos, FastR está configurado para usar a ferramenta LLVM integrada de GraalVM. Os ficheiros binarios resultantes conterán código nativo e código de bits LLVM.

    Os paquetes preinstalados tamén se constrúen deste xeito.
    FastR carga e executa código de extensión nativo de forma predeterminada, pero cando se inicia coa opción "--R.BackEnd=llvm", empregarase o código de bits. O backend LLVM pódese usar selectivamente para algúns paquetes R especificando "--R.BackEndLLVM=pkg1,pkg2". Se tes problemas para instalar paquetes, podes reverter todo chamando a fastr.setToolchain("nativo") ou editando manualmente o ficheiro $FASTR_HOME/etc/Makeconf;

  • Nesta versión, FastR envíase sen as bibliotecas de tempo de execución de GCC;
  • Solucionáronse as fugas de memoria;
  • Solucionáronse problemas ao traballar con vectores grandes (> 1 GB);
  • Implementouse grepRaw, pero só para fixed=T.

Fonte: opennet.ru

Engadir un comentario