ProHoster > Blog > notícias da internet > Versão 19.3.0 da máquina virtual GraalVM e implementações de Python, JavaScript, Ruby e R baseadas nela
Versão 19.3.0 da máquina virtual GraalVM e implementações de Python, JavaScript, Ruby e R baseadas nela
Empresa Oracle publicado lançamento de uma máquina virtual universal GraalVM 19.3.0, que suporta a execução de aplicativos em JavaScript (Node.js), Python, Ruby, R, quaisquer linguagens para JVM (Java, Scala, Clojure, Kotlin) e linguagens para as quais o bitcode LLVM pode ser gerado (C, C++ , Ferrugem). A versão 19.3 é classificada como uma versão Long Term Support (LTS) e notável apoio JDK11, incluindo a capacidade de compilar código Java em arquivos executáveis (GraalVM Native Image). Código do projeto distribuído por licenciado sob GPLv2. Ao mesmo tempo, foram lançadas novas versões de implementações de linguagem Python, JavaScript, Ruby e R usando GraalVM - GraalPython, Graal JS, TrufaRubi и RápidoR.
GraalVMName fornece Um compilador JIT que pode executar código de qualquer linguagem de script dinamicamente na JVM, incluindo JavaScript, Ruby, Python e R, e também torna possível executar código nativo na JVM convertido em bitcode LLVM. As ferramentas fornecidas pelo GraalVM incluem um depurador independente de linguagem, um sistema de criação de perfil e um analisador de alocação de memória. O GraalVM possibilita a criação de aplicações combinadas com componentes em diferentes linguagens, permitindo acessar objetos e arrays a partir de códigos em outras linguagens. Para linguagens baseadas em JVM existe oportunidade 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 (o gerenciamento de memória e thread é implementado através da conexão da estrutura VM de substrato).
A compatibilidade com Node.js 12.10.0 é garantida;
Propriedades e funções globais não padrão são desativadas por padrão:
global (substituído por globalThis, configurando js.global-property para retornar), performance (js.performance), print e printErr (js.print);
Implementada proposta de coalescência Promise.allSettled e nullish, que estão disponíveis no modo ECMAScript 2020 (“-js.ecmascript-version=2020”);
Dependências ICU4J atualizadas para 64.2, ASM para 7.1.
Adicionados stubs gc.{enable,disable,isenabled}, implementados charmap_build, sys.hexversion e _lzma;
Biblioteca padrão Python 3.7.8 atualizada;
Adicionado suporte para NumPy 1.16.4 e Pandas 0.25.0;
Adicionado suporte de tempo;
socket.socket foi levado a um estado que permite executar “graalpython -m http.server” e carregar recursos http não criptografados (sem TLS);
Corrigidos problemas com a exibição de objetos pandas.DataFrame.
processamento incorreto de tuplas em bytes.startswith,
desestruturação de atribuição de iteradores e uso de dict.__contains__ para dicionários;
Adicionado suporte para ast.PyCF_ONLY_AST, que permitido garantir que o pytest funcione;
Adicionado por apoiar PEP 498 (interpolação de strings em literais);
Implementado o sinalizador “--python.EmulateJython” para importar classes JVM usando sintaxe de importação normal do Python e capturar exceções JVM do código Python;
Melhor desempenho do analisador, cache de exceções,
acessando objetos Python a partir do código JVM. Resultados aprimorados em testes de desempenho para código python e extensões nativas (executar extensões nativas sobre llvm implica que o bitcode llvm seja passado para GraalVM para compilação JIT).
Para compilar extensões nativas, o kit de ferramentas LLVM integrado agora é usado, criando código nativo e bitcode. Isso significa que mais extensões nativas devem ser compiladas imediatamente, eliminando a maioria dos problemas de vinculação;
Instalação separada do LLVM para instalação de extensões nativas no TruffleRuby;
A instalação de extensões C++ no TruffleRuby não requer mais a instalação de libc++ e libc++abi;
Licença atualizada para EPL 2.0/GPL 2.0/LGPL 2.1, igual ao JRuby recente;
Adicionado suporte para argumentos opcionais ao GC.stat;
Implementado o método Kernel#load com um wrapper e Kernel#spawn com :chdir;
Adicionado rb_str_drop_bytes, o que é ótimo porque o OpenSSL o utiliza;
Extensões incluídas de gems pré-instaladas necessárias para Rails novos no Rails 6;
Para compilar extensões nativas, são usados flags, como em MRI;
Otimizações de desempenho foram feitas e o consumo de memória foi reduzido.
Adicionado suporte preliminar para execução de extensões nativas baseadas em LLVM. Ao construir pacotes R nativos, o FastR é configurado para usar as ferramentas LLVM integradas do GraalVM. Os arquivos binários resultantes conterão código nativo e bitcode LLVM.
Pacotes pré-instalados também são construídos desta forma.
FastR carrega e executa código de extensão nativo por padrão, mas quando iniciado com a opção "--R.BackEnd = llvm", o bitcode será usado. O backend LLVM pode ser usado seletivamente para alguns pacotes R especificando "--R.BackEndLLVM=pkg1,pkg2". Se você tiver problemas para instalar pacotes, você pode reverter tudo chamando fastr.setToolchain("native") ou editando manualmente o arquivo $FASTR_HOME/etc/Makeconf;
Nesta versão, o FastR é fornecido sem as bibliotecas de tempo de execução do GCC;
Corrigidos vazamentos de memória;
Corrigidos problemas ao trabalhar com vetores grandes (>1GB);