Versión 19.3.0 de la máquina virtual GraalVM e implementaciones de Python, JavaScript, Ruby y R basadas en ella

Compañía Oráculo опубликовала lanzamiento de una máquina virtual universal GraalVM 19.3.0, que admite la ejecución de aplicaciones en JavaScript (Node.js), Python, Ruby, R, cualquier lenguaje para JVM (Java, Scala, Clojure, Kotlin) y lenguajes para los cuales se puede generar código de bits LLVM (C, C++). , Óxido). La rama 19.3 está clasificada como versión de soporte a largo plazo (LTS) y notable apoyo JDK11, incluida la capacidad de compilar código Java en archivos ejecutables (GraalVM Native Image). Código de proyecto distribuido por Licenciado bajo GPLv2. Al mismo tiempo, se lanzaron nuevas versiones de implementaciones de lenguajes Python, JavaScript, Ruby y R utilizando GraalVM: GraalPython, GraalJS, TrufaRubí и RápidoR.

GraalVM proporciona Un compilador JIT que puede ejecutar código desde cualquier lenguaje de secuencias de comandos sobre la marcha en la JVM, incluidos JavaScript, Ruby, Python y R, y también permite ejecutar código nativo en la JVM convertido a código de bits LLVM. Las herramientas proporcionadas por GraalVM incluyen un depurador independiente del lenguaje, un sistema de creación de perfiles y un analizador de asignación de memoria. GraalVM permite crear aplicaciones combinadas con componentes en diferentes idiomas, permitiéndole acceder a objetos y matrices desde código en otros idiomas. Para lenguajes basados ​​en JVM existe oportunidad crear archivos ejecutables compilados en código de máquina que se pueden ejecutar directamente con un consumo mínimo de memoria (la gestión de memoria y subprocesos se implementa mediante la conexión del marco Máquina virtual de sustrato).

Cambios en GraalJS:

  • La compatibilidad con Node.js 12.10.0 está asegurada;
  • Las propiedades y funciones globales no estándar están deshabilitadas de forma predeterminada:
    global (reemplazado por globalThis, configurando js.global-property para que regrese), rendimiento (js.rendimiento), impresión y printErr (js.print);

  • Se implementó la propuesta de fusión Promise.allSettled y nullish, que están disponibles en el modo ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • Dependencias actualizadas ICU4J a 64.2, ASM a 7.1.

Cambios en GraalPython:

  • Se agregaron códigos auxiliares gc.{enable,disable,isenabled}, se implementaron charmap_build, sys.hexversion y _lzma;
  • Biblioteca estándar Python 3.7.8 actualizada;
  • Se agregó soporte para NumPy 1.16.4 y Pandas 0.25.0;
  • Se agregó soporte de tiempo;
  • socket.socket se ha llevado a un estado que le permite ejecutar “graalpython -m http.server” y cargar recursos http no cifrados (sin TLS);
  • Se solucionaron problemas con la visualización de objetos pandas.DataFrame.
    procesamiento incorrecto de tuplas en bytes.startswith,
    desestructuración de la asignación de iteradores y uso de dict.__contains__ para diccionarios;

  • Se agregó soporte para ast.PyCF_ONLY_AST, que permitido asegúrese de que pytest funcione;
  • Añadido por apoyar PEP 498 (interpolación de cadenas en literales);
  • Implementado el indicador “--python.EmulateJython” para importar clases JVM utilizando la sintaxis de importación normal de Python y detectar excepciones JVM del código Python;
  • Rendimiento mejorado del analizador, almacenamiento en caché de excepciones,
    acceder a objetos Python desde el código JVM. Resultados mejorados en pruebas de rendimiento para código Python y extensiones nativas (la ejecución de extensiones nativas sobre llvm implica que el código de bits llvm se pasa a GraalVM para la compilación JIT).

Cambios en TrufaRubí:

  • Para compilar extensiones nativas, ahora se utiliza el kit de herramientas LLVM integrado, que crea tanto código nativo como código de bits. Esto significa que se deberían compilar más extensiones nativas de forma inmediata, eliminando la mayoría de los problemas de vinculación;
  • Instalación separada de LLVM para instalar extensiones nativas en TruffleRuby;
  • La instalación de extensiones de C++ en TruffleRuby ya no requiere instalar libc++ y libc++abi;
  • Licencia actualizada a EPL 2.0/GPL 2.0/LGPL 2.1, igual que la reciente JRuby;
  • Se agregó soporte para argumentos opcionales a GC.stat;
  • Implementé el método Kernel#load con un contenedor y Kernel#spawn con :chdir;
  • Se agregó rb_str_drop_bytes, lo cual es excelente porque OpenSSL lo usa;
  • Se incluyen extensiones de gemas preinstaladas necesarias para los rieles nuevos en Rails 6;
  • Para compilar extensiones nativas, se utilizan banderas, como en MRI;
  • Se han realizado optimizaciones de rendimiento y se ha reducido el consumo de memoria.

Cambios en RápidoR:

  • Se garantiza la compatibilidad con R 3.6.1;
  • Se agregó soporte preliminar para ejecutar extensiones nativas basadas en LLVM. Al crear paquetes R nativos, FastR se configura para utilizar las herramientas LLVM integradas de GraalVM. Los archivos binarios resultantes contendrán código nativo y código de bits LLVM.

    Los paquetes preinstalados también se crean de esta manera.
    FastR carga y ejecuta código de extensión nativo de forma predeterminada, pero cuando se inicia con la opción "--R.BackEnd=llvm", se utilizará código de bits. El backend de LLVM se puede utilizar de forma selectiva para algunos paquetes de R especificando "--R.BackEndLLVM=pkg1,pkg2". Si tiene problemas para instalar paquetes, puede revertir todo llamando a fastr.setToolchain("native") o editando manualmente el archivo $FASTR_HOME/etc/Makeconf;

  • En esta versión, FastR se envía sin las bibliotecas de tiempo de ejecución de GCC;
  • Se corrigieron pérdidas de memoria;
  • Se solucionaron problemas al trabajar con vectores grandes (>1 GB);
  • Se implementó grepRaw, pero solo para fijo=T.

Fuente: opennet.ru

Añadir un comentario