Ruby 3.3.0 veröffentlicht (2024)

Geschrieben von naruse am 25.12.2023
Übersetzt von Thomas Ritter

Wir freuen uns, die Veröffentlichung von Ruby 3.3.0 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.

Prism

  • Einführung des Prism-Parser als Standard-Gem
    • Prism ist ein portabler, fehlertoleranter und wartbarer rekursiver Abstiegsparser für die Ruby-Sprache
  • Prism ist produktionsreif und wird aktiv gepflegt, Sie können es anstelle von Ripper verwenden
    • Es gibt umfangreiche Dokumentation zur Nutzung von Prism
    • 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
    • Nennenswerte Methoden in der Prism-API sind:
      • Prism.parse(source), das den AST als Teil eines Parseergebnisobjekts zurückgibt
      • Prism.parse_comments(source), das die Kommentare zurückgibt
      • Prism.parse_success?(source), das true zurückgibt, wenn keine Fehler vorliegen
  • Sie können Pull-Requests oder Issues direkt im Prism-Repository erstellen, wenn Sie an der Mitarbeit interessiert sind
  • 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.

Verwendung von Lrama anstelle von Bison

  • Ersetzen von Bison durch Lrama LALR-Parsergenerator [Feature #19637]
    • Wenn Sie interessiert sind, sehen Sie sich bitte Die Zukunftsvision des Ruby-Parsers an
    • Der interne Lrama-Parser wird durch einen LR-Parser von Racc ersetzt, um die Wartbarkeit sicherzustellen
    • Parameterisierende Regeln (?, *, +) werden unterstützt, sie werden im Ruby parse.y verwendet

YJIT

  • Große Leistungsverbesserungen gegenüber Ruby 3.2
    • Die Unterstützung für Splat- und Rest-Argumente wurde verbessert.
    • Register werden für Stack-Operationen der virtuellen Maschine zugewiesen.
    • Mehr Aufrufe mit optionalen Argumenten werden kompiliert. Ausnahmebehandler werden ebenfalls kompiliert.
    • Nicht unterstützte Aufruftypen und megamorphe Aufrufstellen werden nicht mehr an den Interpreter übergeben.
    • Grundlegende Methoden wie Rails #blank? undspezialisiertes #present? werden eingebettet (inlined).
    • Integer#*, Integer#!=, String#!=, String#getbyte,Kernel#block_given?, Kernel#is_a?, Kernel#instance_of? und Module#===sind speziell optimiert.
    • Die Kompilierungsgeschwindigkeit ist jetzt etwas schneller als bei Ruby 3.2.
    • Jetzt mehr als 3x schneller als der Interpreter auf Optcarrot!
  • Deutlich verbesserte Speichernutzung gegenüber Ruby 3.2
    • Metadaten für kompilierten Code verwenden viel weniger Speicher.
    • --yjit-call-threshold wird automatisch von 30 auf 120 erhöhtwenn die Anwendung mehr als 40.000 ISEQs hat.
    • --yjit-cold-threshold wird hinzugefügt, um das Kompilieren von kalten ISEQs zu überspringen.
    • Kompakterer Code wird auf Arm64 generiert.
  • Code GC ist jetzt standardmäßig deaktiviert
    • --yjit-exec-mem-size wird als hartes Limit behandelt, bei der die Kompilierung neuer Codes stoppt.
    • Keine plötzlichen Leistungseinbrüche aufgrund von Code GC.Besseres Copy-on-Write-Verhalten auf Servern mit Reforking mitPitchfork.
    • Sie können Code GC weiterhin mit --yjit-code-gc aktivieren, falls gewünscht
  • Hinzufügen von RubyVM::YJIT.enable, das YJIT zur Laufzeit aktivieren kann
    • Sie können YJIT starten, ohne Kommandozeilenargumente oder Umgebungsvariablen zu ändern.Rails 7.2 wird YJIT standardmäßig aktivierenmit dieser Methode.
    • Dies kann auch verwendet werden, um YJIT nur zu aktivieren, sobald Ihre Anwendunghochgefahren ist. --yjit-disable kann verwendet werden, wenn Sie andereYJIT-Optionen verwenden möchten, während YJIT beim Booten deaktiviert ist.
  • Mehr YJIT-Statistiken sind standardmäßig verfügbar
    • yjit_alloc_size und mehrere weitere metadatenbezogene Statistiken sind jetzt standardmäßig verfügbar.
    • Die von --yjit-stats produzierte ratio_in_yjit-Statistik ist jetzt in Release-Builds verfügbar,ein spezieller Statistik- oder Dev-Build ist nicht mehr erforderlich, um die meisten Statistiken abzurufen.
  • Hinzufügen weiterer Profiling-Fähigkeiten
    • --yjit-perf wird hinzugefügt, um das Profiling mit Linux perf zu erleichtern.
    • --yjit-trace-exits unterstützt jetzt das Sampling mit --yjit-trace-exits-sample-rate=N
  • Gründlicheres Testing und mehrere Bugfixes

RJIT

  • Einführung eines reinen Ruby JIT-Compilers RJIT und Ersatz von MJIT.
    • RJIT unterstützt nur die x86-64-Architektur auf Unix-Plattformen.
    • Im Gegensatz zu MJIT wird zur Laufzeit kein C-Compiler benötigt.
  • RJIT existiert nur zu experimentellen Zwecken.
    • Sie sollten in der Produktion weiterhin YJIT verwenden.
  • Wenn Sie an der Entwicklung von JIT für Ruby interessiert sind, schauen Sie sich bitte k0kubuns Präsentation am Tag 3 von RubyKaigi an.

M:N-Thread-Scheduler

  • M:N-Thread-Scheduler wurde eingeführt. [Feature #19842]
    • M Ruby-Threads werden von N nativen Threads (OS-Threads) verwaltet, sodass die Thread-Erstellungs- und Verwaltungskosten reduziert werden.
    • Es kann die Kompatibilität mit C-Erweiterungen brechen, sodass der M:N-Thread-Scheduler standardmäßig auf dem Haupt-Ractor deaktiviert ist.
      • Die Umgebungsvariable RUBY_MN_THREADS=1 aktiviert M:N-Threads auf dem Haupt-Ractor.
      • M:N-Threads sind immer auf Nicht-Haupt-Ractors aktiviert.
    • Die Umgebungsvariable RUBY_MAX_CPU=n legt die maximale Anzahl von N (maximale Anzahl nativer Threads) fest. Der Standardwert ist 8.
      • 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.
      • Zur Unterstützung von blockierenden Operationen können mehr als N native Threads verwendet werden.

Leistungsverbesserungen

  • defined?(@ivar) ist mit Object Shapes optimiert.
  • Namensauflösungen wie Socket.getaddrinfo können jetzt unterbrochen werden (in Umgebungen, in denen pthreads verfügbar sind). [Feature #19965]
  • Mehrere Leistungsverbesserungen beim Garbage Collector
    • Junge Objekte, die von alten Objekten referenziert werden, werden nicht mehr sofortin die alte Generation befördert. Dies reduziert die Häufigkeit vongroßen GC-Sammlungen erheblich. [Feature #19678]
    • Eine neue Tuning-Variable REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO wurdeeingeführt, um die Anzahl der ungeschützten Objekte zu steuern, die eine große GC-Sammlung auslösen. Der Standardwert ist auf 0.01 (1%) festgelegt. Dies reduziert die Häufigkeit von großen GC-Sammlungen erheblich. [Feature #19571]
    • Write Barriers wurden für viele Kerntypen implementiert, die sie bisher vermisst haben,insbesondere Time, Enumerator, MatchData, Method, File::Stat, BigDecimalund mehrere andere. Dies reduziert die Zeit für kleine GC-Sammlungen und die Häufigkeit großer GC-Sammlungen erheblich.
    • Die meisten Kerntypen verwenden jetzt Variable Width Allocation, insbesondere Hash, Time,Thread::Backtrace, Thread::Backtrace::Location, File::Stat, Method.Dadurch sind diese Klassen schneller zugeteilt und freigegeben, verwenden weniger Speicher und reduzierendie Heapfragmentierung.
    • Unterstützung für schwache Referenzen wurde dem Garbage Collector hinzugefügt. [Feature #19783]

Weitere bemerkenswerte Änderungen seit 3.2

IRB

IRB hat mehrere Verbesserungen erhalten, einschließlich, aber nicht beschränkt auf:

  • Fortgeschrittene irb:rdbg-Integration, die ein äquivalentes Debugging-Erlebnis zu pry-byebug bietet (Dokumentation).
  • Pager-Unterstützung für die Befehle ls, show_source und show_cmds.
  • Genauere und hilfreichere Informationen, die von den Befehlen ls und show_source bereitgestellt werden.
  • Experimentelle Autovervollständigung mit Typenanalyse (Dokumentation).
  • Es ist jetzt möglich, die Schriftfarbe und den Schriftstil im Vervollständigungsdialog durch eine neu eingeführte Klasse Reline::Face zu ändern (Dokumentation)

Zusätzlich dazu hat IRB umfangreiche Refactorings durchlaufen und Dutzende von Bugfixes erhalten, um zukünftige Verbesserungen zu erleichtern.

Für detailliertere Updates lesen Sie bitte Die große Weiterentwicklung von Ruby 3.3’s IRB enthüllt.

Kompatibilitätsprobleme

Hinweis: Ausschließlich Bugfixes von Features.

  • it-Aufrufe ohne Argumente in einem Block ohne gewöhnliche Parameter sindveraltet (deprecated). it wird in Ruby 3.4 eine Referenz auf den ersten Blockparameter sein.[Feature #18980]

Entfernte Umgebungsvariablen

Die folgenden veralteten Methoden werden entfernt.

  • 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]

Stdlib-Kompatibilitätsprobleme

ext/readline wird eingestellt

  • 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.
  • Wir müssen keine Bibliotheken wie libreadline oder libedit mehr installieren.

Aktualisierungen der Standardbibliothek

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.

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.

Zielbibliotheken sind:

  • abbrev
  • base64
  • bigdecimal
  • csv
  • drb
  • getoptlong
  • mutex_m
  • nkf
  • observer
  • racc
  • resolv-replace
  • rinda
  • syslog

Das folgende Standard-Gem wird hinzugefügt.

  • prism 0.19.0

Die folgenden Standard-Gems werden aktualisiert.

  • RubyGems 3.5.3
  • abbrev 0.1.2
  • base64 0.2.0
  • benchmark 0.3.0
  • bigdecimal 3.1.5
  • bundler 2.5.3
  • cgi 0.4.1
  • csv 3.2.8
  • date 3.3.4
  • delegate 0.3.1
  • drb 2.2.0
  • english 0.8.0
  • erb 4.0.3
  • error_highlight 0.6.0
  • etc 1.4.3
  • fcntl 1.1.0
  • fiddle 1.1.2
  • fileutils 1.7.2
  • find 0.2.0
  • getoptlong 0.2.1
  • io-console 0.7.1
  • io-nonblock 0.3.0
  • io-wait 0.3.1
  • ipaddr 1.2.6
  • irb 1.11.0
  • json 2.7.1
  • logger 1.6.0
  • mutex_m 0.2.0
  • net-http 0.4.0
  • net-protocol 0.2.2
  • nkf 0.1.3
  • observer 0.1.2
  • open-uri 0.4.1
  • open3 0.2.1
  • openssl 3.2.0
  • optparse 0.4.0
  • ostruct 0.6.0
  • pathname 0.3.0
  • pp 0.5.0
  • prettyprint 0.2.0
  • pstore 0.1.3
  • psych 5.1.2
  • rdoc 6.6.2
  • readline 0.0.4
  • reline 0.4.1
  • resolv 0.3.0
  • rinda 0.2.0
  • securerandom 0.3.1
  • set 1.1.0
  • shellwords 0.2.0
  • singleton 0.2.0
  • stringio 3.1.0
  • strscan 3.0.7
  • syntax_suggest 2.0.0
  • syslog 0.1.2
  • tempfile 0.2.1
  • time 0.3.0
  • timeout 0.4.1
  • tmpdir 0.2.0
  • tsort 0.2.0
  • un 0.3.0
  • uri 0.13.0
  • weakref 0.1.3
  • win32ole 1.8.10
  • yaml 0.3.0
  • zlib 3.1.0

Das folgende mitinstallierten Gem wird von Standard-Gems gefördert.

  • racc 1.7.3

Die folgenden mitinstallierten Gems werden aktualisiert.

  • minitest 5.20.0
  • rake 13.1.0
  • test-unit 3.6.1
  • rexml 3.2.6
  • rss 0.3.0
  • net-ftp 0.3.3
  • net-imap 0.4.9
  • net-smtp 0.4.0
  • rbs 3.4.0
  • typeprof 0.21.9
  • debug 1.9.1

Weitere Informationen finden Sie in den GitHub-Releases wie Logger oderÄnderungsprotokoll für Details zu den Standard-Gems oder mitinstallierten Gems.

Siehe NEWSoder Commit-Protokollefür weitere Details.

Mit diesen Änderungen haben sich 5532 Dateien geändert, 326851 Einfügungen(+), 185793 Löschungen(-)seit Ruby 3.2.0!

Frohe Weihnachten, schöne Feiertage und viel Spaß beim Programmieren mit Ruby 3.3!

Download

  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz

    GRÖSSE: 22065999SHA1: 1a7e56851bf29bda1183aca99b3b323c58e0187bSHA256: 96518814d9832bece92a85415a819d4893b307db5921ae1f0f751a9a89a56b7dSHA512: 26074009b501fc793d71a74e419f34a6033c9353433919ca74ba2d24a3de432dbb11fd92c2bc285f0e4d951a6d6c74bf5b69a2ab36200c8c26e871746d6e0fc6
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.xz

    GRÖSSE: 16345456SHA1: c8f68e1b0a114b90460a0b44165a3b2f540fa5b6SHA256: 676b65a36e637e90f982b57b059189b3276b9045034dcd186a7e9078847b975bSHA512: 7959c5753bfa0bfc4d6d74060869aabbe9815c1c97930659da11b917ee0803ddbbd80e869e00c48b8694b4ba48709c3b6493fd045568e36e902616c35ababf01
  • https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.zip

    GRÖSSE: 26935108SHA1: a433eef1d7f96daeaf3b4cb842d0ed2dd82e7dc1SHA256: 0e6563f679dd3694732eb3addf9de681c67b584602ac574376b60e7a509d2cd8SHA512: a94a85937a14b217c1f4b90d24185289ed4aee79239c4f3eecf8034d3fd34e65ee8d66869473857ed153067188adc9b70c0471e4ebe842c9f98ef60c34090450

Was ist Ruby

Ruby wurde erstmals 1993 von Matz (Yukihiro Matsumoto) entwickeltund wird jetzt als Open Source entwickelt. Es läuft auf mehreren Plattformenund wird weltweit vor allem für die Webentwicklung verwendet.

Ruby 3.3.0 veröffentlicht (2024)
Top Articles
Sam's Club Gasoline Price Today
Greensboro News, Weather, Safety, Sports | NewsBreak Greensboro, NC
Cold Air Intake - High-flow, Roto-mold Tube - TOYOTA TACOMA V6-4.0
CLI Book 3: Cisco Secure Firewall ASA VPN CLI Configuration Guide, 9.22 - General VPN Parameters [Cisco Secure Firewall ASA]
Katmoie
Craigslist Pet Phoenix
Mcoc Immunity Chart July 2022
Zitobox 5000 Free Coins 2023
Clafi Arab
Irving Hac
Elle Daily Horoscope Virgo
Blog:Vyond-styled rants -- List of nicknames (blog edition) (TouhouWonder version)
Flights To Frankfort Kentucky
Chile Crunch Original
Quest Beyondtrustcloud.com
R Cwbt
Craigslist Missoula Atv
Eine Band wie ein Baum
north jersey garage & moving sales - craigslist
Phoebus uses last-second touchdown to stun Salem for Class 4 football title
Craigslist Apartments Baltimore
6 Most Trusted Pheromone perfumes of 2024 for Winning Over Women
Troy Gamefarm Prices
Craigslist Panama City Beach Fl Pets
1773x / >
Gillette Craigslist
Dexter Gomovies
Possum Exam Fallout 76
King Soopers Cashiers Check
Alima Becker
L'alternativa - co*cktail Bar On The Pier
Fedex Walgreens Pickup Times
How To Make Infinity On Calculator
First Light Tomorrow Morning
Mega Millions Lottery - Winning Numbers & Results
Ultra Clear Epoxy Instructions
Nsu Occupational Therapy Prerequisites
Buhsd Studentvue
3496 W Little League Dr San Bernardino Ca 92407
SF bay area cars & trucks "chevrolet 50" - craigslist
Torrid Rn Number Lookup
Cocorahs South Dakota
Free Crossword Puzzles | BestCrosswords.com
✨ Flysheet for Alpha Wall Tent, Guy Ropes, D-Ring, Metal Runner & Stakes Included for Hunting, Family Camping & Outdoor Activities (12'x14', PE) — 🛍️ The Retail Market
Stosh's Kolaches Photos
Sky Dental Cartersville
Ephesians 4 Niv
Every Type of Sentinel in the Marvel Universe
El Patron Menu Bardstown Ky
Lake County Fl Trash Pickup Schedule
ats: MODIFIED PETERBILT 389 [1.31.X] v update auf 1.48 Trucks Mod für American Truck Simulator
Coors Field Seats In The Shade
Latest Posts
Article information

Author: Tish Haag

Last Updated:

Views: 5383

Rating: 4.7 / 5 (47 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Tish Haag

Birthday: 1999-11-18

Address: 30256 Tara Expressway, Kutchburgh, VT 92892-0078

Phone: +4215847628708

Job: Internal Consulting Engineer

Hobby: Roller skating, Roller skating, Kayaking, Flying, Graffiti, Ghost hunting, scrapbook

Introduction: My name is Tish Haag, I am a excited, delightful, curious, beautiful, agreeable, enchanting, fancy person who loves writing and wants to share my knowledge and understanding with you.