GraalVM - GraalVM

GraalVM
Desenvolvedor (s) Oracle Corporation
Versão estável
21.2.0.1  Edite isso no Wikidata / 4 de agosto de 2021 ; 2 meses atrás ( 4 de agosto de 2021 )
Repositório
Escrito em Java
Sistema operacional Linux , Windows e macOS
Plataforma Máquina Virtual JAVA
Modelo Compilador dinâmico Java e tempo de execução
Licença Community Edition: GPLv2 Enterprise Edition: Trialware
Local na rede Internet www .graalvm .org

GraalVM é um Java VM e JDK baseado em HotSpot / OpenJDK , implementado 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 . A primeira versão pronta para produção, GraalVM 19.0, foi lançada em maio de 2019. A versão mais recente é GraalVM 21.0.0, disponibilizada em janeiro de 2021.

Os principais diferenciais do GraalVM em comparação com o JDK base são:

  • Compilador GraalVM , um compilador JIT para Java
  • GraalVM Native Image , permitindo a compilação antecipada de aplicativos Java
  • Framework de implementação de linguagem Truffle e GraalVM SDK , para implementar tempos de execução de linguagem de programação adicionais
  • Tempo de execução LLVM e tempo de execução JavaScript

Objetivos do projeto

  • Para melhorar o desempenho das linguagens baseadas na máquina virtual Java para corresponder ao desempenho das linguagens nativas.
  • Para reduzir o tempo de inicialização de aplicativos baseados em JVM, compilando-os antecipadamente com a tecnologia GraalVM Native Image.
  • Para permitir a integração do GraalVM no banco de dados Oracle, OpenJDK, Node.js, Android / iOS e para suportar embeddings personalizados semelhantes.
  • Para permitir a mistura livre de código de qualquer linguagem de programação em um único programa, faturado como " aplicativos poliglotas ".
  • Para incluir um conjunto de " ferramentas de programação poliglotas " facilmente estendido .

História

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, na esperança de liberar o desenvolvimento dos problemas de desenvolvimento em C ++, particularmente o gerenciamento de memória manual, e se beneficiar de otimizações metacirculares . Ao perceber que escrever tudo em Java era muito ambicioso como um primeiro passo, a decisão foi 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.

Graal foi incluído em versões Java VM baseadas em HotSpot como OpenJDK de Java 9 a 15, mas foi removido em Java 16 por falta de uso.

Lançamentos

GraalVM é um software pronto para produção, 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 Usuários Antigos. A Oracle Corporation anunciou o lançamento do Oracle GraalVM Enterprise Edition em 8 de maio de 2019. GraalVM pode substituir um JDK padrão em plataformas Linux e macOS em sistemas x86 de 64 bits.

GraalVM 20

GraalVM 20.3.0

GraalVM 20.3.0 foi lançado em novembro de 2020. Foi marcado como a primeira versão empresarial 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 o AST e código compilado de bibliotecas de bitcode comuns para ser compartilhado entre vários contextos em um único mecanismo.

GraalVM 20.1.0

GraalVM 20.1.0 foi lançado em maio de 2020. Ele incluiu várias melhorias para muitos dos componentes. Além de 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 ) aprimorado em compatibilidade com gemas nativas.

GraalVM 20.0.0

GraalVM 20.0.0 foi lançado em fevereiro de 2020. Melhorou seu suporte ao Windows, trouxe uma ferramenta de imagem nativa aprimorada e melhorou o suporte a ferramentas, entre muitas mudanças detalhadas no compilador e nas linguagens suportadas.

GraalVM 19

GraalVM 19.0.0

O suporte para Windows está atualmente em desenvolvimento e lançado como uma das primeiras funcionalidades do GraalVM 19.0.

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

Componentes

O compilador GraalVM é enviado com os componentes de uma máquina virtual Java normal ( OpenJDK ). Componentes adicionais sã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 substituto potencial para o motor Nashorn obsoleto , TRegex como um motor de expressão regular ).

Compilador GraalVM

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

Ele é lançado sob a GPL versão 2 com a exceção do classpath .

Imagem Nativa GraalVM

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

Esta funcionalidade suporta linguagens baseadas em JVM, mas pode opcionalmente executar linguagens dinâmicas, desenvolvidas em cima do GraalVM com framework Truffle. O arquivo executável não é executado em uma JVM e usa os componentes de tempo de execução necessários como agendamento de thread 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 e bibliotecas JDK, o tempo de inicialização e execução reduz significativamente.

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

O jaotccomando cria uma imagem nativa. A -XX:+EnableJVMCIProductbandeira experimental permite o uso do Graal JIT.

Estrutura de implementação da linguagem Truffle

Em associação com o GraalVM, o Oracle Labs desenvolveu um interpretador de árvore de sintaxe abstrata de linguagem chamado "Truffle" que permitiria implementar linguagens em cima do GraalVM. Muitas linguagens foram implementadas no Truffle, incluindo um interpretador C que afirma ser tão rápido quanto o GCC e o Clang.

A estrutura 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 da estrutura para projetos que não querem ser limitados por direitos autorais ou outros direitos parentais.

Suporte a ferramentas baseadas em instrumentação

Uma grande vantagem do ecossistema GraalVM é o suporte de instrumentação totalmente dinâmico, independente de linguagem , integrado diretamente no tempo de execução da VM. Os eventos de execução podem ser capturados por clientes API com sobrecarga extremamente baixa em código totalmente otimizado.

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

Suporte de idioma e tempo de execução

GraalVM é escrito em e para o ecossistema Java . Ele pode executar aplicativos escritos em todas as linguagens que compilam para o formato de bytecode Java, por exemplo, Java, Scala , Kotlin e muito mais.

Com base na estrutura de implementação da linguagem Truffle, linguagens adicionais podem ser suportadas no GraalVM.

  • GraalVM JavaScript: tempo de execução de JavaScript compatível com ECMAScript 2019, com suporte para Node.js
  • TruffleRuby: implementação da linguagem Ruby com suporte preliminar para Ruby on Rails
  • FastR: implementação da linguagem R
  • GraalVM Python: implementação da linguagem Python 3
  • GraalVM LLVM Runtime ( SuLong ): implementação do interpretador de bitcode LLVM
  • GraalWasm: uma implementação WebAssembly

O suporte para idiomas adicionais pode ser implementado por usuários do GraalVM. Algumas implementações notáveis ​​de linguagem de terceiros são grCuda, SOMns, TruffleSqueak e Yona.

Referências

links externos

Website oficial Edite isso no Wikidata