Empresa Oracle lanzamiento de una máquina virtual universal , 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 que se puede generar código de bytes LLVM (C, C++, Rust). La rama 19.3 se clasifica como una versión de soporte a largo plazo (LTS) y el soporte de , incluida la posibilidad de compilar código Java en archivos ejecutables (GraalVM Native Image). El código del proyecto bajo la licencia GPLv2. Se han lanzado nuevas versiones de las implementaciones del lenguaje que utilizan GraalVM: Python, JavaScript, Ruby y R — , , y .
GraalVM un compilador JIT que puede ejecutar en tiempo de ejecución en la JVM el código de cualquier lenguaje de script, incluyendo JavaScript, Ruby, Python y R, y también permite ejecutar código nativo en JVM, convertido a código de bytes LLVM. Las herramientas proporcionadas por GraalVM incluyen un depurador independiente del lenguaje de programación, un sistema de perfilado y un analizador de distribución de memoria. GraalVM permite crear aplicaciones combinadas con componentes en diferentes lenguajes, permitiendo acceder a objetos y matrices desde el código en otros lenguajes. Para los lenguajes basados en JVM, hay creación de 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 hilos se realiza mediante la integración con el marco ).
:
- Se ha garantizado la compatibilidad con Node.js 12.10.0;
- Se han desactivado por defecto las propiedades y funciones globales no estándar:
global (reemplazado por globalThis, se proporciona una configuración para restaurarlo js.global-property), performance (js.performance), print y printErr (js.print); - Se han implementado Promise.allSettled y la propuesta de coalescencia nullish, que están disponibles en el modo ECMAScript 2020 («—js.ecmascript-version=2020»);
- Se han actualizado las dependencias de ICU4J a 64.2, ASM a 7.1.
en GraalPython:
- Se han agregado sustitutos gc.{enable,disable,isenabled}, se han implementado charmap_build, sys.hexversion y _lzma;
- La biblioteca estándar de Python 3.7.8 ha sido actualizada;
- Se ha añadido soporte para NumPy 1.16.4 y Pandas 0.25.0;
- Se ha añadido soporte para timeit;
- socket.socket ha sido actualizado para permitir ejecutar «graalpython -m http.server» y cargar recursos http no cifrados (sin TLS);
- Se han solucionado problemas relacionados con la salida de objetos pandas.DataFrame,
el manejo incorrecto de tuplas en bytes.startswith,
la asignación destructurante de iteradores y el uso de dict.__contains__ para diccionarios; - Se ha añadido soporte para ast.PyCF_ONLY_AST, lo que asegurar el funcionamiento de pytest;
- Se ha añadido PEP 498 (interpolación de cadenas en literales);
- la bandera «--python.EmulateJython» para importar clases de JVM usando la sintaxis normal de Python import y manejar excepciones de JVM desde el código Python;
- Mejorado el rendimiento del parser, el almacenamiento en caché de excepciones,
el acceso a objetos Python desde el código de JVM. Se han mejorado los resultados en las pruebas de rendimiento para el código Python y las extensiones nativas (la ejecución de extensiones nativas sobre llvm implica que el bitcode llvm se pasa a GraalVM para la compilación JIT).
en TruffleRuby:
- Para la compilación de extensiones nativas, ahora se aplica el marco incorporado de LLVM, que crea tanto código nativo como bitcode. Esto significa que más extensiones nativas deberían compilarse sin problemas, resolviendo la mayoría de los problemas relacionados con la vinculación;
- Instalación separada de LLVM para la instalación de extensiones nativas en TruffleRuby;
- Para la instalación de extensiones C++ en TruffleRuby, ya no es necesario instalar libc++ y libc++abi;
- La licencia se ha actualizado a EPL 2.0/GPL 2.0/LGPL 2.1, como en el reciente JRuby;
- Se ha añadido soporte para argumentos opcionales en GC.stat;
- Se ha implementado el método Kernel#load con envoltura y Kernel#spawn con :chdir;
- Se ha añadido rb_str_drop_bytes, notable porque es utilizado por OpenSSL;
- Se incluyen extensiones de gemas preinstaladas necesarias para rails new en Rails 6;
- Se han utilizado banderas para la compilación de extensiones nativas, como en MRI;
- Se han realizado optimizaciones de rendimiento y se ha reducido el consumo de memoria.
en FastR:
- Se ha asegurado la compatibilidad con R 3.6.1;
- Se ha añadido soporte preliminar para la ejecución de extensiones nativas basadas en LLVM. Al compilar paquetes nativos R, FastR está configurado para utilizar el marco LLVM incorporado en GraalVM. Los archivos binarios resultantes contendrán tanto código nativo como bitcode de LLVM.
Los paquetes preinstalados también se han compilado de esta manera.
FastR carga y ejecuta código nativo de extensiones por defecto, pero, cuando se ejecuta con la opción «--R.BackEnd=llvm», se utilizará el bitcode. El backend de LLVM se puede usar selectivamente para algunos paquetes de R, especificando «--R.BackEndLLVM=pkg1,pkg2». En caso de problemas al instalar paquetes, se puede revertir todo llamando a fastr.setToolchain(«native») o editando manualmente el archivo $FASTR_HOME/etc/Makeconf; - En esta versión, FastR se entrega sin bibliotecas de tiempo de ejecución de GCC;
- Se han corregido fugas de memoria;
- Se han resuelto problemas al trabajar con vectores grandes (>1GB);
- Se ha implementado grepRaw, pero solo para fixed=T.
Fuente: opennet.ru
