GraalVM

Origem: Wikipédia, a enciclopédia livre.
GraalVM
Desenvolvedor Oracle Corporation
Plataforma Maquina Virtual Java
Versão estável 22.3.0[1] (25 de outubro de 2022; há 17 meses)
Idioma(s) Inglês
Escrito em Java
Sistema operacional Linux,Windows e macOS[2]
Licença Community Edition: GPLv2[3][4] Enterprise Edition: Trialware
Página oficial GraalVM site oficial
Repositório GitHub GraalVM

GraalVM é uma Java VM e JDK baseada em HotSpot / OpenJDK, implementada em Java . Ele oferece suporte a linguagens de programação e modos de execução adicionais, como compilação antecipada de aplicativos Java para inicialização rápida e baixo consumo de memória (Memory footprint) . A primeira versão pronta para produção, GraalVM 19.0, foi lançada em maio de 2019.[1] Já a versão mais recente é a GraalVM 22.3.0, disponibilizada em 25 de outubro de 2022.

As maiores diferenciais do GraalVM em comparação com o JDK base são:

  • GraalVM Compiler, um compilador JIT para Java
  • GraalVM Native Image, permitindo a compilação antecipada de aplicações Java
  • Truffle Language Implementation framework e GraalVM SDK, para implementar runtimes de linguagem de programação adicionais
  • LLVM Runtime e JavaScript Runtime

Objetivos do projeto[editar | editar código-fonte]

  • Melhorar o desempenho das linguagens baseadas na máquina virtual Java para corresponder ao desempenho das linguagens nativas.[2][3]
  • Reduzir o tempo de inicialização de aplicativos baseados em JVM, compilando-os antecipadamente com a tecnologia GraalVM Native Image.
  • Habilitar a integração do GraalVM no banco de dados Oracle, OpenJDK, Node.js, Android/iOS e oferecer suporte a incorporações personalizadas semelhantes.
  • Para permitir a mistura livre de código de qualquer linguagem de programação em um único programa, anunciado como "aplicativos poliglotas ".[2][4]
  • Para incluir um conjunto facilmente estendido de " ferramentas de programação poliglota ".[2][5]

História[editar | editar código-fonte]

GraalVM tem suas raízes no projeto Maxine Virtual Machine no Sun Microsystems Laboratories (agora Oracle Labs ). O objetivo era escrever uma máquina virtual Java no próprio Java, esperando solucionar o desenvolvimento dos problemas do desenvolvimento em C++, particularmente o gerenciamento manual de memória, e se beneficiar de otimizações metacirculares . Ao perceber que escrever tudo em Java era uma tarefa bastante complicada para um primeiro passo, decidiu-se focar apenas no compilador e conectá-lo ao Hotspot, para reutilizar o máximo possível o tempo de execução do Hotspot. O compilador GraalVM foi iniciado convertendo manualmente o código do compilador cliente Hotspot (denominado "C1") em Java, substituindo o compilador Maxine anterior.[6]

Graal foi incluído em versões de Java VM baseadas em HotSpot como OpenJDK de Java 9 a 15, a fim de oferecer suporte à compilação experimental antecipada. Ele foi removido no Java 16, pois manter a versão no JDK e o lançamento independente do GraalVM causava esforço duplicado.[7] Uma funcionalidade semelhante para criar executáveis nativos a partir de projetos Java é fornecida pela ferramenta de imagem nativa de versões independentes do GraalVM.

Lançamentos[editar | editar código-fonte]

GraalVM está disponível como Community Edition para uma licença de código aberto e como Oracle GraalVM Enterprise Edition acessível ao aceitar o "Contrato de Licença OTN Oracle GraalVM Enterprise Edition Incluindo Licença para Versões de Adoção Inicial". A Oracle Corporation anunciou o lançamento do Oracle GraalVM Enterprise Edition em 8 de maio de 2019.[8] GraalVM pode substituir um JDK padrão em plataformas Linux e macOS em sistemas x86 de 64 bits.

Graal VM 22[editar | editar código-fonte]

GraalVM 22.3.0 GraalVM 22.3.0 foi lançado em outubro de 2022.[9]

GraalVM 22.2.0 GraalVM 22.2.0 foi lançado em julho de 2022.[10]

GraalVM 22.1.0 GraalVM 22.1.0 foi lançado em abril de 2022.[11]

GraalVM 22.0.0 GraalVM 22.0.0 foi lançado em janeiro de 2022.

Graal VM 21[editar | editar código-fonte]

Graal VM 20[editar | editar código-fonte]

GraalVM 20.3.0 foi lançado em novembro de 2020.[12] Foi marcada como a primeira versão corporativa LTS do GraalVM e como o lançamento final para 2020. Esta versão suporta compartilhamento de código no tempo de execução GraalVM LLVM, permitindo que o AST e o código compilado de bibliotecas de bitcode comuns sejam compartilhados entre vários contextos em um único mecanismo.

GraalVM 20.3.0 foi lançado em novembro de 2020.[12] Foi marcada como a primeira versão corporativa LTS do GraalVM e como o lançamento final para 2020. Esta versão suporta compartilhamento de código no tempo de execução GraalVM LLVM, permitindo que o AST e o código compilado de bibliotecas de bitcode comuns sejam compartilhados entre vários contextos em um único mecanismo.

Graal VM 20.1.0

GraalVM 20.1.0 foi lançado em maio de 2020.[13] Ele incluiu várias melhorias para muitos dos componentes. Além das melhorias de desempenho, foram publicadas correções de usabilidade para imagens nativas . O mecanismo JavaScript oferece suporte a todos os recursos do modo ECMAScript 2020 por padrão. O mecanismo de expressão regular ( TRegex ) usado por JavaScript e Python suporta todas as expressões agora. Ruby ( TruffleRuby ) melhorado em compatibilidade com gems nativas.

Graal VM 20.0.0

GraalVM 20.0.0 foi lançado em fevereiro de 2020.[14] Ele melhorou em seu suporte ao Windows, trouxe uma ferramenta de imagem nativa aprimorada e melhorou o suporte de ferramentas, entre muitas alterações detalhadas no compilador e nas linguagens suportadas.

Graal VM 19[editar | editar código-fonte]

Graal VM 19.0.0

O suporte no Windows está atualmente em desenvolvimento e lançado como uma funcionalidade de adoção inicial no GraalVM 19.0.

O GraalVM 19.0 é baseado no JDK versão 8u212.

Componentes[editar | editar código-fonte]

O compilador GraalVM é enviado com os componentes de uma máquina virtual Java normal ( OpenJDK ). Componentes adicionais estão incluídos no GraalVM para suportar novos modos de execução ( GraalVM Native Image ) ou linguagens de programação ( LLVM runtime, GraalVM JavaScript como um possível substituto para o obsoleto mecanismo Nashorn, TRegex como um mecanismo de expressão regular ).

GraalVM Compiler[editar | editar código-fonte]

O GraalVM Compiler é um moderno compilador Java just-in-time . Ele complementa ou substitui os compiladores existentes (C1/C2 em HotSpot ). Em contraste com os compiladores existentes, o compilador GraalVM é escrito de maneira modular, sustentável e extensível no próprio Java.

É lançado sob GPL versão 2 com a exceção de classpath .

GraalVM Native Image[editar | editar código-fonte]

GraalVM Native Image é uma tecnologia de compilação avançada que produz binários executáveis de arquivos de classe.[15] Ele é lançado como um plug-in de adoção inicial, o que significa que está pronto para produção, mas pode incluir atualizações incompatíveis de backport em versões futuras.

Esta funcionalidade suporta linguagens baseadas em JVM, mas opcionalmente pode executar linguagens dinâmicas, desenvolvidas sobre GraalVM com framework Truffle. O arquivo executável não é executado em uma JVM e usa componentes de tempo de execução necessários como agendamento de encadeamento ou GC de “Substrate VM” - uma versão trivial de uma máquina virtual. Como o binário nativo resultante já inclui classes de aplicativos, dependências JDK e bibliotecas, o tempo de inicialização e execução é reduzido significativamente.

GraalVM Native Image é oficialmente suportado pelos frameworks Fn, Gluon, Helidon, Micronaut, Picocli, Quarkus, Vert.x e Spring Boot Java.[16][17] Em setembro de 2016, a Oracle detalhou planos para adicionar compilação antecipada ao OpenJDK usando o compilador GraalVM para Java 9 .[18][19] Esta proposta, rastreada pela JEP 295: Ahead-of-Time Compilation, foi incluída no Java 9.[20] O uso experimental do GraalVM como um compilador just-in-time foi adicionado para a plataforma Linux x86-64 para Java 10 .[21]

Nas versões 9 a 15 do JDK, o comando jaotc cria uma imagem nativa.[22] O sinalizador experimental -XX:+EnableJVMCIProduct habilita o uso do Graal JIT.[23] Desde então, a funcionalidade está disponível no componente de imagem nativa das versões autônomas do GraalVM.[24]

Truffle Language Implementation Framework[editar | editar código-fonte]

Em associação com o GraalVM, o Oracle Labs desenvolveu um interpretador de árvore de sintaxe abstrata de linguagem chamado "Truffle" que permitiria a implementação de linguagens sobre o GraalVM.[25][26] Muitas linguagens foram implementadas no Truffle, incluindo um interpretador C que afirma ser tão rápido quanto o GCC e o Clang .[27]

O framework Truffle e sua parte dependente, GraalVM SDK, são lançados sob a Licença Permissiva Universal, versão 1.0, para encorajar o uso do framework para projetos que não querem estar vinculados aos direitos autorais ou outros direitos dos pais.

Suporte de ferramenta baseado em instrumentação[editar | editar código-fonte]

Uma grande vantagem do ecossistema GraalVM é o suporte de instrumentação totalmente dinâmica e independente de linguagem integrada diretamente no tempo de execução da VM. Eventos de execução podem ser capturados por clientes de API com sobrecarga extremamente baixa em código totalmente otimizado.[28][29]

A instalação principal do GraalVM fornece um depurador independente de idioma, criador de perfil, visualizador de heap e outros com base em instrumentação e outro suporte de VM.[5] O GraalVM também inclui uma implementação de back-end do protocolo de depuração remota do Chrome Inspector.[30] Embora projetado originalmente para depuração de JavaScript, ele pode ser usado para depurar todas as linguagens GraalVM a partir de um navegador.

Suporte de linguagens e tempo de execução[editar | editar código-fonte]

GraalVM é escrito em e para o ecossistema Java . Ele pode executar aplicações escritas em todas as linguagens que compilam no formato Java bytecode, por exemplo Java, Scala, Kotlin e muito mais.

Com base na estrutura de implementação de linguagem Truffle, idiomas adicionais podem ser suportados no GraalVM.

  • GraalVM JavaScript: [31] JavaScript runtime compatível com ECMAScript 2021, com suporte para Node.js
  • TruffleRuby: [32] Implementação da linguagem Ruby com suporte preliminar para Ruby on Rails
  • FastR: [33] Implementação da linguagem R
  • GraalVM Python: [34] Implementação da linguagem Python 3
  • GraalVM LLVM Runtime ( SuLong ): [35] Implementação do interpretador de bitcode LLVM
  • GraalWasm: [36][37] Uma implementação WebAssembly

O suporte para idiomas adicionais pode ser implementado pelos usuários do GraalVM. Algumas implementações importantes para linguagem de terceiros são grCuda,[38] SOMns,[39] TruffleSqueak,[40][41] e Yona.[42]

Referências[editar | editar código-fonte]

  1. «For Building Programs That Run Faster Anywhere: Oracle GraalVM Enterprise Edition». Oracle Corporation. Consultado em 21 de janeiro de 2022 
  2. a b c «Why GraalVM». Consultado em 25 de abril de 2018 
  3. «Graal : Un compilateur dynamique pour Java». lemondeinformatique.fr. 13 de fevereiro de 2012. Consultado em 23 de agosto de 2013 
  4. «Reference Manual for Polyglot Applications». Consultado em 25 de abril de 2018 
  5. a b «GraalVM Debugging and Monitoring Tools». www.graalvm.org. Consultado em 8 de abril de 2019 
  6. «"Meta-Circularity is Near", GraalVM, Truffle--airhacks.fm podcast : Adam Bien's Weblog». Cópia arquivada em 29 de maio de 2020 
  7. «[JDK-8255616] Removal of experimental features AOT and Graal JIT». bugs.openjdk.java.net. Consultado em 13 de março de 2021 
  8. «GraalVM 19.3: Announcing GraalVM 19.3 with JDK 11 Support». Oracle Corporation. 20 de novembro de 2019. Consultado em 25 de novembro de 2019 
  9. «22.3.0». www.graalvm.org (em inglês). Consultado em 27 de novembro de 2022 
  10. «22.2.0». www.graalvm.org (em inglês). Consultado em 27 de novembro de 2022 
  11. «GraalVM Release Notes 22.1.0» (em inglês). 26 de abril de 2022. Consultado em 26 de abril de 2022 
  12. a b Šelajev, Oleg (20 de novembro de 2020). «GraalVM 20.3 is available». Medium (em inglês). Consultado em 31 de dezembro de 2020 
  13. GraalVM 20.1
  14. A look at GraalVM 20.0: better Windows support, better Native Images, better tooling
  15. «Native Images». www.graalvm.org. Arquivado do original em 20 de abril de 2018 
  16. «GraalVM Open Source Ecosystem». Oracle Corporation. Consultado em 11 de setembro de 2019 
  17. «Spring Native Image documentation». Spring Framework. Consultado em 26 de outubro de 2021 
  18. «Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9». InfoQ.com. 1 de outubro de 2016. Consultado em 6 de outubro de 2016 
  19. Vladimir Kozlov (14 de setembro de 2016). «JDK-8166089: Ahead-of-Time Compilation». Oracle Corporation. Consultado em 6 de outubro de 2016 
  20. Vladimir Kozlov (13 de outubro de 2016). «JEP 295: Ahead-of-Time Compilation». Oracle Corporation. Consultado em 13 de outubro de 2016 
  21. Vladimir Kozlov (20 de outubro de 2017). «JEP 317: Experimental Java-Based JIT Compiler». Oracle Corporation. Consultado em 21 de janeiro de 2018 
  22. «OpenJDK: Graal». openjdk.java.net 
  23. «[JDK-8232118] Add JVM option to enable JVMCI compilers in product mode». bugs.openjdk.java.net 
  24. «GraalVM: Reference Manual: Native Image». graalvm.org 
  25. «Truffle: A Self-Optimizing Runtime System» (PDF). Oracle Corporation. Consultado em 23 de agosto de 2013 
  26. «Truffle served in a Holy Graal: Graal and Truffle for polyglot language interpretation on the JVM». 5 de dezembro de 2017. Consultado em 25 de abril de 2018 
  27. «Truffle: Languages and Material». Gist (em inglês) 
  28. Van De Vanter, Michael; Seaton, Chris; Haupt, Michael; Humer, Christian; Würthinger, Thomas (9 de março de 2018). «Fast, Flexible, Polyglot Instrumentation Support for Debuggers and other Tools». The Art, Science, and Engineering of Programming. 2 (3, Article 14). 30 páginas. arXiv:1803.10201Acessível livremente. doi:10.22152/programming-journal.org/2018/2/14 
  29. «Getting started with Instruments in GraalVM». www.graalvm.org. Consultado em 8 de abril de 2019 
  30. «Chrome DevTools». developers.google.com. Consultado em 8 de abril de 2019 
  31. GraalVM JavaScript github repository
  32. TruffleRuby github repository
  33. GraalVM FastR github repository
  34. GraalPython github repository
  35. GraalVM LLVM Runtime github repository
  36. «GraalWasm github repository». GitHub 
  37. Prokopec, Aleksandar (2 de dezembro de 2019). «Announcing GraalWasm — a WebAssembly engine in GraalVM». Medium (em inglês). Consultado em 15 de janeiro de 2020 
  38. grCuda GitHub repository
  39. SOMns GitHub repository
  40. TruffleSqueak GitHub repository
  41. Niephaus, Fabio; Felgentreff, Tim; Hirschfeld, Robert (2019). «GraalSqueak: Toward a Smalltalk-based Tooling Platform for Polyglot Programming». Proceedings of the 16th ACM SIGPLAN International Conference on Managed Programming Languages and Runtimes - MPLR 2019. [S.l.]: ACM Digital Library. pp. 14–26. ISBN 9781450369770. doi:10.1145/3357390.3361024 
  42. Yona Language

Ligações externas[editar | editar código-fonte]

GrallVM site oficial