GraalVM

GraalVM
Deweloperzy Korporacja Oracle
Wersja stabilna
Edit this on Wikidata 22.3.0 / 25 października 2022 ; 4 miesiące temu ( 25 października 2022 )
Magazyn
Napisane w Jawa
System operacyjny Linux , Windows i macOS
Platforma Maszyna wirtualna Java
Typ Dynamiczny kompilator i środowisko wykonawcze Java
Licencja Wersja Community: GPLv2 Wersja Enterprise: wersja próbna
Strona internetowa www.graalvm.org _ _

GraalVM to Java VM i JDK oparty na HotSpot / OpenJDK , zaimplementowany w Javie . Obsługuje dodatkowe języki programowania i tryby wykonywania, takie jak kompilacja aplikacji Java z wyprzedzeniem w celu szybkiego uruchamiania i mniejszego zużycia pamięci . Pierwsza wersja gotowa do produkcji, GraalVM 19.0, została wydana w maju 2019 r. Najnowsza wersja to GraalVM 22.1.0, udostępniona w kwietniu 2022 r.

Główne cechy wyróżniające GraalVM w porównaniu z podstawowym JDK to:

  • GraalVM Compiler , kompilator JIT dla Javy
  • GraalVM Native Image , umożliwiający kompilację aplikacji Java z wyprzedzeniem
  • Truffle Language Implementation Framework i GraalVM SDK do implementacji dodatkowych środowisk uruchomieniowych języka programowania
  • Środowisko wykonawcze LLVM i środowisko wykonawcze JavaScript

Cele projektu

  • Aby poprawić wydajność języków opartych na wirtualnej maszynie Java, aby dopasować wydajność języków rodzimych.
  • Aby skrócić czas uruchamiania aplikacji opartych na JVM, kompilując je z wyprzedzeniem za pomocą technologii GraalVM Native Image.
  • Aby umożliwić integrację GraalVM z bazą danych Oracle, OpenJDK, Node.js, Android/iOS i wspierać podobne niestandardowe osadzania.
  • Aby umożliwić dowolne mieszanie kodu z dowolnego języka programowania w jednym programie, określanym jako „ aplikacje poliglockie ”.
  • Aby dołączyć łatwo rozszerzalny zestaw „ narzędzi do programowania poliglotów ”.

Historia

GraalVM ma swoje korzenie w projekcie Maxine Virtual Machine w Sun Microsystems Laboratories (obecnie Oracle Labs ). Celem było napisanie wirtualnej maszyny Java w samej Javie, mając nadzieję na uwolnienie rozwoju od problemów związanych z programowaniem w C++, zwłaszcza ręcznego zarządzania pamięcią, i skorzystanie z optymalizacji meta-kołowych . Po uświadomieniu sobie, że pisanie wszystkiego w Javie było zbyt ambitne jako pierwszy krok, podjęto decyzję o skupieniu się tylko na kompilatorze i podłączeniu go do Hotspot , aby ponownie wykorzystać jak najwięcej środowiska uruchomieniowego Hotspot. Kompilator GraalVM został uruchomiony ręcznie konwersja kodu kompilatora klienta Hotspot (o nazwie „C1”) na Javę, zastępując poprzedni kompilator Maxine.

wydań Java VM opartych na HotSpot, takich jak OpenJDK , od Java 9 do 15, w celu obsługi eksperymentalnej kompilacji z wyprzedzeniem. Został usunięty w Javie 16, ponieważ utrzymywanie zarówno wersji w JDK, jak i samodzielnej wersji GraalVM powodowało powielanie wysiłków. Podobną funkcjonalność do tworzenia natywnych plików wykonywalnych z projektów Java zapewnia obrazu natywnego w samodzielnych wersjach GraalVM.

Wydania

GraalVM jest dostępny jako Community Edition z licencją open source oraz jako Oracle GraalVM Enterprise Edition dostępny po zaakceptowaniu „Umowy licencyjnej OTN Oracle GraalVM Enterprise Edition z licencją na wczesne wersje”. Oracle Corporation ogłosiła wydanie Oracle GraalVM Enterprise Edition 8 maja 2019 r. GraalVM może zastąpić domyślny JDK na platformach Linux i macOS w 64-bitowych systemach x86.

GraalVM 22

GraalVM 22.1.0 GraalVM 22.1.0 został wydany w kwietniu 2022 roku.

GraalVM 22.0.0 GraalVM 22.0.0 został wydany w styczniu 2022 roku.

GraalVM 21

GraalVM 20

GraalVM 20.3.0

GraalVM 20.3.0 został wydany w listopadzie 2020 r. Został oznaczony jako pierwsza korporacyjna wersja GraalVM LTS i ostateczna wersja na 2020 r. Ta wersja obsługuje udostępnianie kodu w środowisku wykonawczym GraalVM LLVM, umożliwiając AST i skompilowany kod wspólnych bibliotek kodów bitowych być współużytkowane przez wiele kontekstów w ramach jednego silnika.

GraalVM 20.1.0

GraalVM 20.1.0 został wydany w maju 2020 roku. Zawierał kilka ulepszeń dla wielu komponentów. Oprócz ulepszeń wydajności opublikowano poprawki użyteczności dla obrazu natywnego . Silnik JavaScript domyślnie obsługuje wszystkie funkcje trybu ECMAScript 2020. Mechanizm wyrażeń regularnych ( TRegex ) używany przez JavaScript i Python obsługuje teraz wszystkie wyrażenia. Ruby ( TruffleRuby ) poprawiła kompatybilność z rodzimymi klejnotami.

GraalVM 20.0.0

GraalVM 20.0.0 został wydany w lutym 2020 roku. Poprawiono obsługę systemu Windows, wprowadzono ulepszone narzędzie obrazu natywnego i ulepszono obsługę narzędzi, a także wiele szczegółowych zmian w kompilatorze i obsługiwanych językach.

GraalVM 19

GraalVM 19.0.0

Wsparcie dla systemu Windows jest obecnie w fazie rozwoju i jest udostępniane jako wczesna funkcjonalność w GraalVM 19.0.

GraalVM 19.0 jest oparty na JDK w wersji 8u212.

składniki

Kompilator GraalVM jest dostarczany z komponentami normalnej maszyny wirtualnej Java ( OpenJDK ). Dodatkowe komponenty są zawarte w GraalVM w celu obsługi nowych trybów wykonywania ( GraalVM Native Image ) lub języków programowania ( środowisko wykonawcze LLVM , GraalVM JavaScript jako potencjalny zamiennik przestarzałego silnika Nashorn , TRegex jako silnik wyrażeń regularnych ).

Kompilator GraalVM

GraalVM Compiler to nowoczesny kompilator Java just-in-time . Uzupełnia lub zastępuje istniejące kompilatory (C1/C2 w HotSpot ). W przeciwieństwie do istniejących kompilatorów, kompilator GraalVM jest napisany w Javie w sposób modułowy, łatwy w utrzymaniu i rozszerzalny.

Jest wydany na licencji GPL w wersji 2 z wyjątkiem ścieżki klas .

Natywny obraz GraalVM

GraalVM Native Image to technologia kompilacji z wyprzedzeniem, która tworzy wykonywalne pliki binarne plików klas. Jest wydawany jako wtyczka dla wczesnych użytkowników, co oznacza, że ​​jest gotowy do produkcji, ale może zawierać aktualizacje niekompatybilne z backportem w przyszłych wydaniach.

Ta funkcjonalność obsługuje języki oparte na JVM, ale opcjonalnie może uruchamiać języki dynamiczne, opracowane na bazie GraalVM z frameworkiem Truffle. Plik wykonywalny nie działa na JVM i wykorzystuje niezbędne komponenty środowiska uruchomieniowego, takie jak szeregowanie wątków lub GC z „Substrate VM” – trywialnej wersji maszyny wirtualnej. Ponieważ wynikowy natywny plik binarny zawiera już klasy aplikacji, zależności JDK i biblioteki, czas uruchamiania i wykonywania znacznie się skraca.

GraalVM Native Image jest oficjalnie wspierany przez frameworki Java Fn, Gluon, Helidon, Micronaut , Picocli, Quarkus , Vert.x i Spring Boot . We wrześniu 2016 r. Oracle szczegółowo planuje dodać kompilację z wyprzedzeniem do OpenJDK przy użyciu kompilatora GraalVM dla języka Java 9 . Ta propozycja, śledzona przez JEP 295: Ahead-of-Time Compilation, została uwzględniona w Javie 9. Eksperymentalne użycie GraalVM jako kompilatora just-in-time zostało dodane dla platformy Linux x86-64 dla Javy 10 .

W wersjach JDK od 9 do 15 polecenie jaotc tworzy obraz natywny. Eksperymentalna flaga -XX:+EnableJVMCIProduct umożliwia użycie Graala JIT. Funkcjonalność jest od tego czasu dostępna w obrazu natywnego samodzielnych wydań GraalVM.

Ramy implementacji języka Truffle

We współpracy z GraalVM firma Oracle Labs opracowała interpreter abstrakcyjnego drzewa składni języka o nazwie „Truffle”, który umożliwiłby implementację języków na GraalVM. W Truffle zaimplementowano wiele języków, w tym C , który twierdzi, że jest tak szybki jak GCC i Clang .

Framework Truffle i jego zależna część, GraalVM SDK, są udostępniane na licencji Universal Permissive License, wersja 1.0, aby zachęcić do korzystania z frameworka w projektach, które nie chcą być związane prawami autorskimi lub innymi prawami rodzicielskimi.

Wsparcie narzędziowe oparte na oprzyrządowaniu

Główną zaletą ekosystemu GraalVM jest niezależna od języka , w pełni dynamiczna obsługa instrumentacji wbudowana bezpośrednio w środowisko wykonawcze VM. Zdarzenia wykonania mogą być przechwytywane przez API z narzutem, który jest wyjątkowo niski w przypadku w pełni zoptymalizowanego kodu.

Podstawowa instalacja GraalVM zapewnia niezależny od języka debugger, profiler, przeglądarkę sterty i inne oparte na oprzyrządowaniu i obsłudze innych maszyn wirtualnych. GraalVM zawiera również implementację zaplecza protokołu zdalnego debugowania Chrome Inspector. Chociaż pierwotnie zaprojektowany do debugowania JavaScript, może być używany do debugowania wszystkich języków GraalVM z poziomu przeglądarki.

Obsługa języków i środowiska wykonawczego

GraalVM jest napisany w ekosystemie Java i dla niego . Może uruchamiać aplikacje napisane we wszystkich językach, które kompilują się do kodu bajtowego Java , np. Java, Scala , Kotlin i inne.

W oparciu o framework Truffle Language Implementation, GraalVM może obsługiwać dodatkowe języki.

  • GraalVM JavaScript: środowisko uruchomieniowe JavaScript zgodne z ECMAScript 2021, z obsługą Node.js
  • TruffleRuby: Implementacja języka Ruby ze wstępną obsługą Ruby on Rails
  • FastR: implementacja języka R
  • GraalVM Python: Implementacja języka Python 3
  • GraalVM LLVM Runtime ( SuLong ): Implementacja interpretera kodów bitowych LLVM
  • GraalWasm: Implementacja WebAssembly

Obsługa dodatkowych języków może być zaimplementowana przez użytkowników GraalVM. Niektóre godne uwagi implementacje języków innych firm to grCuda, SOMns, TruffleSqueak i Yona.

Linki zewnętrzne

Oficjalna strona internetowa Edit this at Wikidata