Phát hành 19.3.0 của máy ảo GraalVM và triển khai Python, JavaScript, Ruby và R dựa trên nó

Công ty Oracle được phát hành выпуск универсальной виртуальной машины GraalVM 19.3.0, поддерживающей запуск приложений на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust). Ветка 19.3 отнесена к категории выпусков с длительным сроком поддержки (LTS) и đáng chú ý ủng hộ JDK 11, в том числе с возможностью компиляции Java-кода в исполняемые файлы (GraalVM Native Image). Код проекта phân phối bởi под лицензией GPLv2. Одновременно выпущены новые версии использующих GraalVM реализаций языков Python, JavaScript, Ruby и R — GraalPython, GraalJS, TruffleRuby и nhanhR.

GraalVM cung cấp JIT-компилятор, который может на лету выполнять в JVM код любых скриптовых языков, включая JavaScript, Ruby, Python и R, а также даёт возможность запускать нативный код в JVM, преобразованный в биткод LLVM. Предоставляемый GraalVM инструментарий включает независимые от языков программирования отладчик, систему профилирования и анализатор распределения памяти. GraalVM даёт возможность создавать комбинированные приложения с компонентами на разных языках, позволяя обращаться к объектам и массивам из кода на других языках. Для языков на базе JVM имеется cơ hội создания скомпилированных в машинный код исполняемых файлов, которые можно выполнять напрямую с минимальным потреблением памяти (управление памятью и потоками реализовано через подключение фреймворка Substrate VM).

Изменения в GraalJS:

  • Обеспечена совместимость с 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.

Thay đổi в 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, которая cho phép обеспечить работу pytest;
  • Thêm ủng hộ PEP 498 (интерполяция строк в литералах);
  • thực hiện флаг «—python.EmulateJython» для импорта JVM-классов с помощью нормального Python-синтаксиса import и ловли JVM-исключений из кода на Python;
  • Улучшена производительность парсера, кеширования исключений,
    доступа к объектам Python из JVM-кода. Улучшены результаты в тестах производительности для кода python и нативных расширений (исполнение нативных расширений поверх llvm подразумевает, что bitcode llvm передаётся GraalVM для JIT-компиляции).

Thay đổi в 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;
  • Внесены оптимизации производительности и сокращено потребление памяти.

Thay đổi в 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.

Nguồn: opennet.ru

Thêm một lời nhận xét