Kompania Oracle выпуск универсальной виртуальной машины , поддерживающей запуск приложений на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust). Ветка 19.3 отнесена к категории выпусков с длительным сроком поддержки (LTS) и mbështetje , в том числе с возможностью компиляции Java-кода в исполняемые файлы (GraalVM Native Image). Код проекта под лицензией GPLv2. Одновременно выпущены новые версии использующих GraalVM реализаций языков Python, JavaScript, Ruby и R — , , dhe .
GraalVM JIT-компилятор, который может на лету выполнять в JVM код любых скриптовых языков, включая JavaScript, Ruby, Python и R, а также даёт возможность запускать нативный код в JVM, преобразованный в биткод LLVM. Предоставляемый GraalVM инструментарий включает независимые от языков программирования отладчик, систему профилирования и анализатор распределения памяти. GraalVM даёт возможность создавать комбинированные приложения с компонентами на разных языках, позволяя обращаться к объектам и массивам из кода на других языках. Для языков на базе JVM имеется создания скомпилированных в машинный код исполняемых файлов, которые можно выполнять напрямую с минимальным потреблением памяти (управление памятью и потоками реализовано через подключение фреймворка ).
:
- Обеспечена совместимость с Node.js 12.10.0;
- Отключены по умолчанию нестандартные глобальные свойства и функции:
global (заменено на globalThis, для возвращения предусмотрена настройка js.global-property), performance (js.performance), print и printErr (js.print); - Реализованы Promise.allSettled и nullish coalescing proposal, которые доступны в режиме ECMAScript 2020 («—js.ecmascript-version=2020»);
- Обновлены зависимости ICU4J до 64.2, ASM до 7.1.
в GraalPython:
- Добавлены заглушки gc.{enable,disable,isenabled}, реализованы charmap_build, sys.hexversion и _lzma;
- Обновлена стандартная библиотека Python 3.7.8;
- Добавлена поддержка NumPy 1.16.4 и Pandas 0.25.0;
- Добавлена поддержка timeit;
- socket.socket доведён до состояния, позволяющего запускать «graalpython -m http.server» и загружать нешифрованные (без TLS) http-ресурсы;
- Исправлены проблемы, связанные с выводом объектов pandas.DataFrame,
некорректной обработкой кортежей в bytes.startswith,
деструктурирующим присвоением итераторов и использованием dict.__contains__ для словарей; - Добавлена поддержка ast.PyCF_ONLY_AST, которая обеспечить работу pytest;
- Shtuar PEP 498 (интерполяция строк в литералах);
- флаг «—python.EmulateJython» для импорта JVM-классов с помощью нормального Python-синтаксиса import и ловли JVM-исключений из кода на Python;
- Улучшена производительность парсера, кеширования исключений,
доступа к объектам Python из JVM-кода. Улучшены результаты в тестах производительности для кода python и нативных расширений (исполнение нативных расширений поверх llvm подразумевает, что bitcode llvm передаётся GraalVM для JIT-компиляции).
в TruffleRuby:
- Для компиляции нативных расширений теперь применяется встроенный инструментарий LLVM, создающий и нативный код, и биткод. Это значит, что больше нативных расширений должны компилироваться из коробки, позволяя решить большинство проблем, связанных с компоновкой;
- Отдельная установка LLVM для установки нативных расширений в TruffleRuby;
- Для установки C++ расширений на TruffleRuby теперь не требуется установка libc++ и libc++abi;
- Лицензия обновлена до EPL 2.0/GPL 2.0/LGPL 2.1, как и в недавнем JRuby;
- Добавлена поддержка опциональных аргументов в GC.stat;
- Реализован метод Kernel#load с обёрткой и Kernel#spawn с :chdir;
- Добавлен rb_str_drop_bytes, замечательный тем, что его использует OpenSSL;
- Включены расширения предустановленных gem-ов, нужные для rails new в Rails 6;
- Для компиляции нативных расширений задействованы флаги, как в MRI;
- Внесены оптимизации производительности и сокращено потребление памяти.
в FastR:
- Обеспечена совместимость с R 3.6.1;
- Добавлена предварительная поддержка исполнения нативных расширений на основе LLVM. При сборке нативных пакетов R FastR сконфигурирован для использования встроенного в GraalVM инструментария LLVM. Результирующие бинарные файлы будут содержать и нативный код и LLVM-биткод.
Предустановленные пакеты также собраны этим образом.
FastR загружает и запускает нативный код расширений по умолчанию, но, когда запущен с опцией «—R.BackEnd=llvm», будет использоваться биткод. LLVM бэкэнд можно использовать избирательно для некоторых R пакетов, указывая «—R.BackEndLLVM=pkg1,pkg2». В случае проблем при установке пакетов, можно вернуть всё назад, вызвав fastr.setToolchain(«native») или вручную подредактировав файл $FASTR_HOME/etc/Makeconf; - В этом релизе FastR поставляется без библиотек GCC runtime;
- Исправлены утечки памяти;
- Исправлены проблемы при работе с большими векторами (>1GB);
- Реализован grepRaw, но только для fixed=T.
Burimi: opennet.ru
