Реліз 19.3.0 віртуальної машини GraalVM та реалізацій Python, JavaScript, Ruby та R на її основі

Компанія Oracle опублікувала випуск універсальної віртуальної машини GraalVM 19.3.0, що підтримує запуск додатків на JavaScript (Node.js), Python, Ruby, R, будь-яких мов для JVM (Java, Scala, Clojure, Kotlin) і мовами, для яких може формуватися біткод LLVM (C, C++, Rust). Гілка 19.3 віднесена до категорії випусків із тривалим терміном підтримки (LTS) та примітна підтримкою JDK 11, у тому числі з можливістю компіляції Java-коду в файли (GraalVM Native Image). Код проекту поширюється ліцензія GPLv2. Одночасно випущено нові версії реалізацій мов Python, JavaScript, Ruby та R, що використовують GraalVM. GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM надає JIT-компілятор, який може на льоту виконувати в JVM код будь-яких скриптових мов, включаючи JavaScript, Ruby, Python і R, а також дає можливість запускати нативний код JVM, перетворений на біткод LLVM. Наданий GraalVM інструментарій включає незалежні від мов програмування відладчик, систему профілювання та аналізатор розподілу пам'яті. GraalVM дає можливість створювати комбіновані програми з компонентами різними мовами, дозволяючи звертатися до об'єктів та масивів з коду іншими мовами. Для мов на базі JVM є можливість створення скомпільованих у машинний код виконуваних файлів, які можна виконувати безпосередньо з мінімальним споживанням пам'яті (керування пам'яттю та потоками реалізовано через підключення фреймворку 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.

Зміни у 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;
  • Додана підтримка 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.

Джерело: opennet.ru

Додати коментар або відгук