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).

Mudanças no GraalJS:

  • 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.

Mudanças em GraalPython:

  • 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).

Mudanças em TruffleRuby:

  • 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.

Mudanças em FastR:

  • A compatibilidade com R 3.6.1 é garantida;
  • 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);
  • Implementado grepRaw, mas apenas para fixo=T.

Fonte: opennet.ru

Adicionar um comentário