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.
Источник: https://www.opennet.ru/opennews/art.shtml?num=51906
(opennet.ru, основная лента)