|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 3.4.0 rc1 Lançado" |
| 4 | +author: "naruse" |
| 5 | +translator: nbluis |
| 6 | +date: 2024-12-12 00:00:00 +0000 |
| 7 | +lang: pt |
| 8 | +--- |
| 9 | + |
| 10 | +{% assign release = site.data.releases | where: "version", "3.4.0-rc1" | first %} |
| 11 | +Estamos felizes em anunciar o lançamento do Ruby {{ release.version }}. |
| 12 | + |
| 13 | +## Prism |
| 14 | + |
| 15 | +Alterado o parser padrão de parse.y para Prism. [[Feature #20564]] |
| 16 | + |
| 17 | +## GC Modular |
| 18 | + |
| 19 | +* Implementações alternativas de garbage collector (GC) podem ser carregadas dinamicamente |
| 20 | + através do recurso de garbage collector modular. Para habilitar este recurso, |
| 21 | + configure o Ruby com `--with-modular-gc` no momento da compilação. Bibliotecas de GC podem ser |
| 22 | + carregadas em tempo de execução usando a variável de ambiente `RUBY_GC_LIBRARY`. |
| 23 | + [[Feature #20351]] |
| 24 | + |
| 25 | +* O garbage collector embutido do Ruby foi dividido em um arquivo separado em |
| 26 | + `gc/default/default.c` e interage com o Ruby usando uma API definida em |
| 27 | + `gc/gc_impl.h`. O garbage collector embutido agora também pode ser compilado como uma |
| 28 | + biblioteca usando `make modular-gc MODULAR_GC=default` e habilitado usando a |
| 29 | + variável de ambiente `RUBY_GC_LIBRARY=default`. [[Feature #20470]] |
| 30 | + |
| 31 | +* Uma biblioteca experimental de GC é fornecida com base no [MMTk](https://www.mmtk.io/). |
| 32 | + Esta biblioteca de GC pode ser compilada usando `make modular-gc MODULAR_GC=mmtk` e |
| 33 | + habilitada usando a variável de ambiente `RUBY_GC_LIBRARY=mmtk`. Isso requer |
| 34 | + a ferramenta Rust na máquina de compilação. [[Feature #20860]] |
| 35 | + |
| 36 | +## Mudanças na linguagem |
| 37 | + |
| 38 | +* Literais de string em arquivos sem um comentário `frozen_string_literal` agora emitem um aviso de descontinuação |
| 39 | + quando são mutados. |
| 40 | + Esses avisos podem ser habilitados com `-W:deprecated` ou configurando `Warning[:deprecated] = true`. |
| 41 | + Para desativar essa mudança, você pode executar o Ruby com o argumento de linha de comando `--disable-frozen-string-literal`. [[Feature #20205]] |
| 42 | + |
| 43 | +* `it` foi adicionado para referenciar um parâmetro de bloco. [[Feature #18980]] |
| 44 | + |
| 45 | +* O splatting de palavra-chave `nil` ao chamar métodos agora é suportado. |
| 46 | + `**nil` é tratado de maneira semelhante a `**{}`, não passando palavras-chave, |
| 47 | + e não chamando nenhum método de conversão. [[Bug #20064]] |
| 48 | + |
| 49 | +* Passagem de bloco não é mais permitida em índice. [[Bug #19918]] |
| 50 | + |
| 51 | +* Argumentos de palavra-chave não são mais permitidos em índice. [[Bug #20218]] |
| 52 | + |
| 53 | +## YJIT |
| 54 | + |
| 55 | +TL;DR: |
| 56 | +* Melhor desempenho na maioria dos benchmarks em plataformas x86-64 e arm64. |
| 57 | +* Uso reduzido de memória de metadados de compilação |
| 58 | +* Várias correções de bugs. YJIT agora é ainda mais robusto e melhor testado. |
| 59 | + |
| 60 | +Novos recursos: |
| 61 | +* Adiciona limite de memória unificado via opção de linha de comando `--yjit-mem-size` (padrão 128MiB) |
| 62 | + que rastreia o uso total de memória do YJIT e é mais intuitivo do que o |
| 63 | + antigo `--yjit-exec-mem-size`. |
| 64 | +* Mais estatísticas agora sempre disponíveis via `RubyVM::YJIT.runtime_stats` |
| 65 | +* Adiciona log de compilação para rastrear o que é compilado via `--yjit-log` |
| 66 | + * Final do log também disponível em tempo de execução via `RubyVM::YJIT.log` |
| 67 | +* Adiciona suporte para constantes compartilháveis em modo multi-ractor |
| 68 | +* Agora pode rastrear saídas contadas com `--yjit-trace-exits=COUNTER` |
| 69 | + |
| 70 | +Novas otimizações: |
| 71 | +* Contexto comprimido reduz a memória necessária para armazenar metadados do YJIT |
| 72 | +* Alocador aprimorado com capacidade de alocar registradores para variáveis locais |
| 73 | +* Quando o YJIT está habilitado, use mais primitivas Core escritas em Ruby: |
| 74 | + * `Array#each`, `Array#select`, `Array#map` reescritos em Ruby para melhor desempenho [[Feature #20182]]. |
| 75 | +* Capacidade de inline de métodos pequenos/triviais, como: |
| 76 | + * Métodos vazios |
| 77 | + * Métodos que retornam uma constante |
| 78 | + * Métodos que retornam `self` |
| 79 | + * Métodos que retornam diretamente um argumento |
| 80 | +* Geração de código especializada para muitos mais métodos em tempo de execução |
| 81 | +* Otimiza `String#getbyte`, `String#setbyte` e outros métodos de string |
| 82 | +* Otimiza operações bitwise para acelerar a manipulação de bits/bytes de baixo nível |
| 83 | +* Várias outras otimizações incrementais |
| 84 | + |
| 85 | +## Atualizações das classes principais |
| 86 | + |
| 87 | +Nota: Estamos listando apenas atualizações notáveis das classes principais. |
| 88 | + |
| 89 | +* Exception |
| 90 | + |
| 91 | + * `Exception#set_backtrace` agora aceita um array de `Thread::Backtrace::Location`. |
| 92 | + `Kernel#raise`, `Thread#raise` e `Fiber#raise` também aceitam este novo formato. [[Feature #13557]] |
| 93 | + |
| 94 | +* Range |
| 95 | + |
| 96 | + * `Range#size` agora levanta `TypeError` se o intervalo não for iterável. [[Misc #18984]] |
| 97 | + |
| 98 | +## Problemas de compatibilidade |
| 99 | + |
| 100 | +Nota: Excluindo correções de bugs. |
| 101 | + |
| 102 | +* As mensagens de erro e exibições de backtrace foram alteradas. |
| 103 | + * Usa uma aspa simples em vez de um acento grave como uma aspa de abertura. [[Feature #16495]] |
| 104 | + * Exibe o nome de classe antes de um nome de método (somente quando a classe tiver um nome permanente). [[Feature #19117]] |
| 105 | + * `Kernel#caller`, métodos de `Thread::Backtrace::Location`, etc. também foram alterados de acordo. |
| 106 | + |
| 107 | + ``` |
| 108 | + Antes: |
| 109 | + test.rb:1:in `foo': undefined method `time' for an instance of Integer |
| 110 | + from test.rb:2:in `<main>' |
| 111 | +
|
| 112 | + Agora: |
| 113 | + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer |
| 114 | + from test.rb:2:in '<main>' |
| 115 | + ``` |
| 116 | + |
| 117 | +## Atualizações da C API |
| 118 | + |
| 119 | +* `rb_newobj` e `rb_newobj_of` (e macros correspondentes `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`) foram removidos. [[Feature #20265]] |
| 120 | +* Removida a função obsoleta `rb_gc_force_recycle`. [[Feature #18290]] |
| 121 | + |
| 122 | +## Mudanças diversas |
| 123 | + |
| 124 | +* Passar um bloco para um método que não usa o bloco passado mostrará |
| 125 | + um aviso no modo verbose (`-w`). |
| 126 | + [[Feature #15554]] |
| 127 | + |
| 128 | +* Redefinir alguns métodos principais que são especialmente otimizados pelo interpretador |
| 129 | + e JIT como `String.freeze` ou `Integer#+` agora emite um aviso de classe de desempenho |
| 130 | + (`-W:performance` ou `Warning[:performance] = true`). |
| 131 | + [[Feature #20429]] |
| 132 | + |
| 133 | +Veja lançamentos no GitHub como [Logger](https://github.com/ruby/logger/releases) ou |
| 134 | +changelog para detalhes das gems padrão ou gems incluídas. |
| 135 | + |
| 136 | +Veja [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) |
| 137 | +ou [logs de commits](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}) |
| 138 | +para mais detalhes. |
| 139 | + |
| 140 | +Com essas mudanças, [{{ release.stats.files_changed }} arquivos alterados, {{ release.stats.insertions }} inserções(+), {{ release.stats.deletions }} deleções(-)](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}#file_bucket) |
| 141 | +desde Ruby 3.3.0! |
| 142 | + |
| 143 | +## Download |
| 144 | + |
| 145 | +* <{{ release.url.gz }}> |
| 146 | + |
| 147 | + TAMANHO: {{ release.size.gz }} |
| 148 | + SHA1: {{ release.sha1.gz }} |
| 149 | + SHA256: {{ release.sha256.gz }} |
| 150 | + SHA512: {{ release.sha512.gz }} |
| 151 | + |
| 152 | +* <{{ release.url.xz }}> |
| 153 | + |
| 154 | + TAMANHO: {{ release.size.xz }} |
| 155 | + SHA1: {{ release.sha1.xz }} |
| 156 | + SHA256: {{ release.sha256.xz }} |
| 157 | + SHA512: {{ release.sha512.xz }} |
| 158 | + |
| 159 | +* <{{ release.url.zip }}> |
| 160 | + |
| 161 | + TAMANHO: {{ release.size.zip }} |
| 162 | + SHA1: {{ release.sha1.zip }} |
| 163 | + SHA256: {{ release.sha256.zip }} |
| 164 | + SHA512: {{ release.sha512.zip }} |
| 165 | + |
| 166 | +## O que é Ruby |
| 167 | + |
| 168 | +Ruby foi desenvolvido pela primeira vez por Matz (Yukihiro Matsumoto) em 1993, |
| 169 | +e agora é desenvolvido como Open Source. Ele roda em várias plataformas |
| 170 | +e é usado em todo o mundo, especialmente para desenvolvimento web. |
| 171 | + |
| 172 | +[Feature #13557]: https://bugs.ruby-lang.org/issues/13557 |
| 173 | +[Feature #15554]: https://bugs.ruby-lang.org/issues/15554 |
| 174 | +[Feature #16495]: https://bugs.ruby-lang.org/issues/16495 |
| 175 | +[Feature #18290]: https://bugs.ruby-lang.org/issues/18290 |
| 176 | +[Feature #18980]: https://bugs.ruby-lang.org/issues/18980 |
| 177 | +[Misc #18984]: https://bugs.ruby-lang.org/issues/18984 |
| 178 | +[Feature #19117]: https://bugs.ruby-lang.org/issues/19117 |
| 179 | +[Bug #19918]: https://bugs.ruby-lang.org/issues/19918 |
| 180 | +[Bug #20064]: https://bugs.ruby-lang.org/issues/20064 |
| 181 | +[Feature #20182]: https://bugs.ruby-lang.org/issues/20182 |
| 182 | +[Feature #20205]: https://bugs.ruby-lang.org/issues/20205 |
| 183 | +[Bug #20218]: https://bugs.ruby-lang.org/issues/20218 |
| 184 | +[Feature #20265]: https://bugs.ruby-lang.org/issues/20265 |
| 185 | +[Feature #20351]: https://bugs.ruby-lang.org/issues/20351 |
| 186 | +[Feature #20429]: https://bugs.ruby-lang.org/issues/20429 |
| 187 | +[Feature #20470]: https://bugs.ruby-lang.org/issues/20470 |
| 188 | +[Feature #20564]: https://bugs.ruby-lang.org/issues/20564 |
| 189 | +[Feature #20860]: https://bugs.ruby-lang.org/issues/20860 |
0 commit comments