Компания Oracle представила универсальную виртуальную машину GraalVM
Как сообщает opennet.ru компания Oracle анонсировала первый релиз проекта GraalVM, в рамках которого развивается универсальная виртуальная машина для запуска приложений, написанных на JavaScript (Node.js), Python, Ruby, R, любых языках для JVM (Java, Scala, Clojure, Kotlin) и языках, для которых может формироваться биткод LLVM (C, C++, Rust). Код проекта распространяется под лицензией GPLv2. Несмотря на анонс от Oracle, выпуск GraalVM 1.0 пока имеет статус кандидата в релизы.
GraalVM изначально развивалась как универсальная виртуальная машина, способная обеспечить высокопроизводительное выполнение кода на любых языках программирования и предоставляющая средства для организации взаимодействия между кодом на различных языках, дающая возможность создавать комбинированные приложения с компонентами на разных языках.
Вместо преобразования структур данных в подобных программах, GraalVM позволяет непосредственно обращаться к объектам и массивам из других языков, убирая изоляцию между языками и позволяя использовать общий runtime. Например, из JavaScript-кода для Node.js можно обращаться к библиотеке классов Java или из кода на Java вызывать функции обработки статистики на языке Python, или запускать код на языке R для создания сложных SVG-графиков. Используя GraalVM программист может сочетать в одном проекте разные языки, выбирая язык наиболее подходящий для каждого вида задач.
GraalVM может применяться как для создания обособленных исполняемых приложений, так и как часть платформ, подобных OpenJDK и Node.js, или даже встраиваясь как движок обработки данных в СУБД, таких как MySQL и Oracle. Для запуска приложений предлагается стандартизированное окружение для выполнения на базе HotSpot JVM. GraalVM предоставляет JIT-компилятор, который может на лету выполнять в JVM код любых скриптовых языков, включая JavaScript, Ruby, Python и R, а также дает возможность запускать нативный код в JVM, преобразованный в биткод LLVM. Предоставляемый GraalVM инструментарий включает независимые от языков программирования отладчик, систему профилирования и анализатор распределения памяти.
Для языков на базе JVM имеется возможность создания скомпилированных нативных образов, которые можно выполнять напрямую с минимальным потреблением памяти. Для создания таких исполняемых образов применяется предварительный статический анализ для выявления всего кода, который охватывает выполнение основного Java-метода, после чего к этому коду применяется полноценная упреждающая компиляция (AOT, ahead-of-time). Функциональность управления памятью и потоками реализована через подключение специальной Substrate VM, которая может компилироваться в исполняемый код. В результате формируется исполняемый файл, включающий машинный код приложения, готовый к незамедлительному выполнению без громоздких прослоек, таких как HotSpot VM.