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