Oracle Corporation release of a universal virtual machine , supporting the execution of applications in JavaScript (Node.js), Python, Ruby, R, any language for the JVM (Java, Scala, Clojure, Kotlin), and languages for which LLVM bitcode can be generated (C, C++, Rust). Version 19.3 is categorized as a Long-Term Support (LTS) release and support for , including the ability to compile Java code into executable files (GraalVM Native Image). The project code is licensed under GPLv2. New versions of the GraalVM implementations for Python, JavaScript, Ruby, and R have also been released — , , and .
GraalVM A JIT compiler that can dynamically execute any scripting language code in the JVM, including JavaScript, Ruby, Python, and R, as well as run native code in the JVM that has been transformed into LLVM bitcode. The GraalVM toolkit includes a language-agnostic debugger, profiling system, and memory distribution analyzer. GraalVM allows for the creation of combined applications with components in different languages, enabling access to objects and arrays from code in other languages. For JVM-based languages, there is the ability to create executable files compiled to machine code that can be run directly with minimal memory consumption (memory and thread management is implemented through the integration of the framework ).
:
- Compatibility with Node.js 12.10.0 has been ensured;
- Non-standard global properties and functions are disabled by default:
global (replaced with globalThis; a setting js.global-property is available to revert), performance (js.performance), print, and printErr (js.print); - Promise.allSettled and the nullish coalescing proposal have been implemented, which are available in ECMAScript 2020 mode ('—js.ecmascript-version=2020');
- Dependencies ICU4J have been updated to 64.2, ASM to 7.1.
in GraalPython:
- Stubs for gc.{enable,disable,isenabled} have been added; charmap_build, sys.hexversion, and _lzma have been implemented;
- The standard library has been updated to Python 3.7.8;
- Support for NumPy 1.16.4 and Pandas 0.25.0 has been added;
- Support for timeit has been added;
- socket.socket has been brought to a state allowing 'graalpython -m http.server' to run and to load unencrypted (without TLS) http resources;
- Issues related to the output of pandas.DataFrame objects have been fixed,
and incorrect handling of tuples in bytes.startswith has been resolved.
destructuring assignment using iterators and dict.__contains__ for dictionaries; - Added support for ast.PyCF_ONLY_AST, which pytest functionality;
- Added PEP 498 (string interpolation in literals);
- the flag "—python.EmulateJython" for importing JVM classes using regular Python import syntax and catching JVM exceptions from Python code;
- Improved parser performance, exception caching,
access to Python objects from JVM code. Performance test results have improved for both Python code and native extensions (execution of native extensions on top of llvm implies that llvm bitcode is passed to GraalVM for JIT compilation).
in TruffleRuby:
- The built-in LLVM toolchain is now applied for compiling native extensions, producing both native code and bitcode. This means that more native extensions should compile out of the box, resolving most packaging issues;
- Separate LLVM installation for installing native extensions in TruffleRuby;
- Installing C++ extensions on TruffleRuby no longer requires libc++ and libc++abi;
- The license has been updated to EPL 2.0/GPL 2.0/LGPL 2.1, similar to recent JRuby;
- Support for optional arguments in GC.stat has been added;
- Kernel#load with wrapper and Kernel#spawn with :chdir have been implemented;
- rb_str_drop_bytes has been added, notable for being used by OpenSSL;
- Included dependencies for the preset gems required for rails new in Rails 6;
- Flags similar to MRI have been used for compiling native extensions;
- Performance optimizations and reduced memory consumption have been made.
in FastR:
- Compatibility with R 3.6.1 has been ensured;
- Preliminary support for executing native extensions based on LLVM has been added. When building native R packages, FastR is configured to use the built-in LLVM toolchain in GraalVM. The resulting binaries will contain both native code and LLVM bitcode.
Pre-installed packages are also built in this manner.
FastR loads and runs the native code of extensions by default, but when started with the option "—R.BackEnd=llvm", it will utilize bitcode. The LLVM backend can be selectively used for specific R packages by specifying "—R.BackEndLLVM=pkg1,pkg2". In case of installation issues, it's possible to revert everything by calling fastr.setToolchain("native") or manually editing the file $FASTR_HOME/etc/Makeconf; - In this release, FastR is delivered without GCC runtime libraries;
- Memory leaks have been fixed;
- Issues with large vectors (>1GB) have been resolved;
- grepRaw has been implemented, but only for fixed=T.
Source: opennet.ru
