Release 19.3.0 of the GraalVM virtual machine and implementations of Python, JavaScript, Ruby and R based on it

Oracle Company ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° universal virtual machine release GraalVM 19.3.0, which supports running applications in JavaScript (Node.js), Python, Ruby, R, any languages ​​for JVM (Java, Scala, Clojure, Kotlin) and languages ​​for which LLVM bitcode can be generated (C, C++, Rust). The 19.3 branch has been categorized as a Long Term Support (LTS) release and remarkable support JDK 11, including the ability to compile Java code into executable files (GraalVM Native Image). Project code spreads licensed under GPLv2. At the same time, new versions of GraalVM-based implementations of Python, JavaScript, Ruby, and R have been released - GraalPython, GraalJS, TruffleRuby ΠΈ FastR.

GrailVM provides A JIT compiler that can execute code of any scripting languages ​​in the JVM on the fly, including JavaScript, Ruby, Python and R, and also makes it possible to run native code in the JVM converted to LLVM bitcode. GraalVM's toolkit includes a language-independent debugger, a profiling system, and a memory allocation analyzer. GraalVM allows you to create combined applications with components in different languages, allowing you to access objects and arrays from code in other languages. For JVM-based languages, there is opportunity creating natively compiled executable files that can be executed directly with minimal memory consumption (memory and thread management is implemented through the framework connection Substrate VM).

Changes in GraalJS:

  • Ensured compatibility with Node.js 12.10.0;
  • Non-standard global properties and functions are disabled by default:
    global (replaced by globalThis, js.global-property setting is provided for return), performance (js.performance), print and printErr (js.print);

  • Implemented Promise.allSettled and nullish coalescing proposal, which are available in ECMAScript 2020 mode ("-js.ecmascript-version=2020");
  • Updated ICU4J dependencies to 64.2, ASM to 7.1.

Changes in GraalPython:

  • Added gc.{enable,disable,isenabled} stubs, implemented charmap_build, sys.hexversion and _lzma;
  • Updated Python 3.7.8 standard library;
  • Added support for NumPy 1.16.4 and Pandas 0.25.0;
  • Added support for timeit;
  • socket.socket has been brought to a state that allows you to run "graalpython -m http.server" and download unencrypted (without TLS) http resources;
  • Fixed issues with outputting pandas.DataFrame objects,
    incorrect handling of tuples in bytes.startswith,
    destructuring iterator assignment and using dict.__contains__ for dictionaries;

  • Added support for ast.PyCF_ONLY_AST which allowed make pytest work;
  • Added by support PEP 498 (string interpolation in literals);
  • Implemented flag "-python.EmulateJython" for importing JVM classes using the normal Python import syntax and catching JVM exceptions from Python code;
  • Improved parser performance, exception caching,
    accessing Python objects from JVM code. Improved benchmark results for python code and native extensions (running native extensions on top of llvm implies that the llvm bitcode is passed to GraalVM for JIT compilation).

Changes in TruffleRuby:

  • To compile native extensions, the built-in LLVM toolkit is now used, which creates both native code and bitcode. This means that more native extensions should compile out of the box, eliminating most linking issues;
  • Separate LLVM installation for installing native extensions in TruffleRuby;
  • Installation of C++ extensions on TruffleRuby no longer requires installation of libc++ and libc++abi;
  • License updated to EPL 2.0/GPL 2.0/LGPL 2.1, same as recent JRuby;
  • Added support for optional arguments to GC.stat;
  • Implemented Kernel#load method with wrapper and Kernel#spawn with :chdir;
  • Added rb_str_drop_bytes, which is great because OpenSSL uses it;
  • Includes preinstalled gem extensions needed for rails new in Rails 6;
  • Flags are used to compile native extensions, as in MRI;
  • Made performance optimizations and reduced memory consumption.

Changes in FastR:

  • Ensured compatibility with R 3.6.1;
  • Added preliminary support for running native extensions based on LLVM. When building native R packages, FastR is configured to use GraalVM's built-in LLVM toolkit. The resulting binaries will contain both native code and LLVM bitcode.

    The pre-installed packages are also built this way.
    FastR loads and runs extension native code by default, but when run with the "--R.BackEnd=llvm" option, bitcode will be used. The LLVM backend can be used selectively for some R packages by specifying "--R.BackEndLLVM=pkg1,pkg2". In case of problems installing packages, you can revert everything back by calling fastr.setToolchain("native") or by manually editing $FASTR_HOME/etc/Makeconf;

  • In this release, FastR ships without the GCC runtime libraries;
  • Fixed memory leaks;
  • Fixed problems when working with large vectors (>1GB);
  • Implemented grepRaw, but only for fixed=T.

Source: opennet.ru

Add a comment