ProHoster > Blag > nuacht idirlín > Релиз 19.3.0 виртуальной машины GraalVM и реализаций Python, JavaScript, Ruby и R на её основе
Релиз 19.3.0 виртуальной машины GraalVM и реализаций Python, JavaScript, Ruby и R на её основе
Cuideachta Oracle foilsithe выпуск универсальной виртуальной машины GraalVM 19.3.0, поддерживающей запуск приложений на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust). Ветка 19.3 отнесена к категории выпусков с длительным сроком поддержки (LTS) и suntasach tacaíocht JDK11, в том числе с возможностью компиляции Java-кода в исполняемые файлы (GraalVM Native Image). Код проекта dáilte ag под лицензией GPLv2. Одновременно выпущены новые версии использующих GraalVM реализаций языков Python, JavaScript, Ruby и R — GraalPython, GraalJS, TruffleRuby и FastR.
GraalVM soláthraíonn JIT-компилятор, который может на лету выполнять в JVM код любых скриптовых языков, включая JavaScript, Ruby, Python и R, а также даёт возможность запускать нативный код в JVM, преобразованный в биткод LLVM. Предоставляемый GraalVM инструментарий включает независимые от языков программирования отладчик, систему профилирования и анализатор распределения памяти. GraalVM даёт возможность создавать комбинированные приложения с компонентами на разных языках, позволяя обращаться к объектам и массивам из кода на других языках. Для языков на базе JVM имеется deis создания скомпилированных в машинный код исполняемых файлов, которые можно выполнять напрямую с минимальным потреблением памяти (управление памятью и потоками реализовано через подключение фреймворка Substrate VM).
Отключены по умолчанию нестандартные глобальные свойства и функции:
global (заменено на globalThis, для возвращения предусмотрена настройка js.global-property), performance (js.performance), print и printErr (js.print);
Реализованы Promise.allSettled и nullish coalescing proposal, которые доступны в режиме ECMAScript 2020 («—js.ecmascript-version=2020»);
Добавлены заглушки 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, которая ceadaithe обеспечить работу pytest;
Curtha leis tacaíocht PEP 498 (интерполяция строк в литералах);
Curtha i bhfeidhm флаг «—python.EmulateJython» для импорта JVM-классов с помощью нормального Python-синтаксиса import и ловли JVM-исключений из кода на Python;
Улучшена производительность парсера, кеширования исключений,
доступа к объектам Python из JVM-кода. Улучшены результаты в тестах производительности для кода python и нативных расширений (исполнение нативных расширений поверх llvm подразумевает, что bitcode llvm передаётся GraalVM для JIT-компиляции).
Для компиляции нативных расширений теперь применяется встроенный инструментарий 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;
Внесены оптимизации производительности и сокращено потребление памяти.
Добавлена предварительная поддержка исполнения нативных расширений на основе 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);