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

Foi lançado Ruby 3.1.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:

  • Foi adicionado um novo compilador JIT experimental em processo, YJIT, criado pelos desenvolvedores da plataforma de comércio eletrônico Shopify como parte de uma iniciativa para melhorar o desempenho de programas Ruby que usam a estrutura Rails e chamam vários métodos. A principal diferença do compilador MJIT JIT usado anteriormente, que é baseado no processamento de métodos inteiros e usa um compilador externo na linguagem C, é que YJIT usa Lazy Basic Block Versioning (LBBV) e contém um compilador JIT integrado. Com o LBBV, o JIT primeiro compila apenas o início do método, e compila o restante algum tempo depois, após os tipos de variáveis ​​e argumentos usados ​​serem determinados durante a execução. Ao usar o YJIT, foi registrado um aumento de 22% no desempenho ao executar o teste railsbench e um aumento de 39% no teste de renderização líquida. YJIT está atualmente limitado ao suporte para sistemas operacionais do tipo Unix em sistemas com arquitetura x86-64 e está desabilitado por padrão (para ativar, especifique o sinalizador “--yjit” na linha de comando).
  • Desempenho aprimorado do antigo compilador MJIT JIT. Para projetos que usam Rails, o tamanho máximo padrão do cache (--jit-max-cache) foi aumentado de 100 para 10000 instruções. Parou de usar JIT para métodos com mais de 1000 instruções. Para oferecer suporte ao Zeitwerk of Rails, o código JIT não é mais descartado quando o TracePoint está habilitado para eventos de classe.
  • Inclui um depurador debug.gem completamente reescrito, que suporta depuração remota, não retarda o aplicativo depurado, suporta integração com interfaces de depuração avançadas (VSCode e Chrome), pode ser usado para depurar aplicativos multithread e multiprocessos, fornece uma interface de execução de código REPL, oferece recursos avançados de rastreamento, pode gravar e reproduzir trechos de código. O depurador lib/debug.rb oferecido anteriormente foi removido da distribuição base.
    Lançamento da linguagem de programação Ruby 3.1
  • Implementado destaque visual de erros em relatórios de rastreamento de retorno de chamada. A sinalização de erros é fornecida usando o pacote gem integrado e habilitado por padrão error_highlight. Para desativar a sinalização de erro, você pode usar a configuração “--disable-error_highlight”. $ ruby ​​​​test.rb test.rb:1:in " ": método indefinido "time" para 1:Integer (NoMethodError) 1.time {} ^^^^^ Você quis dizer? vezes
  • O shell de cálculos interativos IRB (REPL, Read-Eval-Print-Loop) implementa o preenchimento automático do código inserido (conforme você digita, uma dica é exibida com opções para continuar a entrada, entre as quais você pode mover-se com Tab ou Shift+ Tecla de tabulação). Após selecionar a opção de continuação, é exibida uma caixa de diálogo próxima que exibe a documentação associada ao item selecionado. O atalho de teclado Alt+d pode ser usado para acessar a documentação completa.
    Lançamento da linguagem de programação Ruby 3.1
  • A sintaxe da linguagem agora permite que valores em literais hash e argumentos de palavras-chave sejam ignorados ao chamar funções. Por exemplo, em vez da expressão “{x: x, y: y}” agora você pode especificar “{x:, y:}”, e em vez de “foo(x: x, y: y)” - foo( x:, y: )".
  • Suporte estabilizado para correspondências de padrões de linha única (ary => [x, y, z]), que não são mais sinalizadas como experimentais.
  • O operador "^" em correspondências de padrões agora pode conter expressões arbitrárias, por exemplo: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
  • Em correspondências de padrões de linha única, você pode omitir parênteses: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • A linguagem de anotação de tipo RBS, que permite determinar a estrutura do programa e os tipos utilizados, adicionou suporte para especificar o limite superior dos parâmetros de tipo usando o símbolo “<”, adicionou suporte para aliases de tipos genéricos, implementou suporte para coleções para gerenciar gemas, melhorou o desempenho e implementou muitas novas assinaturas para bibliotecas integradas e padrão.
  • O suporte experimental para ambientes de desenvolvimento integrados foi adicionado ao analisador de tipo estático TypePro, que gera anotações RBS com base na análise de código sem informações de tipo explícitas (por exemplo, um complemento foi preparado para integração do TypePro com o editor VSCode).
  • A ordem de processamento de múltiplas atribuições foi alterada. Por exemplo, anteriormente os componentes da expressão “foo[0], bar[0] = baz, qux” eram processados ​​na ordem baz, qux, foo, bar, mas agora foo, bar, baz, qux.
  • Adicionado suporte experimental para alocação de memória para strings usando o mecanismo VWA (Variable Width Allocation).
  • Versões atualizadas de módulos gem integrados e aqueles incluídos na biblioteca padrão. Os pacotes net-ftp, net-imap, net-pop, net-smtp, array, prime e debug estão integrados.

Fonte: opennet.ru

Adicionar um comentário