- Ruby 4.0.0 wurde veröffentlicht und führt die neue Ruby Box sowie ZJIT ein; außerdem enthält die Version zahlreiche Leistungs- und Sprachverbesserungen
- Ruby Box ist eine experimentelle Funktion, mit der sich Klassen, Module, globale Variablen sowie Definitionen nativer/Ruby-Bibliotheken isoliert ausführen lassen
- ZJIT ist ein JIT-Compiler der nächsten Generation auf Rust-Basis, der strukturell besser erweiterbar ist als YJIT und externe Beiträge erleichtert
- Das parallele Ausführungsmodell Ractor wurde bei Stabilität und Performance verbessert und soll künftig den experimentellen Status verlieren
- Updates für Kernklassen, Standardbibliothek, C API, GC und JIT stärken insgesamt Performance und Skalierbarkeit des Ruby-Ökosystems
Überblick über Ruby 4.0
- Ruby 4.0.0 ist ein großes Update mit Schwerpunkt auf Ruby Box und ZJIT
- Enthält Verbesserungen in vielen Bereichen wie parallele Ausführung, Sprachsyntax, Standardbibliothek, GC und JIT
- Der Download wird in den Formaten
.tar.gz, .tar.xz und .zip angeboten
Ruby Box
- Ruby Box ist eine experimentelle Funktion, die Isolation von Definitionen bereitstellt
- Wird durch Setzen der Umgebungsvariable
RUBY_BOX=1 aktiviert; die Klasse ist Ruby::Box
- Innerhalb einer Box geladene Definitionen sind nach außen isoliert, sodass Monkey Patches, globale/Klassenvariablen, Klassen-/Moduldefinitionen und Bibliotheksänderungen keine anderen Boxen beeinflussen
- Wichtige Anwendungsbeispiele
- Isolierte Ausführung zwischen Testfällen
- Paralleler Betrieb von Web-Apps für Blue-Green-Deployments
- Parallele Ausführung zur Validierung von Dependency-Updates
- Soll künftig als Basis-API für die Implementierung einer höherstufigen „Package API“ dienen
ZJIT
- ZJIT ist ein neuer JIT-Compiler, entwickelt als nächste Generation von YJIT
- Erfordert Rust 1.85.0 oder höher und wird mit der Option
--zjit aktiviert
- Unterstützt größere Kompilierungseinheiten auf Basis von SSA IR und besitzt eine Struktur, die externe Beiträge fördert
- Derzeit schneller als der Interpreter, aber langsamer als YJIT
- Der Einsatz in Produktion wird nicht empfohlen; für Ruby 4.1 sind Performance-Verbesserungen geplant
Ractor-Verbesserungen
- Hinzufügung der Klasse Ractor::Port zur Lösung von Problemen beim Senden und Empfangen von Nachrichten
- Mit
Ractor.shareable_proc lassen sich Proc-Objekte einfacher zwischen Ractors teilen
- Verbesserte interne Datenstrukturen reduzieren Contention beim globalen Lock und erhöhen die Parallelität
- Der experimentelle Status von Ractor soll im nächsten Jahr aufgehoben werden
Sprachänderungen
*nil ruft nicht länger nil.to_a auf (gleiches Verhalten wie **nil)
- Logische Operatoren (
||, &&, and, or) unterstützen die Syntax für Zeilenfortsetzung (dot chaining)
- Verbessert Lesbarkeit und Konsistenz des Codes
Updates der Kernklassen
- Array:
Array#rfind und Array#find hinzugefügt für effizientere Suche
- Binding: Ausschluss nummerierter Parameter und Hinzufügung von Methoden zu
implicit_parameters
- Enumerator: Keyword-Argument
size: zu produce hinzugefügt
- ErrorHighlight: Bei
ArgumentError werden Code-Snippets des Aufrufers und der Definition angezeigt
- Fiber/Fiber::Scheduler: Ergänzungen wie
raise(cause:), fiber_interrupt, yield
- File: Unterstützung für
File::Stat#birthtime unter Linux
- IO:
Float::INFINITY als Timeout erlaubt, pipe-basierte Prozesserzeugung entfernt
- Kernel:
#inspect kann angepasst werden, pipe-Erzeugung in Kernel#open entfernt
- Math:
log1p, expm1 hinzugefügt
- Pathname: Vom Default-Gem zur Core-Klasse befördert
- Proc: Ausgabeformat anonymer Parameter vereinheitlicht
- Ractor: Kommunikationsstruktur auf Basis von
Ractor::Port, Ractor.yield usw. entfernt
- Set: Zur Core-Klasse befördert,
inspect-Format vereinfacht
- Socket: Argument
open_timeout hinzugefügt, Timeout-Ausnahmen vereinheitlicht
- String: Unicode 17.0.0 und Emoji 17.0 unterstützt, Methoden der
strip-Familie erweitert
- Thread: Unterstützung für das Argument
raise(cause:)
Updates der Standardbibliothek (Stdlib)
- Zu Default-Gems befördert:
ostruct, pstore, benchmark, logger, rdoc, win32ole, irb, reline, fiddle usw.
- Neues Default-Gem:
win32-registry 0.1.2
- Aktualisierte Default-Gems:
RubyGems 4.0.3, bundler 4.0.3, openssl 4.0.0, json 2.18.0 usw.
- Aktualisierte gebündelte Gems:
minitest 6.0.0, rake 13.3.1, rbs 3.10.0, debug 1.11.1 usw.
- RubyGems/Bundler 4 enthalten
Plattformunterstützung
- Windows: Unterstützung für Versionen unter MSVC 14.0 eingestellt (Visual Studio 2015 oder neuer erforderlich)
Kompatibilitätsänderungen
Ractor.yield, Ractor#take, Ractor#close_incoming, Ractor#close_outgoing entfernt
ObjectSpace._id2ref veraltet
Process::Status#&, #>> entfernt
- Ausgabe interner Frames (Backtrace) vereinfacht
- Im Backtrace von
ArgumentError wird jetzt der Name der Empfängerklasse/des Empfängermoduls angezeigt
Kompatibilität der Standardbibliothek
- CGI-Bibliothek entfernt, nur
cgi/escape bleibt erhalten
- Durch die Beförderung von
Set zur Core-Klasse erfordert SortedSet die Installation eines separaten Gems
- Automatisches Setzen des Headers
Content-Type in Net::HTTP entfernt
Updates der C API
rb_thread_fd_close deaktiviert; Verwendung von rb_io_close empfohlen
rb_thread_call_with_gvl funktioniert unabhängig davon, ob GVL vorhanden ist
- C API für Set hinzugefügt (
rb_set_new, rb_set_add, rb_set_delete usw.)
Implementierungs- und Performance-Verbesserungen
- Schnellere Aufrufe von
Class#new, besonders bei Verwendung von Keyword-Argumenten
- Unabhängiges Wachstum von GC-Heap-Pools reduziert den Speicherverbrauch
- Schnellere Bereinigung großer Objekte
- Optimierungen bei der Berechnung von
object_id, hash und beim Zugriff auf Instanzvariablen
- Ractor-Performance verbessert
- Lock-freie Hash-Struktur, geringere Cache-Contention, optimierte Objektallokation
- Fehler bei Deadlocks, Encoding und GC behoben
JIT-bezogen
- ZJIT: Methodenbasierter JIT, erfordert Rust 1.85.0 oder höher, aktivierbar mit
--zjit oder RubyVM::ZJIT.enable
- YJIT: Statistikoptionen geändert,
mem_size: und call_threshold: hinzugefügt
- RJIT:
--rjit entfernt, in ein separates Repository verlagert
Umfang der Änderungen
- Gegenüber Ruby 3.4.0 wurden 3.889 Dateien geändert, 230.769 Zeilen hinzugefügt und 297.003 Zeilen gelöscht
- Ruby 4.0 ist ein Major Release, das Performance, Parallelität und sprachliche Konsistenz deutlich stärkt
Download
- Verfügbar als
ruby-4.0.0.tar.gz, ruby-4.0.0.tar.xz, ruby-4.0.0.zip
- Für jede Datei sind die SHA1-, SHA256- und SHA512-Hashwerte angegeben
Einführung in Ruby
- Ruby ist eine Open-Source-Sprache, die 1993 von Yukihiro Matsumoto (Matz) entwickelt wurde
- Sie läuft auf vielen Plattformen und wird besonders im Bereich Webentwicklung weltweit eingesetzt
Noch keine Kommentare.