Oracle lançamento de máquina virtual universal , suportando a execução de aplicativos em JavaScript (Node.js), Python, Ruby, R, em qualquer linguagem para JVM (Java, Scala, Clojure, Kotlin) e linguagens para as quais pode ser gerado código de bit LLVM (C, C++, Rust). A versão 19.3 é classificada como uma versão de suporte a longo prazo (LTS) e com suporte , incluindo a capacidade de compilar código Java em arquivos executáveis (GraalVM Native Image). O código do projeto sob a licença GPLv2. Novas versões das implementações das linguagens Python, JavaScript, Ruby e R que utilizam GraalVM também foram lançadas — , , e .
GraalVM Compilador JIT que pode executar ao vivo na JVM qualquer código de linguagem de script, incluindo JavaScript, Ruby, Python e R, e também permite a execução de código nativo na JVM, convertido em código de bit LLVM. O conjunto de ferramentas fornecido pela GraalVM inclui um depurador independente de linguagens, sistema de perfilagem e analisador de distribuição de memória. A GraalVM permite a criação de aplicativos combinados com componentes em diferentes linguagens, permitindo acessar objetos e arrays a partir de código em outras linguagens. Para as linguagens baseadas em JVM, há a criação de arquivos executáveis compilados em código de máquina que podem ser executados diretamente com consumo mínimo de memória (gerenciamento de memória e threads é implementado através da conexão com o framework ).
:
- Compatibilidade garantida com Node.js 12.10.0;
- Propriedades globais e funções não padrão desativadas por padrão:
global (substituído por globalThis; uma configuração js.global-property é fornecida para reverter), performance (js.performance), print e printErr (js.print); - Implementados Promise.allSettled e a proposta de coalescência nullish, disponíveis no modo ECMAScript 2020 (‘—js.ecmascript-version=2020’);
- Dependências do ICU4J atualizadas para 64.2, ASM para 7.1.
no GraalPython:
- Adicionadas as funções de controle gc.{enable,disable,isenabled}, implementados charmap_build, sys.hexversion e _lzma;
- Biblioteca padrão do Python atualizada para 3.7.8;
- Suporte adicionado para NumPy 1.16.4 e Pandas 0.25.0;
- Suporte adicionado para timeit;
- socket.socket atualizado para permitir a execução de ‘graalpython -m http.server’ e carregar recursos http não criptografados (sem TLS);
- Corrigidos problemas relacionados à impressão de objetos pandas.DataFrame,
processamento incorreto de tuplas em bytes.startswith,
atribuições desestruturantes de iteradores e uso de dict.__contains__ para dicionários; - Suporte adicionado para ast.PyCF_ONLY_AST, que garantir o funcionamento do pytest;
- Adicionada PEP 498 (interpolação de strings em literais);
- flag «—python.EmulateJython» para importar classes JVM usando a sintaxe Python normal de importação e captura de exceções JVM do código Python;
- Melhorada a performance do parser, cache de exceções,
acesso a objetos Python a partir do código JVM. Melhorados os resultados em testes de desempenho para código Python e extensões nativas (a execução de extensões nativas sobre LLVM implica que o bitcode LLVM é passado para o GraalVM para compilação JIT).
em TruffleRuby:
- Para compilar extensões nativas, agora é aplicado um conjunto de ferramentas LLVM embutido, que cria tanto código nativo quanto bitcode. Isso significa que mais extensões nativas devem compilar por padrão, resolvendo a maioria dos problemas relacionados à vinculação;
- Instalação separada do LLVM para instalação de extensões nativas no TruffleRuby;
- Para instalação de extensões C++ no TruffleRuby, não é mais necessário instalar libc++ e libc++abi;
- Licença atualizada para EPL 2.0/GPL 2.0/LGPL 2.1, assim como no recente JRuby;
- Suporte adicionado para argumentos opcionais em GC.stat;
- Método Kernel#load com wrapper implementado e Kernel#spawn com :chdir;
- Adicionado rb_str_drop_bytes, notável por ser utilizado pelo OpenSSL;
- Incluídos extensões de gemas pré-instaladas necessárias para rails new no Rails 6;
- Para compilar extensões nativas, foram utilizados flags como no MRI;
- Realizadas otimizações de desempenho e redução no consumo de memória.
em FastR:
- Garantida compatibilidade com R 3.6.1;
- Adicionado suporte preliminar para execução de extensões nativas baseadas em LLVM. Ao construir pacotes nativos, o FastR é configurado para usar o conjunto de ferramentas LLVM embutido no GraalVM. Os arquivos binários resultantes conterão tanto código nativo quanto LLVM bitcode.
Pacotes pré-instalados também são construídos dessa forma.
FastR carrega e executa código nativo de extensões por padrão, mas, quando executado com a opção «—R.BackEnd=llvm», usará bitcode. O backend LLVM pode ser usado seletivamente para alguns pacotes R, especificando «—R.BackEndLLVM=pkg1,pkg2». Em caso de problemas ao instalar pacotes, você pode reverter tudo chamando fastr.setToolchain(«native») ou editando manualmente o arquivo $FASTR_HOME/etc/Makeconf; - Nesta versão, o FastR é entregue sem as bibliotecas GCC runtime;
- Corrigidas vazamentos de memória;
- Corrigidos problemas ao lidar com grandes vetores (>1GB);
- O grepRaw foi implementado, mas apenas para fixed=T.
Fonte: opennet.ru
