GraalVM - Википедия - GraalVM

GraalVM
Разработчики)Корпорация Oracle
Стабильный выпуск
20.2.0[1][2][3] / 18 августа 2020 г.; 3 месяца назад (2020-08-18)[4]
Репозиторий Отредактируйте это в Викиданных
Написано вЯва
Операционная системаLinux, Windows и macOS[5]
ПлатформаВиртуальная машина Java
ТипДинамический компилятор и среда выполнения Java
ЛицензияCommunity Edition: GPLv2[6][7] Enterprise Edition: Пробная версия
Интернет сайтwww.graalvm.org

GraalVM это Виртуальная машина Java и JDK на основе HotSpot /OpenJDK, реализованный в Ява. Он поддерживает дополнительные языки программирования и режимы выполнения, например опережающая компиляция приложений Java для быстрого запуска и низкого объем памяти. Первая готовая к производству версия, GraalVM 19.0, была выпущена в мае 2019 года.[8] Самая последняя версия - GraalVM 20.2.0, выпущенная в августе 2020 года.

Основные отличия GraalVM от базового JDK:

  • Компилятор GraalVM, а JIT-компилятор для Java
  • Собственный образ GraalVM, позволяя опережающая компиляция приложений Java
  • Структура реализации языка Truffle и GraalVM SDK, для реализации дополнительных сред выполнения языков программирования
  • LLVM время выполнения и Среда выполнения JavaScript

Одноязычный Graal также включен в HotSpot-based Виртуальная машина Java выпускает как OpenJDK начиная с Java 9. jaotc команда создает собственный образ.[9] Экспериментальный -XX: + EnableJVMCIProduct флаг позволяет использовать Graal JIT.[10]

Цели проекта

  1. Для повышения производительности Виртуальная машина Java на основе языков, чтобы соответствовать производительности родных языков.[11][12]
  2. Чтобы сократить время запуска приложений на основе JVM за счет их предварительной компиляции с помощью Собственный образ GraalVM технологии.
  3. Для включения интеграции GraalVM в Oracle Database, OpenJDK, Node.js, Android / iOS и для поддержки аналогичных пользовательских встраиваний.
  4. Чтобы разрешить произвольное смешивание кода с любого языка программирования в одной программе, выставляемую как "полиглот Приложения".[11][13]
  5. Чтобы включить легко расширяемый набор "полиглот инструменты программирования ".[11][14]

История

GraalVM берет свое начало в Виртуальная машина Максин проект в Sun Microsystems Laboratories (сейчас Oracle Labs ). Целью было написать виртуальную машину Java на самой Java, надеясь избавить разработчиков от проблем разработки на C ++, особенно ручного управления памятью, и получить выгоду от мета-круговые оптимизации. Осознав, что написание всего на Java было слишком амбициозным в качестве первого шага, было принято решение сосредоточиться только на компиляторе и подключить его к Hotspot, чтобы максимально использовать среду выполнения Hotspot. Компилятор GraalVM запускался вручную преобразование код клиентского компилятора Hotspot (с именем «C1») в Java, заменяющий предыдущий компилятор Maxine.[15]

Релизы

GraalVM - это готовое к производству программное обеспечение, доступное как Community Edition для лицензии с открытым исходным кодом, так и как Oracle GraalVM Enterprise Edition, доступное при принятии Лицензионное соглашение OTN Oracle GraalVM Enterprise Edition, включая лицензию на ранние версии Adopter. Корпорация Oracle объявила о выпуске Oracle GraalVM Enterprise Edition 8 мая 2019 г.[16] GraalVM может заменить стандартный JDK на платформах Linux и macOS в 64-битных системах x86.

ГраальВМ 20

ГраальВМ 20.1.0

GraalVM 20.1.0 был выпущен в мае 2020 года.[17] Он включал несколько улучшений для многих компонентов. Помимо улучшения производительности, исправления для удобства использования родной образ были опубликованы. Механизм JavaScript по умолчанию поддерживает все функции режима ECMAScript 2020. Механизм регулярных выражений (TRegex), используемый JavaScript и Python, теперь поддерживает все выражения. Рубин (ТрюфельРубин) улучшена совместимость с родными гемами.

ГраальВМ 20.0.0

GraalVM 20.0.0 был выпущен в феврале 2020 года.[18] Улучшена поддержка Windows, улучшена родной образ инструмент и улучшенная поддержка инструментов, среди многих подробных изменений в компиляторе и поддерживаемых языках.

ГраальВМ 19

GraalVM 19.0.0

Поддержка Windows в настоящее время находится в стадии разработки и выпущена в качестве ранней версии GraalVM 19.0.

GraalVM 19.0 основан на JDK версии 8u212.

Составные части

Компилятор GraalVM поставляется с компонентами обычной виртуальной машины Java (OpenJDK ). Дополнительные компоненты включены в GraalVM для поддержки новых режимов выполнения (Собственный образ GraalVM) или языков программирования (Время выполнения LLVM, GraalVM JavaScript как потенциальная замена устаревшим Nashorn двигатель, TRegex как регулярное выражение двигатель).

Компилятор GraalVM

Компилятор GraalVM - это современная Java своевременный компилятор. Он дополняет или заменяет существующие компиляторы (C1 / C2 в HotSpot ). В отличие от существующих компиляторов, компилятор GraalVM написан модульным, поддерживаемым и расширяемым образом на самой Java.

Он выпущен под GPL версии 2 с исключение пути к классам.

Собственный образ GraalVM

Собственный образ GraalVM - это передовая технология компиляции, которая создает исполняемые двоичные файлы файлов классов. Он выпущен как ранний подключаемый модуль, что означает, что он готов к производству, но может включать несовместимые с обратным портом обновления в будущих выпусках.

Эта функция поддерживает языки на основе JVM, но при желании может выполнять динамические языки, разработанные на основе GraalVM с помощью среды Truffle. Исполняемый файл не запускается на JVM и использует необходимые компоненты времени выполнения, такие как планирование потоков или сборщик мусора из «Substrate VM» - тривиальной версии виртуальной машины. Поскольку полученный собственный двоичный файл уже включает классы приложений, зависимости JDK и библиотеки, время запуска и выполнения значительно сокращается.

GraalVM Native Image официально поддерживается Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus и Vert.x Фреймворки Java.[19] Поддержка приложений Spring Boot находится в стадии разработки. В сентябре 2016 г. Oracle детально планирует добавить опережающую компиляцию в OpenJDK с использованием компилятора GraalVM для Java 9.[20][21] Это предложение, отслеживаемое JEP 295: Ahead-of-Time Compilation был включен в Java 9.[22] Экспериментальное использование GraalVM в качестве своевременный компилятор был добавлен для Linux x86-64 платформа для Java 10.[23]

Платформа реализации языка Truffle

В сотрудничестве с GraalVM Oracle Labs разработала язык абстрактное синтаксическое дерево интерпретатор под названием «Truffle», который позволит ему реализовывать языки поверх GraalVM.[24][25]

Каркас Truffle и его зависимая часть, GraalVM SDK, выпущены под Универсальная разрешительная лицензия версии 1.0 поощрять использование структуры для проектов, которые не хотят быть связаны авторскими или другими родительскими правами.

Инструментальная поддержка инструментов

Основное преимущество экосистемы GraalVM - не зависящий от языка, полностью динамический приборы поддержка встроена непосредственно в среду выполнения виртуальной машины. События выполнения могут быть захвачены API клиенты с чрезвычайно низкими накладными расходами в полностью оптимизированном коде.[26][27]

Базовая установка GraalVM предоставляет независимый от языка отладчик, профилировщик, средство просмотра кучи и другие средства, основанные на инструментарии и другой поддержке виртуальных машин.[14] GraalVM также включает внутреннюю реализацию протокола удаленной отладки Chrome Inspector.[28] Хотя изначально он был разработан для отладки JavaScript, его можно использовать для отладки всех языков GraalVM из браузера.

Поддержка языков и среды выполнения

GraalVM написан на и для Ява экосистема. Он может выполнять приложения, написанные на всех языках, которые компилируются в формат байт-кода Java, например Ява, Scala, Котлин, и больше.

На основе платформы Truffle Language Implementation дополнительные языки могут поддерживаться в GraalVM.

  • GraalVM JavaScript:[29] ECMAScript Совместимая с 2019 г. среда выполнения JavaScript с поддержкой Node.js
  • ТрюфельРубин:[30] Рубин языковая реализация с предварительной поддержкой Рубин на рельсах
  • FastR:[31] р языковая реализация
  • GraalVM Python:[32] Python 3-языковая реализация
  • GraalVM LLVM Runtime (СуЛонг):[33] LLVM реализация интерпретатора битового кода
  • GraalWasm:[34][35] А WebAssembly выполнение

Поддержка дополнительных языков может быть реализована пользователями GraalVM. Некоторые известные сторонние языковые реализации - grCuda,[36] SOMns,[37] TruffleSqueak,[38][39] и Йона.[40]

Рекомендации

  1. ^ «Примечания к выпуску GraalVM: 20.2.0». Корпорация Oracle. Получено 2020-06-03.
  2. ^ «Релизы - oracle / Graal - GitHub». 3 июня 2020.
  3. ^ "Загрузки Oracle GraalVM".
  4. ^ Релизы Github
  5. ^ "Загрузки".
  6. ^ "Часто задаваемые вопросы о GraalVM". Получено 2018-04-25.
  7. ^ "грааль / README.md". Получено 2018-04-25.
  8. ^ «Для создания программ, которые работают быстрее в любом месте: Oracle GraalVM Enterprise Edition». Корпорация Oracle. Получено 2019-05-09.
  9. ^ «OpenJDK: Грааль». openjdk.java.net.
  10. ^ "[JDK-8232118] Добавить параметр JVM для включения компиляторов JVMCI в режиме продукта - Система ошибок Java". bugs.openjdk.java.net.
  11. ^ а б c "Почему GraalVM". Получено 2018-04-25.
  12. ^ "Грааль: динамичный компилятор для Java". Lemondeinformatique.fr. 2012-02-13. Получено 2013-08-23.
  13. ^ «Справочное руководство для приложений Polyglot». Получено 2018-04-25.
  14. ^ а б «Инструменты отладки и мониторинга GraalVM». www.graalvm.org. Получено 2019-04-08. GraalVM предоставляет разработчикам, интеграторам и ИТ-администраторам набор инструментов для отладки и мониторинга GraalVM и развернутых приложений.
  15. ^ https://web.archive.org/web/20200529203136/https://adambien.blog/roller/abien/entry/meta_circularity_is_near_graalvm
  16. ^ «GraalVM 19.3: анонс GraalVM 19.3 с поддержкой JDK 11». Корпорация Oracle. Получено 2019-11-25.
  17. ^ ГраальВМ 20.1
  18. ^ Взгляд на GraalVM 20.0: лучшая поддержка Windows, лучшие нативные образы, лучший инструментарий
  19. ^ «Экосистема с открытым исходным кодом GraalVM». Корпорация Oracle. Получено 2019-09-11.
  20. ^ «Опережающая компиляция (AOT) может появиться в OpenJDK HotSpot в Java 9». InfoQ.com. 2016-10-01. Получено 2016-10-06. AOT представляет новый инструмент под названием jaotc, который использует Graal в качестве бэкэнда (для генерации кода).
  21. ^ Владимир Козлов (14.09.2016). «JDK-8166089: опережающая компиляция». Корпорация Oracle. Получено 2016-10-06. Перед запуском виртуальной машины скомпилируйте классы Java приложения в машинный код.
  22. ^ Владимир Козлов (13.10.2016). «JEP 295: опережающая компиляция». Корпорация Oracle. Получено 2016-10-13. Скомпилируйте классы Java в машинный код перед запуском виртуальной машины.
  23. ^ Владимир Козлов (2017-10-20). «JEP 317: экспериментальный JIT-компилятор на основе Java». Корпорация Oracle. Получено 2018-01-21. JEP 317: экспериментальный JIT-компилятор на основе Java
  24. ^ "Truffle: самооптимизирующаяся система выполнения" (PDF). Корпорация Oracle. Получено 2013-08-23.
  25. ^ «Трюфель подается в Holy Graal: Graal и Truffle для многоязычной интерпретации на JVM». 2017-12-05. Получено 2018-04-25.
  26. ^ Ван Де Вантер, Майкл; Ситон, Крис; Хаупт, Майкл; Хьюмер, Кристиан; Вюртингер, Томас (9 марта 2018 г.). «Быстрая, гибкая, инструментальная поддержка Polyglot для отладчиков и других инструментов». Искусство, наука и инженерия программирования. 2 (3, статья 14): 30. arXiv:1803.10201v1. Bibcode:2018arXiv180310201V. Дои:10.22152 / programming-journal.org / 2018/2/14.
  27. ^ «Начало работы с инструментами в GraalVM». www.graalvm.org. Получено 2019-04-08. Трюфель инструменты может отслеживать очень детализированные события времени выполнения на уровне виртуальных машин для профилирования, проверки и анализа поведения приложений, работающих на GraalVM.
  28. ^ "Chrome DevTools". developers.google.com. Получено 2019-04-08. Chrome DevTools - это набор инструментов для веб-разработчиков, встроенных непосредственно в браузер Google Chrome. DevTools может помочь вам редактировать страницы на лету и быстро диагностировать проблемы, что в конечном итоге поможет вам быстрее создавать лучшие веб-сайты.
  29. ^ Github репозиторий GraalVM JavaScript
  30. ^ Репозиторий TruffleRuby на github
  31. ^ Репозиторий GraalVM FastR на github
  32. ^ Репозиторий GraalPython на github
  33. ^ GraalVM LLVM Runtime репозиторий github
  34. ^ "Репозиторий GraalWasm на github".
  35. ^ Прокопец, Александр (2019-12-02). «Представляем GraalWasm - движок WebAssembly в GraalVM». Середина. Получено 2020-01-15.
  36. ^ grCuda GitHub репозиторий
  37. ^ Репозиторий SOMns на GitHub
  38. ^ Репозиторий TruffleSqueak на GitHub
  39. ^ Нифаус, Фабио; Фельгентрефф, Тим; Хиршфельд, Роберт (2019). "GraalSqueak: к платформе инструментов на основе Smalltalk для программирования полиглотов". Цифровая библиотека ACM. Получено 2020-11-08.
  40. ^ Йона язык

внешняя ссылка