Ruby 3.1.0 veröffentlicht

Gepostet von naruse am 25. Dez 2021

Wir freuen uns, die Veröffentlichung von Ruby 3.1.0 bekannt zu geben. Ruby 3.1 behält die Kompatibilität mit Ruby 3.0 bei und fügt viele neue Funktionen hinzu.

YJIT: Neuer experimenteller In-Prozess-JIT-Compiler

Ruby 3.1 integriert YJIT, einen neuen In-Prozess-JIT-Compiler, der von Shopify entwickelt wurde.

Seit Ruby 2.6 mit der Einführung von MJIT im Jahr 2018 gab es erhebliche Leistungsverbesserungen, und letztes Jahr erreichten wir schließlich Ruby3x3. Obwohl der Optcarrot-Benchmark beeindruckende Geschwindigkeitssteigerungen gezeigt hat, hat der JIT den realen Geschäftsanwendungen keinen Nutzen gebracht.

Kürzlich hat Shopify viele Ruby-Verbesserungen beigesteuert, um ihre Rails-Anwendung zu beschleunigen. YJIT ist ein wichtiger Beitrag und zielt darauf ab, die Leistung von Rails-Anwendungen zu verbessern.

Während MJIT ein Methoden-basierter JIT-Compiler ist und einen externen C-Compiler verwendet, nutzt YJIT Basic Block Versioning und enthält einen JIT-Compiler darin. Mit Lazy Basic Block Versioning (LBBV) kompiliert es zunächst den Anfang einer Methode und kompiliert inkrementell den Rest, wenn der Typ von Argumenten und Variablen dynamisch bestimmt wird. Siehe YJIT: a basic block versioning JIT compiler for CRuby für eine detaillierte Einführung.

Mit dieser Technologie erreicht YJIT sowohl eine schnelle Aufwärmzeit als auch Leistungsverbesserungen bei den meisten realen Softwares, bis zu 22% bei railsbench und 39% bei liquid-render.

YJIT ist immer noch eine experimentelle Funktion und daher standardmäßig deaktiviert. Wenn Sie diese Funktion nutzen möchten, geben Sie die Kommandozeilenoption --yjit an, um YJIT zu aktivieren. Derzeit ist es auch auf Unix-ähnliche x86-64-Plattformen beschränkt.

debug gem: Ein neuer Debugger

Ein komplett überarbeiteter Debugger debug.gem ist enthalten. debug.gem bietet die folgenden Funktionen:

  • Verbesserte Debugging-Leistung (verlangsamt die Anwendung auch mit dem Debugger nicht).
  • Unterstützung für Remote-Debugging.
  • Unterstützung für reichhaltige Debugging-Frontends (derzeit werden VS Code und Chrome-Browser unterstützt).
  • Unterstützung für Multi-Prozess-/Multi-Thread-Debugging.
  • Farbenfrohe REPL.
  • Und weitere nützliche Funktionen wie Record & Replay, Tracing usw.

Ruby enthielt früher lib/debug.rb, aber es wurde nicht gut gepflegt und hatte Probleme mit Leistung und Funktionen. debug.gem ersetzt lib/debug.rb vollständig.

error_highlight: Fein granulierte Fehlerortung im Backtrace

Ein integriertes Gem, error_highlight, wurde eingeführt. Es enthält eine fein granulierte Fehlerortung in Backtraces.

$ ruby test.rb
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)

1.time {}
 ^^^^^
Did you mean?  times

Derzeit wird nur NameError unterstützt.

Dieses Gem ist standardmäßig aktiviert. Sie können es mit der Kommandozeilenoption --disable-error_highlight deaktivieren. Details finden Sie im error_highlight Repository.

IRB Autovervollständigung und Dokumentationsanzeige

Die IRB verfügt nun über eine Autovervollständigungsfunktion, bei der Sie einfach den Code eingeben können, und das Dialogfeld mit den Vervollständigungskandidaten erscheint. Sie können Tab und Shift+Tab verwenden, um nach oben und unten zu navigieren.

Wenn die Dokumentation installiert ist, erscheint beim Auswählen eines Vervollständigungskandidaten ein Dokumentationsdialog neben dem Dialogfeld mit den Vervollständigungskandidaten, der einen Teil des Inhalts anzeigt. Sie können die vollständige Dokumentation durch Drücken von Alt+d lesen.

Weitere bemerkenswerte neue Funktionen

Sprache

  • Werte in Hash-Literalen und Schlüsselwortargumenten können weggelassen werden. [Feature #14579]
    • {x:, y:} ist eine Syntax-Zucker für {x: x, y: y}.
    • foo(x:, y:) ist eine Syntax-Zucker für foo(x: x, y: y).
  • Der Pin-Operator (^) in der Mustererkennung nimmt jetzt einen Ausdruck. [Feature #17411]

    Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
    #=> [[3, 5], [5, 7], [11, 13]]
    
  • Klammern können in der einzeiligen Mustererkennung weggelassen werden. [Feature #16182]

    [0, 1] => _, x
    {y: 2} => y:
    x #=> 1
    y #=> 2
    

RBS

RBS ist eine Sprache zur Beschreibung der Struktur von Ruby-Programmen. Details finden Sie im RBS Repository.

Updates seit Ruby 3.0.0

  • Generische Typparameter können begrenzt werden. (PR)
  • Generische Typparalias werden unterstützt. (PR)
  • rbs collection wurde eingeführt, um die RBS von Gems zu verwalten. (doc)
  • Viele Signaturen für eingebaute und Standardbibliotheken wurden hinzugefügt/aktualisiert.
  • Es enthält viele Fehlerbehebungen und Leistungsverbesserungen.

Weitere Informationen finden Sie im RBS Changelog.

TypeProf

TypeProf ist ein statischer Typanalysator für Ruby. Er generiert einen Prototyp von RBS aus Ruby-Code ohne Typannotationen. Details finden Sie in der Dokumentation.

Das Hauptupdate seit Ruby 3.0.0 ist die experimentelle IDE-Unterstützung namens "TypeProf for IDE".

Demo of TypeProf for IDE

Die VS Code-Erweiterung zeigt eine vermutete (oder explizit in einer RBS-Datei geschriebene) Methodensignatur über jeder Methodendefinition an, zeichnet eine rote Unterstreichung unter dem Code, der möglicherweise einen Namensfehler oder Typfehler verursacht, und vervollständigt Methodennamen (d.h. zeigt Methoden-Kandidaten an). Details finden Sie in der Dokumentation.

Darüber hinaus enthält die Veröffentlichung viele Fehlerbehebungen und Leistungsverbesserungen.

Leistungsverbesserungen

  • MJIT
    • Für Workloads wie Rails wurde der Standardwert --jit-max-cache von 100 auf 10000 geändert. Der JIT-Compiler überspringt die Kompilierung von Methoden mit mehr als 1000 Anweisungen nicht mehr.
    • Um Zeitwerk von Rails zu unterstützen, wird kompilierter JIT-Code nicht mehr abgebrochen, wenn ein TracePoint für Klassenereignisse aktiviert ist.

Weitere bemerkenswerte Änderungen seit 3.0

  • Einzeilige Mustererkennung, z.B. ary => [x, y, z], ist nicht mehr experimentell.
  • Die Auswertungsreihenfolge von Mehrfachzuweisungen wurde leicht geändert. [Bug #4443]
    • foo[0], bar[0] = baz, qux wurde in Ruby 3.0 in der Reihenfolge baz, qux, foo und dann bar ausgewertet. In Ruby 3.1 wird es in der Reihenfolge foo, bar, baz und dann qux ausgewertet.
  • Variable Width Allocation: Strings (experimentell). [Bug #18239]

  • Psych 4.0 ändert Psych.load, um standardmäßig safe_load zu verwenden. Möglicherweise müssen Sie Psych 3.3.2 verwenden, um dieses Verhalten zu migrieren. [Bug #17866]

Aktualisierungen der Standardbibliotheken

  • Die folgenden Standard-Gems werden aktualisiert.
    • RubyGems 3.3.3
    • base64 0.1.1
    • benchmark 0.2.0
    • bigdecimal 3.1.1
    • bundler 2.3.3
    • cgi 0.3.1
    • csv 3.2.2
    • date 3.2.2
    • did_you_mean 1.6.1
    • digest 3.1.0
    • drb 2.1.0
    • erb 2.2.3
    • error_highlight 0.3.0
    • etc 1.3.0
    • fcntl 1.0.1
    • fiddle 1.1.0
    • fileutils 1.6.0
    • find 0.1.1
    • io-console 0.5.10
    • io-wait 0.2.1
    • ipaddr 1.2.3
    • irb 1.4.1
    • json 2.6.1
    • logger 1.5.0
    • net-http 0.2.0
    • net-protocol 0.1.2
    • nkf 0.1.1
    • open-uri 0.2.0
    • openssl 3.0.0
    • optparse 0.2.0
    • ostruct 0.5.2
    • pathname 0.2.0
    • pp 0.3.0
    • prettyprint 0.1.1
    • psych 4.0.3
    • racc 1.6.0
    • rdoc 6.4.0
    • readline 0.0.3
    • readline-ext 0.1.4
    • reline 0.3.0
    • resolv 0.2.1
    • rinda 0.1.1
    • ruby2_keywords 0.0.5
    • securerandom 0.1.1
    • set 1.0.2
    • stringio 3.0.1
    • strscan 3.0.1
    • tempfile 0.1.2
    • time 0.2.0
    • timeout 0.2.0
    • tmpdir 0.1.2
    • un 0.2.0
    • uri 0.11.0
    • yaml 0.2.0
    • zlib 2.1.1
  • Die folgenden gebündelten Gems werden aktualisiert.
    • minitest 5.15.0
    • power_assert 2.0.1
    • rake 13.0.6
    • test-unit 3.5.3
    • rexml 3.2.5
    • rbs 2.0.0
    • typeprof 0.21.1
  • Die folgenden Standard-Gems sind jetzt gebündelte Gems. Sie müssen die folgenden Bibliotheken in Ihrer Gemfile unter der Bundler-Umgebung hinzufügen.
    • net-ftp 0.1.3
    • net-imap 0.2.2
    • net-pop 0.1.1
    • net-smtp 0.3.1
    • matrix 0.4.2
    • prime 0.1.2
    • debug 1.4.0

Weitere Details finden Sie in NEWS oder den Commit-Logs.

Mit diesen Änderungen wurden 3124 Dateien geändert, 551760 Einfügungen(+), 99167 Löschungen(-) seit Ruby 3.0.0!

Frohe Weihnachten, frohe Feiertage und viel Spaß beim Programmieren mit Ruby 3.1!

Herunterladen

  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.gz

    SIZE: 20103517
    SHA1: e4e8c20dd2a1fdef4d3e5bd5a3461000dd17f226
    SHA256: 50a0504c6edcb4d61ce6b8cfdbddaa95707195fab0ecd7b5e92654b2a9412854
    SHA512: 76009d325e961e601d9a287e36490cbc1f3b5dbf4878fa6eab2c4daa5ff2fed78cbc7525cd87b09828f97cbe2beb30f528928bcc5647af745d03dffe7c5baaa9
    
  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.xz

    SIZE: 14709096
    SHA1: 92b603c2a69fb25d66c337a63e94280984edea11
    SHA256: 1a0e0b69b9b062b6299ff1f6c6d77b66aff3995f63d1d8b8771e7a113ec472e2
    SHA512: a2bb6b5e62d5fa06dd9c30cf84ddcb2c27cb87fbaaffd2309a44391a6b110e1dde6b7b0d8c659b56387ee3c9b4264003f3532d5a374123a7c187ebba9293f320
    
  • https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.zip

    SIZE: 24388179
    SHA1: e37435956d6f840a0e8758d7374bc7e0e346105f
    SHA256: a3bfcd486d09c065d46421da0ff3d430ce4423fefd80cea63c6595d83ae4af0e
    SHA512: 67db71144e06da2c1c25eaf413d1417c99a4b18738a573f9e3371c11ea242eee9dcbdc3de17336f25ab5060039fe034e57298943d344be9cd9eb33bb56e2e1c6
    

Was ist Ruby

Ruby wurde erstmals 1993 von Matz (Yukihiro Matsumoto) entwickelt und wird nun als Open Source entwickelt. Es läuft auf mehreren Plattformen und wird weltweit, insbesondere für die Webentwicklung, eingesetzt.

Aktuelle Nachrichten

Ruby 4.0.0 veröffentlicht

Wir freuen uns, die Veröffentlichung von Ruby 4.0.0 bekannt zu geben. Ruby 4.0 führt „Ruby Box“ und „ZJIT“ ein und bringt viele Verbesserungen mit sich.

Veröffentlicht von naruse am 25. Dez 2025

Ein neuer Look für Rubys Dokumentation

Nach dem Redesign von ruby-lang.org gibt es weitere Neuigkeiten zur Feier des 30-jährigen Jubiläums von Ruby: docs.ruby-lang.org hat ein komplett neues Erscheinungsbild mit Aliki – dem neuen Standard-Theme von RDoc.

Veröffentlicht von Stan Lo am 23. Dez 2025

Neues Website-Erscheinungsbild

Wir freuen uns, ein umfassendes Redesign unserer Website bekannt zu geben. Das Design für dieses Update wurde von Taeko Akatsuka erstellt.

Veröffentlicht von Hiroshi SHIBATA am 22. Dez 2025

Ruby 4.0.0 preview3 veröffentlicht

Wir freuen uns, die Veröffentlichung von Ruby 4.0.0-preview3 bekannt zu geben. Ruby 4.0 führt Ruby::Box und „ZJIT“ ein und bringt viele Verbesserungen mit sich.

Veröffentlicht von naruse am 18. Dez 2025

Weitere Neuigkeiten...