GraalVM

Z Denik

Přejít na: navigace, hledání

V současnosti běžně používáné virtuální stroje umí rychle vykonávat programy napsané v jednom jazyce, či malé množině sobě podobných jazyků. Překladače, správu paměti a vývojové či ladící nástroje je tedy třeba psát znovu a znovu téměř od začátku. To komplikuje život nejen tvůrcům virtuální strojů, ale i vývojářům, jež je používají. Nekonzistetní rychlostní chararkteristiky, úplně odlišná vývojová prostředí, nové způsoby konfigurace. To vše musí člověk zvládnout při přechodu z jednoho vývojového ekosystému na jiný. Problémy se ještě znásobí, povšimneme-li si obtížnosti a složitosti komunikace mezi programy napsanými v různých jazycích. To obvykle vyžaduje nákladnou serializaci a opětnou deserializaci datových struktur při volání z jednoho systému do jiného, což je operace, jež bezpečně zabije rychlost jakéhokoli výpočtu. Navíc jsou v současnosti nejvýkonnější virtuální stroje složití bumbrlíčci více připomínající operační systém než něco, co byste si chtěli vložit do svého programu jako knihovnu.


Obsah

OracleLabs

Je tomu již několik let, co se OracleLabs rozhodly založit novou výzkumnou skupinu zaměřenou na překonání výše uvedených nedostatků. Naší vizí je vytvořit univerzální VM, která by poskytla tu nejvyšší výkonnost pro libovolné programovací jazyky a tudíž překonala současná omezení v komunikaci mezi jednotlivými programy a jejich knihovnami. Kromě toho by takováto univerzální architektura poskytla sjednocenou, jazykově nezávislou platformu pro tvorbu nástrojů, zjednodušila jejich použití a údržbu. Při našem důrazu na snadnost začlenění této platformy do existujících a nově vznikajících systémů, by pak mělo stačil přidat tuto univerzální knihovnu a okamžitě by byl k dispozici jakýkoli z téměř neomezeného spektra jazyků.


Abychom tohoto cíle dosáhli, rozhodli jsme se vydat zcela novým směrem výzkumu a po letech experimentování jsme schopni nabídnout systém, který z těchto revolučních myšlenek těží. GraalVM je nejen univerzální virtuální stroj, ale především celý ekosystém navržený pro polyglotní svět!


GraalVM dodá každému jazyku rychlost a navíc jej propojí s nulovým zpomalením s jakýmkoli jiným. Místo přetváření datových struktur na rozhraní mezi jazyky, objekty používané v GraalVM mohou plynule a bez omezení přecházet mezi jazyky, jež s nimi mohou přirozeně pracovat. Vytvářet vícejazyčné aplikace ještě nikdy nebylo snažší. Máte vlastní knihovnu v Javě a chtěli byste ji použít v node.js? Napsal váš kolega algoritmus v Pythonu a vy byste jej chtěli volat z Java aplikace? Provádíte statistické výpočty a zobrazení v jazyce R a máte data vypočtena jiným jazykem? Není problém! GraalVM dává vývojářům svobodu použít programovací jazyk nejvhodnější pro dané účely.


GraalVM

Univerzální virtuální stroj GraalVM vám umožní spouštět:

  • jazyky postavené nad JVM jako je Java, Scala, Groovy nebo Kotlin
  • JavaScript - samostatně či v rámci node.js
  • jazyky přeložitelné do LLVM bitkódu jako je C, C++ či Rust
  • experimentální verze jazyků Ruby, R a Python

GraalVM lze použít buď samostatně a nebo ji začlenit do existujících systémů jako je OpenJDK, node.js či dokonce integrovat do databází jako je MySQL a nebo Oracle RDBMS. Zvláštní pozornost byla věnována vytvoření efektivního mechanismu pro zpřístupnění dat těchto systémů z jazyků běžících uvnitř GraalVM a to bez zbytečných konverzí či alokací proxy objektů. Jazyky mohou tudíž operovat nad daty ve formátech, které se již používají a při tom zachovat tu nejvyšší rychlost provádění.

Pro jazyky založené nad JVM nabízí GraalVM nástroj umožňující vytvoření spustitelných, samostatně distribuovatelných EXE souborů (případně .so či .dylib knihoven) s okamžitou inicializací a menšími paměťovými nároky. Tento nástroj provádí statickou analýzu kódu s cílem nalezení částí, které se skutečně mohou v průběhu běhu programu použít. Po té provede úplný ahead-of-time překlad a vytvoří samostatně použitelný soubor pro daný operační systém. Takto vytvořenou knihovnu lze spojit s ostatními přeložitelnými programy a případně i přibalit GraalVM kompilátor pro just-in-time překlad dynamických jazyků.

Neopomenutelnou součástí GraalVM' ekosystému je i podpora pro tvorbu jazykově nezávislých nástrojů. Standardní distribuce GraalVM nabízí debugger, profiler a nástroj na analýzu paměti. Tyto nástroje byly vytvořeny nad stabilním instrumentačním API. Výzkumné týmy a nezávislí vývojáři mají tudíž možnost postavit své existující či nové nástroje nad tímto API a získat tak přístup k uživatelům jakéhokoli jazyku implementovaného pro GraalVM. Věříme, že GraalVM může být univerzálním virtuálním strojem propojujícím nástroje a jazyky v synergii dosud nedosažitelné.

Produkční nasazení

Jednou z nejznámějších společností jež těží z revolučních vlastností GraalVM je Twitter, který takto spouští své tvítovací Scala mikroslužby. Díky agresivním optimalizacím je totiž GraalVM překladač schopen zredukovat alokace objektů a urychlit tak celkovou rychlost výpočtů. Díky méně alokovaným objektům je totiž třeba třeba trávit méně času při úklidu pomocí garbage kolektoru, méně přerušovat běh uživatelského výpočtu a celkově snížit energetické náklady provozování globální komunikační služby jakou Twitter je. Více o tom, jak Twitter šetří náklady díky GraalVM lze nalézt v prezentaci Twitter JVM inženýra. V současnosti můžeme s čistým svědomím doporučit produkční nasazení GraalVM pro běh jazyků založených nad JVM, pro JavaScript (samostatně či společně s node.js). Jazyky jako R, Ruby či Python jsou zatím vhodné spíše pro experimentování.

Jak začít?

The binary of the GraalVM v1.0 (release candidate) Community Edition (CE) on GitHub built from the GraalVM open source repository is available here [1]. We are looking for feedback from the community for this release candidate. We welcome feedback in the form of GitHub issues [2] or GitHub pull requests [3]. In addition to the GraalVM Community Edition available here, we also provide the GraalVM v1.0 (release candidate) Enterprise Edition (EE) for better security, scalability and performance in production environments. GraalVM EE is available on Oracle Cloud Infrastructure and <here> for evaluation. For production use of GraalVM EE, please contact graalvm- enterprise_grp_ww@oracle.com. Stay Connected The latest up-to-date downloads and documentation can be found at http://www.graalvm.org. For following our daily development or to connect with requests for enhancements or reporting issues, please go to our GitHub repository at http://www.github.org/oracle/graal. We also maintain the following public mailing lists for GraalVM open for subscriptions: - graalvm-announce@oss.oracle.com - graalvm-users@oss.oracle.com - graalvm-dev@oss.oracle.com We maintain the @graalvm alias on Twitter and watch for any tweet or stackoverflow question with the #graalvm hash tag.

Future

This first release is only the beginning. We are working on improving all aspects of GraalVM; in particular the support for Python, R and Ruby. GraalVM is an open ecosystem and we encourage building your own languages or tools on top of it. We want to make GraalVM a collaborative project enabling standardized language execution and a rich set of language-agnostic tooling. Please find more at http://www.graalvm.org on how to: • build your own language to run on GraalVM • build your own language-agnostic tools • or embed GraalVM in your own application We are looking forward to build this next generation technology for a polyglot world together with you!