|
| 1 | +--- |
| 2 | +layout: news_post |
| 3 | +title: "Ruby 3.3.0 veröffentlicht" |
| 4 | +author: "naruse" |
| 5 | +translator: Thomas Ritter |
| 6 | +date: 2023-12-25 00:00:00 +0000 |
| 7 | +lang: de |
| 8 | +--- |
| 9 | + |
| 10 | +{% assign release = site.data.releases | where: "version", "3.3.0" | first %} |
| 11 | +Wir freuen uns, die Veröffentlichung von Ruby {{ release.version }} anzukündigen. Ruby 3.3 fügt einen neuen Parser namens Prism hinzu, verwendet Lrama als Parser-Generator, fügt einen neuen reinen Ruby JIT-Compiler namens RJIT hinzu und viele Leistungsverbesserungen, insbesondere YJIT. |
| 12 | + |
| 13 | +## Prism |
| 14 | + |
| 15 | +- Einführung des [Prism-Parser](https://github.com/ruby/prism) als Standard-Gem |
| 16 | + - Prism ist ein portabler, fehlertoleranter und wartbarer rekursiver Abstiegsparser für die Ruby-Sprache |
| 17 | +- Prism ist produktionsreif und wird aktiv gepflegt, Sie können es anstelle von Ripper verwenden |
| 18 | + - Es gibt [umfangreiche Dokumentation](https://ruby.github.io/prism/) zur Nutzung von Prism |
| 19 | + - Prism ist sowohl eine C-Bibliothek, die intern von CRuby verwendet wird, als auch ein Ruby-Gem, das von jedem Werkzeug verwendet werden kann, das Ruby-Code parsen muss |
| 20 | + - Nennenswerte Methoden in der Prism-API sind: |
| 21 | + - `Prism.parse(source)`, das den AST als Teil eines Parseergebnisobjekts zurückgibt |
| 22 | + - `Prism.parse_comments(source)`, das die Kommentare zurückgibt |
| 23 | + - `Prism.parse_success?(source)`, das true zurückgibt, wenn keine Fehler vorliegen |
| 24 | +- Sie können Pull-Requests oder Issues direkt im [Prism-Repository](https://github.com/ruby/prism) erstellen, wenn Sie an der Mitarbeit interessiert sind |
| 25 | +- Sie können jetzt `ruby --parser=prism` oder `RUBYOPT="--parser=prism"` verwenden, um mit dem Prism-Compiler zu experimentieren. Bitte beachten Sie, dass dieser Flag nur für das Debugging gedacht ist. |
| 26 | + |
| 27 | +## Verwendung von Lrama anstelle von Bison |
| 28 | + |
| 29 | +- Ersetzen von Bison durch [Lrama LALR-Parsergenerator](https://github.com/ruby/lrama) [[Feature #19637]](https://bugs.ruby-lang.org/issues/19637) |
| 30 | + - Wenn Sie interessiert sind, sehen Sie sich bitte [Die Zukunftsvision des Ruby-Parsers](https://rubykaigi.org/2023/presentations/spikeolaf.html) an |
| 31 | + - Der interne Lrama-Parser wird durch einen LR-Parser von Racc ersetzt, um die Wartbarkeit sicherzustellen |
| 32 | + - Parameterisierende Regeln `(?, *, +)` werden unterstützt, sie werden im Ruby parse.y verwendet |
| 33 | + |
| 34 | +## YJIT |
| 35 | + |
| 36 | +- Große Leistungsverbesserungen gegenüber Ruby 3.2 |
| 37 | + - Die Unterstützung für Splat- und Rest-Argumente wurde verbessert. |
| 38 | + - Register werden für Stack-Operationen der virtuellen Maschine zugewiesen. |
| 39 | + - Mehr Aufrufe mit optionalen Argumenten werden kompiliert. Ausnahmebehandler werden ebenfalls kompiliert. |
| 40 | + - Nicht unterstützte Aufruftypen und megamorphe Aufrufstellen werden nicht mehr an den Interpreter übergeben. |
| 41 | + - Grundlegende Methoden wie Rails `#blank?` und |
| 42 | + [spezialisiertes `#present?`](https://github.com/rails/rails/pull/49909) werden eingebettet (inlined). |
| 43 | + - `Integer#*`, `Integer#!=`, `String#!=`, `String#getbyte`, |
| 44 | + `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?` und `Module#===` |
| 45 | + sind speziell optimiert. |
| 46 | + - Die Kompilierungsgeschwindigkeit ist jetzt etwas schneller als bei Ruby 3.2. |
| 47 | + - Jetzt mehr als 3x schneller als der Interpreter auf Optcarrot! |
| 48 | +- Deutlich verbesserte Speichernutzung gegenüber Ruby 3.2 |
| 49 | + - Metadaten für kompilierten Code verwenden viel weniger Speicher. |
| 50 | + - `--yjit-call-threshold` wird automatisch von 30 auf 120 erhöht |
| 51 | + wenn die Anwendung mehr als 40.000 ISEQs hat. |
| 52 | + - `--yjit-cold-threshold` wird hinzugefügt, um das Kompilieren von kalten ISEQs zu überspringen. |
| 53 | + - Kompakterer Code wird auf Arm64 generiert. |
| 54 | +- Code GC ist jetzt standardmäßig deaktiviert |
| 55 | + - `--yjit-exec-mem-size` wird als hartes Limit behandelt, bei der die Kompilierung neuer Codes stoppt. |
| 56 | + - Keine plötzlichen Leistungseinbrüche aufgrund von Code GC. |
| 57 | + Besseres Copy-on-Write-Verhalten auf Servern mit Reforking mit |
| 58 | + [Pitchfork](https://github.com/shopify/pitchfork). |
| 59 | + - Sie können Code GC weiterhin mit `--yjit-code-gc` aktivieren, falls gewünscht |
| 60 | +- Hinzufügen von `RubyVM::YJIT.enable`, das YJIT zur Laufzeit aktivieren kann |
| 61 | + - Sie können YJIT starten, ohne Kommandozeilenargumente oder Umgebungsvariablen zu ändern. |
| 62 | + Rails 7.2 wird [YJIT standardmäßig aktivieren](https://github.com/rails/rails/pull/49947) |
| 63 | + mit dieser Methode. |
| 64 | + - Dies kann auch verwendet werden, um YJIT nur zu aktivieren, sobald Ihre Anwendung |
| 65 | + hochgefahren ist. `--yjit-disable` kann verwendet werden, wenn Sie andere |
| 66 | + YJIT-Optionen verwenden möchten, während YJIT beim Booten deaktiviert ist. |
| 67 | +- Mehr YJIT-Statistiken sind standardmäßig verfügbar |
| 68 | + - `yjit_alloc_size` und mehrere weitere metadatenbezogene Statistiken sind jetzt standardmäßig verfügbar. |
| 69 | + - Die von `--yjit-stats` produzierte `ratio_in_yjit`-Statistik ist jetzt in Release-Builds verfügbar, |
| 70 | + ein spezieller Statistik- oder Dev-Build ist nicht mehr erforderlich, um die meisten Statistiken abzurufen. |
| 71 | +- Hinzufügen weiterer Profiling-Fähigkeiten |
| 72 | + - `--yjit-perf` wird hinzugefügt, um das Profiling mit Linux perf zu erleichtern. |
| 73 | + - `--yjit-trace-exits` unterstützt jetzt das Sampling mit `--yjit-trace-exits-sample-rate=N` |
| 74 | +- Gründlicheres Testing und mehrere Bugfixes |
| 75 | + |
| 76 | +## RJIT |
| 77 | + |
| 78 | +- Einführung eines reinen Ruby JIT-Compilers RJIT und Ersatz von MJIT. |
| 79 | + - RJIT unterstützt nur die x86-64-Architektur auf Unix-Plattformen. |
| 80 | + - Im Gegensatz zu MJIT wird zur Laufzeit kein C-Compiler benötigt. |
| 81 | +- RJIT existiert nur zu experimentellen Zwecken. |
| 82 | + - Sie sollten in der Produktion weiterhin YJIT verwenden. |
| 83 | +- Wenn Sie an der Entwicklung von JIT für Ruby interessiert sind, schauen Sie sich bitte [k0kubuns Präsentation am Tag 3 von RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3) an. |
| 84 | + |
| 85 | +## M:N-Thread-Scheduler |
| 86 | + |
| 87 | +- M:N-Thread-Scheduler wurde eingeführt. [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842) |
| 88 | + - M Ruby-Threads werden von N nativen Threads (OS-Threads) verwaltet, sodass die Thread-Erstellungs- und Verwaltungskosten reduziert werden. |
| 89 | + - Es kann die Kompatibilität mit C-Erweiterungen brechen, sodass der M:N-Thread-Scheduler standardmäßig auf dem Haupt-Ractor deaktiviert ist. |
| 90 | + - Die Umgebungsvariable `RUBY_MN_THREADS=1` aktiviert M:N-Threads auf dem Haupt-Ractor. |
| 91 | + - M:N-Threads sind immer auf Nicht-Haupt-Ractors aktiviert. |
| 92 | + - Die Umgebungsvariable `RUBY_MAX_CPU=n` legt die maximale Anzahl von `N` (maximale Anzahl nativer Threads) fest. Der Standardwert ist 8. |
| 93 | + - Da nur ein Ruby-Thread pro Ractor gleichzeitig ausgeführt werden kann, wird die Anzahl der verwendeten nativen Threads verwendet, die kleiner ist als die in `RUBY_MAX_CPU` angegebene Anzahl und die Anzahl der laufenden Ractors. Einzelne Ractor-Anwendungen (die meisten Anwendungen) verwenden daher nur 1 nativen Thread. |
| 94 | + - Zur Unterstützung von blockierenden Operationen können mehr als `N` native Threads verwendet werden. |
| 95 | + |
| 96 | +## Leistungsverbesserungen |
| 97 | + |
| 98 | +- `defined?(@ivar)` ist mit Object Shapes optimiert. |
| 99 | +- Namensauflösungen wie `Socket.getaddrinfo` können jetzt unterbrochen werden (in Umgebungen, in denen pthreads verfügbar sind). [[Feature #19965]](https://bugs.ruby-lang.org/issues/19965) |
| 100 | +- Mehrere Leistungsverbesserungen beim Garbage Collector |
| 101 | + - Junge Objekte, die von alten Objekten referenziert werden, werden nicht mehr sofort |
| 102 | + in die alte Generation befördert. Dies reduziert die Häufigkeit von |
| 103 | + großen GC-Sammlungen erheblich. [[Feature #19678]](https://bugs.ruby-lang.org/issues/19678) |
| 104 | + - Eine neue Tuning-Variable `REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO` wurde |
| 105 | + eingeführt, um die Anzahl der ungeschützten Objekte zu steuern, die eine große GC- |
| 106 | + Sammlung auslösen. Der Standardwert ist auf `0.01` (1%) festgelegt. Dies reduziert die Häufigkeit von großen GC-Sammlungen erheblich. [[Feature #19571]](https://bugs.ruby-lang.org/issues/19571) |
| 107 | + - Write Barriers wurden für viele Kerntypen implementiert, die sie bisher vermisst haben, |
| 108 | + insbesondere `Time`, `Enumerator`, `MatchData`, `Method`, `File::Stat`, `BigDecimal` |
| 109 | + und mehrere andere. Dies reduziert die Zeit für kleine GC-Sammlungen und die Häufigkeit großer GC-Sammlungen erheblich. |
| 110 | + - Die meisten Kerntypen verwenden jetzt Variable Width Allocation, insbesondere `Hash`, `Time`, |
| 111 | + `Thread::Backtrace`, `Thread::Backtrace::Location`, `File::Stat`, `Method`. |
| 112 | + Dadurch sind diese Klassen schneller zugeteilt und freigegeben, verwenden weniger Speicher und reduzieren |
| 113 | + die Heapfragmentierung. |
| 114 | + - Unterstützung für schwache Referenzen wurde dem Garbage Collector hinzugefügt. [[Feature #19783]](https://bugs.ruby-lang.org/issues/19783) |
| 115 | + |
| 116 | +## Weitere bemerkenswerte Änderungen seit 3.2 |
| 117 | + |
| 118 | +### IRB |
| 119 | + |
| 120 | +IRB hat mehrere Verbesserungen erhalten, einschließlich, aber nicht beschränkt auf: |
| 121 | + |
| 122 | +- Fortgeschrittene `irb:rdbg`-Integration, die ein äquivalentes Debugging-Erlebnis zu `pry-byebug` bietet ([Dokumentation](https://github.com/ruby/irb#debugging-with-irb)). |
| 123 | +- Pager-Unterstützung für die Befehle `ls`, `show_source` und `show_cmds`. |
| 124 | +- Genauere und hilfreichere Informationen, die von den Befehlen `ls` und `show_source` bereitgestellt werden. |
| 125 | +- Experimentelle Autovervollständigung mit Typenanalyse ([Dokumentation](https://github.com/ruby/irb#type-based-completion)). |
| 126 | +- Es ist jetzt möglich, die Schriftfarbe und den Schriftstil im Vervollständigungsdialog durch eine neu eingeführte Klasse Reline::Face zu ändern ([Dokumentation](https://github.com/ruby/ruby/blob/master/doc/reline/face.md)) |
| 127 | + |
| 128 | +Zusätzlich dazu hat IRB umfangreiche Refactorings durchlaufen und Dutzende von Bugfixes erhalten, um zukünftige Verbesserungen zu erleichtern. |
| 129 | + |
| 130 | +Für detailliertere Updates lesen Sie bitte [Die große Weiterentwicklung von Ruby 3.3's IRB enthüllt](https://railsatscale.com/2023-12-19-irb-for-ruby-3-3/). |
| 131 | + |
| 132 | +## Kompatibilitätsprobleme |
| 133 | + |
| 134 | +Hinweis: Ausschließlich Bugfixes von Features. |
| 135 | + |
| 136 | +- `it`-Aufrufe ohne Argumente in einem Block ohne gewöhnliche Parameter sind |
| 137 | + veraltet (deprecated). `it` wird in Ruby 3.4 eine Referenz auf den ersten Blockparameter sein. |
| 138 | + [[Feature #18980]](https://bugs.ruby-lang.org/issues/18980) |
| 139 | + |
| 140 | +### Entfernte Umgebungsvariablen |
| 141 | + |
| 142 | +Die folgenden veralteten Methoden werden entfernt. |
| 143 | + |
| 144 | +- Umgebungsvariable `RUBY_GC_HEAP_INIT_SLOTS` wurde veraltet (deprecated) und ist eine No-Op. Bitte verwenden Sie stattdessen die Umgebungsvariablen `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`. [[Feature #19785]](https://bugs.ruby-lang.org/issues/19785) |
| 145 | + |
| 146 | +## Stdlib-Kompatibilitätsprobleme |
| 147 | + |
| 148 | +### `ext/readline` wird eingestellt |
| 149 | + |
| 150 | +- Wir haben `reline`, das eine reine Ruby-Implementierung kompatibel mit der `ext/readline` API ist. In Zukunft setzen wir auf `reline`. Wenn Sie `ext/readline` verwenden müssen, können Sie `ext/readline` über rubygems.org mit `gem install readline-ext` installieren. |
| 151 | +- Wir müssen keine Bibliotheken wie `libreadline` oder `libedit` mehr installieren. |
| 152 | + |
| 153 | +## Aktualisierungen der Standardbibliothek |
| 154 | + |
| 155 | +RubyGems und Bundler warnen, wenn Benutzer die folgenden Gems mit `require` laden ohne sie zum Gemfile oder gemspec hinzuzufügen. Dies liegt daran, dass sie in einer zukünftigen Version von Ruby zu mitinstallierten Gems werden. |
| 156 | + |
| 157 | +Diese Warnung wird unterdrückt, wenn Sie das Bootsnap-Gem verwenden. Wir empfehlen, Ihre Anwendung mindestens einmal mit der Umgebungsvariable `DISABLE_BOOTSNAP=1` auszuführen. Dies ist eine Einschränkung dieser Version. |
| 158 | + |
| 159 | +Zielbibliotheken sind: |
| 160 | + |
| 161 | +- abbrev |
| 162 | +- base64 |
| 163 | +- bigdecimal |
| 164 | +- csv |
| 165 | +- drb |
| 166 | +- getoptlong |
| 167 | +- mutex_m |
| 168 | +- nkf |
| 169 | +- observer |
| 170 | +- racc |
| 171 | +- resolv-replace |
| 172 | +- rinda |
| 173 | +- syslog |
| 174 | + |
| 175 | +Das folgende Standard-Gem wird hinzugefügt. |
| 176 | + |
| 177 | +- prism 0.19.0 |
| 178 | + |
| 179 | +Die folgenden Standard-Gems werden aktualisiert. |
| 180 | + |
| 181 | +- RubyGems 3.5.3 |
| 182 | +- abbrev 0.1.2 |
| 183 | +- base64 0.2.0 |
| 184 | +- benchmark 0.3.0 |
| 185 | +- bigdecimal 3.1.5 |
| 186 | +- bundler 2.5.3 |
| 187 | +- cgi 0.4.1 |
| 188 | +- csv 3.2.8 |
| 189 | +- date 3.3.4 |
| 190 | +- delegate 0.3.1 |
| 191 | +- drb 2.2.0 |
| 192 | +- english 0.8.0 |
| 193 | +- erb 4.0.3 |
| 194 | +- error_highlight 0.6.0 |
| 195 | +- etc 1.4.3 |
| 196 | +- fcntl 1.1.0 |
| 197 | +- fiddle 1.1.2 |
| 198 | +- fileutils 1.7.2 |
| 199 | +- find 0.2.0 |
| 200 | +- getoptlong 0.2.1 |
| 201 | +- io-console 0.7.1 |
| 202 | +- io-nonblock 0.3.0 |
| 203 | +- io-wait 0.3.1 |
| 204 | +- ipaddr 1.2.6 |
| 205 | +- irb 1.11.0 |
| 206 | +- json 2.7.1 |
| 207 | +- logger 1.6.0 |
| 208 | +- mutex_m 0.2.0 |
| 209 | +- net-http 0.4.0 |
| 210 | +- net-protocol 0.2.2 |
| 211 | +- nkf 0.1.3 |
| 212 | +- observer 0.1.2 |
| 213 | +- open-uri 0.4.1 |
| 214 | +- open3 0.2.1 |
| 215 | +- openssl 3.2.0 |
| 216 | +- optparse 0.4.0 |
| 217 | +- ostruct 0.6.0 |
| 218 | +- pathname 0.3.0 |
| 219 | +- pp 0.5.0 |
| 220 | +- prettyprint 0.2.0 |
| 221 | +- pstore 0.1.3 |
| 222 | +- psych 5.1.2 |
| 223 | +- rdoc 6.6.2 |
| 224 | +- readline 0.0.4 |
| 225 | +- reline 0.4.1 |
| 226 | +- resolv 0.3.0 |
| 227 | +- rinda 0.2.0 |
| 228 | +- securerandom 0.3.1 |
| 229 | +- set 1.1.0 |
| 230 | +- shellwords 0.2.0 |
| 231 | +- singleton 0.2.0 |
| 232 | +- stringio 3.1.0 |
| 233 | +- strscan 3.0.7 |
| 234 | +- syntax_suggest 2.0.0 |
| 235 | +- syslog 0.1.2 |
| 236 | +- tempfile 0.2.1 |
| 237 | +- time 0.3.0 |
| 238 | +- timeout 0.4.1 |
| 239 | +- tmpdir 0.2.0 |
| 240 | +- tsort 0.2.0 |
| 241 | +- un 0.3.0 |
| 242 | +- uri 0.13.0 |
| 243 | +- weakref 0.1.3 |
| 244 | +- win32ole 1.8.10 |
| 245 | +- yaml 0.3.0 |
| 246 | +- zlib 3.1.0 |
| 247 | + |
| 248 | +Das folgende mitinstallierten Gem wird von Standard-Gems gefördert. |
| 249 | + |
| 250 | +- racc 1.7.3 |
| 251 | + |
| 252 | +Die folgenden mitinstallierten Gems werden aktualisiert. |
| 253 | + |
| 254 | +- minitest 5.20.0 |
| 255 | +- rake 13.1.0 |
| 256 | +- test-unit 3.6.1 |
| 257 | +- rexml 3.2.6 |
| 258 | +- rss 0.3.0 |
| 259 | +- net-ftp 0.3.3 |
| 260 | +- net-imap 0.4.9 |
| 261 | +- net-smtp 0.4.0 |
| 262 | +- rbs 3.4.0 |
| 263 | +- typeprof 0.21.9 |
| 264 | +- debug 1.9.1 |
| 265 | + |
| 266 | +Weitere Informationen finden Sie in den GitHub-Releases wie [Logger](https://github.com/ruby/logger/releases) oder |
| 267 | +Änderungsprotokoll für Details zu den Standard-Gems oder mitinstallierten Gems. |
| 268 | + |
| 269 | +Siehe [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) |
| 270 | +oder [Commit-Protokolle](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) |
| 271 | +für weitere Details. |
| 272 | + |
| 273 | +Mit diesen Änderungen haben sich [{{ release.stats.files_changed }} Dateien geändert, {{ release.stats.insertions }} Einfügungen(+), {{ release.stats.deletions }} Löschungen(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) |
| 274 | +seit Ruby 3.2.0! |
| 275 | + |
| 276 | +Frohe Weihnachten, schöne Feiertage und viel Spaß beim Programmieren mit Ruby 3.3! |
| 277 | + |
| 278 | +## Download |
| 279 | + |
| 280 | +- <{{ release.url.gz }}> |
| 281 | + |
| 282 | + GRÖSSE: {{ release.size.gz }} |
| 283 | + SHA1: {{ release.sha1.gz }} |
| 284 | + SHA256: {{ release.sha256.gz }} |
| 285 | + SHA512: {{ release.sha512.gz }} |
| 286 | + |
| 287 | +- <{{ release.url.xz }}> |
| 288 | + |
| 289 | + GRÖSSE: {{ release.size.xz }} |
| 290 | + SHA1: {{ release.sha1.xz }} |
| 291 | + SHA256: {{ release.sha256.xz }} |
| 292 | + SHA512: {{ release.sha512.xz }} |
| 293 | + |
| 294 | +- <{{ release.url.zip }}> |
| 295 | + |
| 296 | + GRÖSSE: {{ release.size.zip }} |
| 297 | + SHA1: {{ release.sha1.zip }} |
| 298 | + SHA256: {{ release.sha256.zip }} |
| 299 | + SHA512: {{ release.sha512.zip }} |
| 300 | + |
| 301 | +## Was ist Ruby |
| 302 | + |
| 303 | +Ruby wurde erstmals 1993 von Matz (Yukihiro Matsumoto) entwickelt |
| 304 | +und wird jetzt als Open Source entwickelt. Es läuft auf mehreren Plattformen |
| 305 | +und wird weltweit vor allem für die Webentwicklung verwendet. |
0 commit comments