Lançamento da linguagem de programação Ruby 3.2

Foi lançado Ruby 3.2.0, uma linguagem de programação dinâmica orientada a objetos que é altamente eficiente no desenvolvimento de programas e incorpora os melhores recursos de Perl, Java, Python, Smalltalk, Eiffel, Ada e Lisp. O código do projeto é distribuído sob as licenças BSD ("BSDL de 2 cláusulas") e "Ruby", que se refere à versão mais recente da licença GPL e é totalmente compatível com GPLv3.

Principais melhorias:

  • Adicionada uma porta inicial de um interpretador CRuby que compila para código intermediário WebAssembly para execução em um navegador da web ou em tempos de execução independentes, como wasmtime. Para interação direta com o sistema operacional quando executado separadamente, a API WASI (WebAssembly System Interface) é usada. Entre outras coisas, é fornecida uma ligação VFS sobre WASI, que permite empacotar todo o aplicativo na linguagem Ruby em uma visualização na forma de um único arquivo wasm. A execução em um navegador pode ser usada para criar tutoriais e serviços da web de demonstração, como TryRuby. No estágio atual de desenvolvimento, a porta passa com êxito nos conjuntos de testes básicos e de inicialização, que não usam a API Thread. A porta também não oferece suporte a fibra, exceções ou coleta de lixo.
  • O compilador JIT em processo YJIT, criado pelos desenvolvedores da plataforma de e-commerce Shopify como parte de uma iniciativa para aumentar o desempenho de programas Ruby que usam a estrutura Rails e chamam vários métodos, foi declarado estável e pronto para uso. uso da produção. A principal diferença do compilador MJIT JIT usado anteriormente, que é baseado no processamento de métodos e usa um compilador C externo, é que o YJIT usa Lazy Basic Block Versioning (LBBV) e contém um compilador JIT integrado. Graças ao LBBV, o JIT compila inicialmente apenas o início do método, e compila o restante depois de algum tempo, após os tipos de variáveis ​​​​e argumentos utilizados serem determinados durante a execução. YJIT está disponível para arquiteturas x86-64 e arm64/aarch64 em Linux, MacOS, BSD e outras plataformas UNIX.

    Ao contrário do CRuby, o código YJIT é escrito em Rust e requer o compilador Rustc 1.58.0+ para compilar, portanto, a compilação YJIT está desabilitada por padrão e é opcional. Ao usar o YJIT, foi registrado um aumento de 41% no desempenho ao executar o teste yjit-bench em comparação com o uso da interpretação.

    Lançamento da linguagem de programação Ruby 3.2

  • Adicionada proteção adicional contra ataques que causam negação de serviço ao processar dados externos em expressões regulares (ReDoS) ineficientes e de longa duração. Algoritmo de correspondência significativamente melhorado, que utiliza a técnica de memorização. Por exemplo, o tempo de execução da expressão '/^a*b?a*$/ =~ "a" * 50000 + "x"' foi reduzido de 10 para 0.003 segundos. O preço da otimização é um aumento no consumo de memória, cujo consumo é cerca de 10 vezes maior que o tamanho dos dados de entrada. A segunda medida de segurança é a capacidade de definir um tempo limite (por exemplo, “Regexp.timeout = 1.0”), para o qual a expressão regular deve ter tempo para ser processada.
  • O modo sintaxe_suggest está incluído para ajudar a diagnosticar as causas de erros associados a uma instrução de fechamento "final" ausente ou redundante. `End' incomparável, palavra-chave ausente (`do', `def`, `if`, etc.)? 1 classe Cachorro> 2 defbark> 3 final 4 final
  • Adicionada a capacidade de marcar argumentos em caso de erros relacionados a tipos e argumentos ao modo de localização de erros, por exemplo: test.rb:2:in `+': nil não pode ser coagido para Integer (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Adicionada nova sintaxe para redirecionar para outros métodos de conjunto de argumentos: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler proposto - uma variante do antigo compilador MJIT JIT, reescrito na linguagem Ruby. Garantiu a execução do MJIT em um processo separado, em vez da execução no thread de trabalho do MJIT.
  • No Bundler 2.4, o tratamento de dependências usa o localizador de versão PubGrub, também usado pelo gerenciador de pacotes pub para Dart. O algoritmo Molinillo usado anteriormente continua a ser usado no RubyGems, mas também será substituído pelo PubGrub no futuro.
  • Versões atualizadas de módulos gem de biblioteca padrão e integrados.

Fonte: opennet.ru

Adicionar um comentário