Ruby 3.2.0 veröffentlicht
Gepostet von naruse am 25. Dez 2022
Wir freuen uns, die Veröffentlichung von Ruby 3.2.0 bekannt zu geben. Ruby 3.2 bietet viele neue Funktionen und Leistungsverbesserungen.
WASI-basierte WebAssembly-Unterstützung
Dies ist ein erster Port der WASI-basierten WebAssembly-Unterstützung. Dies ermöglicht die Verfügbarkeit eines CRuby-Binärprogramms in einem Webbrowser, einer Serverless Edge-Umgebung oder anderen Arten von WebAssembly/WASI-Embeddern. Derzeit besteht dieser Port die grundlegenden und Bootstrapping-Testsuiten, die die Thread-API nicht verwenden.

Hintergrund
WebAssembly (Wasm) wurde ursprünglich eingeführt, um Programme sicher und schnell in Webbrowsern auszuführen. Sein Ziel – Programme effizient und sicher in verschiedenen Umgebungen auszuführen – wird jedoch seit langem nicht nur für das Web, sondern auch für allgemeine Anwendungen gewünscht.
WASI (The WebAssembly System Interface) wurde für solche Anwendungsfälle entwickelt. Obwohl solche Anwendungen mit Betriebssystemen kommunizieren müssen, läuft WebAssembly in einer virtuellen Maschine ohne Systemoberfläche. WASI standardisiert dies.
Die WebAssembly/WASI-Unterstützung in Ruby zielt darauf ab, diese Projekte zu nutzen. Sie ermöglicht Ruby-Entwicklern, Anwendungen zu schreiben, die auf diesen vielversprechenden Plattformen laufen.
Anwendungsfall
Diese Unterstützung ermutigt Entwickler, CRuby in einer WebAssembly-Umgebung zu nutzen. Ein Beispiel für einen Anwendungsfall ist die CRuby-Unterstützung der TryRuby Playground. Jetzt können Sie originales CRuby in Ihrem Webbrowser ausprobieren.
Technische Punkte
Das heutige WASI und WebAssembly selbst verfügen über einige fehlende Funktionen zur Implementierung von Fiber, Ausnahmen und GC aus Sicherheitsgründen und weil sie sich noch in der Entwicklung befinden. Daher schließt CRuby die Lücke mithilfe von Asyncify, einer Binärtransformationstechnik zur Steuerung der Ausführung im Userland.
Darüber hinaus haben wir ein VFS auf Basis von WASI erstellt, damit wir Ruby-Apps einfach in eine einzige .wasm-Datei packen können. Das erleichtert die Verteilung von Ruby-Apps.
Verwandte Links
- Hinzufügen von WASI-basierter WebAssembly-Unterstützung #5407
- Ein Update zur WebAssembly/WASI-Unterstützung in Ruby
Produktionsbereites YJIT

- YJIT ist nicht mehr experimentell
- Wurde über ein Jahr lang in Produktionsumgebungen getestet und hat sich als sehr stabil erwiesen.
- YJIT unterstützt jetzt sowohl x86-64- als auch arm64/aarch64-CPUs unter Linux, MacOS, BSD und anderen UNIX-Plattformen.
- Diese Version bringt Unterstützung für Apple M1/M2, AWS Graviton, Raspberry Pi 4 und mehr.
- Das Bauen von YJIT erfordert jetzt Rust 1.58.0+. [Feature #18481]
- Um sicherzustellen, dass CRuby mit YJIT kompiliert wird, installieren Sie bitte
rustc>= 1.58.0, bevor Sie das Skript./configureausführen. - Bitte wenden Sie sich an das YJIT-Team, falls Sie auf Probleme stoßen.
- Um sicherzustellen, dass CRuby mit YJIT kompiliert wird, installieren Sie bitte
- Die YJIT 3.2-Version ist schneller als 3.1 und hat etwa ein Drittel weniger Speicher-Overhead.
- Insgesamt ist YJIT 41% schneller (geometrischer Mittelwert) als der Ruby-Interpreter auf yjit-bench.
- Physischer Speicher für JIT-Code wird verzögert zugewiesen. Im Gegensatz zu Ruby 3.1 wird der RSS eines Ruby-Prozesses minimiert, da virtuelle Speicherseiten, die von
--yjit-exec-mem-sizezugewiesen werden, erst dann physischen Speicherseiten zugeordnet werden, wenn sie tatsächlich von JIT-Code genutzt werden. - Einführung von Code GC, das alle Code-Seiten freigibt, wenn der Speicherverbrauch durch JIT-Code
--yjit-exec-mem-sizeerreicht. RubyVM::YJIT.runtime_statsgibt neben den vorhandenen Schlüsselninline_code_sizeundoutlined_code_sizeauch Code-GC-Metriken zurück:code_gc_count,live_page_count,freed_page_countundfreed_code_size.
- Die meisten Statistiken, die von
RubyVM::YJIT.runtime_statserzeugt werden, sind jetzt in Release-Builds verfügbar.- Führen Sie einfach Ruby mit
--yjit-statsaus, um Statistiken zu berechnen und auszugeben (verursacht etwas Laufzeit-Overhead).
- Führen Sie einfach Ruby mit
- YJIT ist jetzt für die Nutzung von Objektschemata optimiert. [Feature #18776]
- Nutzt feinere konstante Invalidation, um weniger Code zu invalidieren, wenn neue Konstanten definiert werden. [Feature #18589]
- Der Standardwert für
--yjit-exec-mem-sizewurde auf 64 (MiB) geändert. - Der Standardwert für
--yjit-call-thresholdwurde auf 30 geändert.
Regexp-Verbesserungen gegen ReDoS
Es ist bekannt, dass Regexp-Abgleiche unerwartet lange dauern können. Wenn Ihr Code versucht, ein möglicherweise ineffizientes Regexp mit einem nicht vertrauenswürdigen Eingabe abzugleichen, kann ein Angreifer dies für eine effiziente Denial of Service (sogenannter Regular Expression DoS oder ReDoS) ausnutzen.
Wir haben zwei Verbesserungen eingeführt, die ReDoS erheblich abmildern.
Verbesserter Regexp-Abgleichalgorithmus
Seit Ruby 3.2 wurde der Abgleichalgorithmus von Regexp durch die Verwendung einer Memoisationstechnik erheblich verbessert.
# This match takes 10 sec. in Ruby 3.1, and 0.003 sec. in Ruby 3.2
/^a*b?a*$/ =~ "a" * 50000 + "x"

Der verbesserte Abgleichalgorithmus ermöglicht, dass die meisten Regexp-Abgleiche (etwa 90 % in unseren Experimenten) in linearer Zeit abgeschlossen werden.
Diese Optimierung kann für jeden Abgleich Speicher proportional zur Eingabelänge verbrauchen. Wir erwarten keine praktischen Probleme, da diese Speicherzuweisung normalerweise verzögert wird und ein normaler Regexp-Abgleich höchstens das 10-fache des Speichers der Eingabelänge verbrauchen sollte. Wenn Ihnen in einer realen Anwendung der Speicher beim Abgleichen von Regexps ausgeht, melden Sie dies bitte.
Der ursprüngliche Vorschlag ist https://bugs.ruby-lang.org/issues/19104
Regexp-Timeout
Die obige Optimierung kann nicht auf einige Arten von regulären Ausdrücken angewendet werden, z. B. solche, die erweiterte Funktionen (z. B. Backreferences oder Lookarounds) enthalten, oder mit einer riesigen festen Anzahl von Wiederholungen. Als Rückfallmaßnahme wurde auch eine Timeout-Funktion für Regexp-Abgleiche eingeführt.
Regexp.timeout = 1.0
/^a*b?a*()\1$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
Beachten Sie, dass Regexp.timeout eine globale Konfiguration ist. Wenn Sie für einige spezielle Regexps andere Timeout-Einstellungen verwenden möchten, möchten Sie möglicherweise das Schlüsselwort timeout für Regexp.new verwenden.
Regexp.timeout = 1.0
# This regexp has no timeout
long_time_re = Regexp.new('^a*b?a*()\1$', timeout: Float::INFINITY)
long_time_re =~ "a" * 50000 + "x" # never interrupted
Der ursprüngliche Vorschlag ist https://bugs.ruby-lang.org/issues/17837.
Weitere bemerkenswerte neue Funktionen
SyntaxSuggest
-
Die Funktion
syntax_suggest(früherdead_end) wurde in Ruby integriert. Dies hilft Ihnen, die Position von Fehlern wie fehlenden oder überflüssigenends zu finden, um Sie schneller wieder auf den richtigen Weg zu bringen, wie im folgenden BeispielUnmatched `end', missing keyword (`do', `def`, `if`, etc.) ? 1 class Dog > 2 defbark > 3 end 4 end
ErrorHighlight
- Zeigt nun auf die relevanten Argumente für TypeError und ArgumentError
test.rb:2:in `+': nil can't be coerced into Integer (TypeError)
sum = ary[0] + ary[1]
^^^^^^
Sprache
-
Anonyme Rest- und Keyword-Rest-Argumente können nun als Argumente übergeben werden, nicht nur in Methodenparametern verwendet werden. [Feature #18351]
def foo(*) bar(*) end def baz(**) quux(**) end -
Ein Proc, das ein einzelnes positionsbezogenes Argument und Schlüsselwörter akzeptiert, wird nicht mehr automatisch gesplittet. [Bug #18633]
proc{|a, **k| a}.call([1, 2]) # Ruby 3.1 and before # => 1 # Ruby 3.2 and after # => [1, 2] -
Die Auswertungsreihenfolge der Konstantenbelegung für explizit auf Objekten gesetzte Konstanten wurde mit der Auswertungsreihenfolge der einzelnen Attributbelegung konsistent gemacht. Mit diesem Code
foo::BAR = bazfoowird nun vorbazaufgerufen. Ebenso wird für Mehrfachzuweisungen an Konstanten die Auswertungsreihenfolge von links nach rechts verwendet. Mit diesem Codefoo1::BAR1, foo2::BAR2 = baz1, baz2Die folgende Auswertungsreihenfolge wird nun verwendet
foo1foo2baz1baz2
-
Das Find-Muster ist nicht mehr experimentell. [Feature #18585]
-
Methoden, die einen Restparameter (wie
*args) annehmen und Schlüsselwortargumente überfoo(*args)delegieren möchten, müssen nun mitruby2_keywordsmarkiert sein (sofern nicht bereits geschehen). Mit anderen Worten, alle Methoden, die Schlüsselwortargumente über*argsdelegieren möchten, müssen nun ausnahmslos mitruby2_keywordsmarkiert sein. Dies erleichtert die Umstellung auf andere Delegationsmethoden, sobald eine Bibliothek Ruby 3+ erfordern kann. Zuvor wurde das Flagruby2_keywordsbeibehalten, wenn die empfangende Methode*argsverwendete, dies war jedoch ein Fehler und eine Inkonsistenz. Eine gute Technik, um potenziell fehlenderuby2_keywordszu finden, ist die Ausführung der Testsuite, das Auffinden der letzten Methode, die Schlüsselwortargumente für jeden Ort empfangen muss, an dem die Testsuite fehlschlägt, und die Verwendung vonputs nil, caller, nildort. Überprüfen Sie dann, ob jede Methode/jeder Block in der Aufrufkette, der Schlüsselwörter delegieren muss, korrekt mitruby2_keywordsmarkiert ist. [Bug #18625] [Bug #16466]def target(**kw) end # Accidentally worked without ruby2_keywords in Ruby 2.7-3.1, ruby2_keywords # needed in 3.2+. Just like (*args, **kwargs) or (...) would be needed on # both #foo and #bar when migrating away from ruby2_keywords. ruby2_keywords def bar(*args) target(*args) end ruby2_keywords def foo(*args) bar(*args) end foo(k: 1)
Leistungsverbesserungen
MJIT
- Der MJIT-Compiler wird in Ruby als
ruby_vm/mjit/compilerneu implementiert. - Der MJIT-Compiler wird in einem geforkten Prozess ausgeführt, anstatt in einem nativen Thread namens MJIT-Worker. [Feature #18968]
- Daher wird Microsoft Visual Studio (MSWIN) nicht mehr unterstützt.
- MinGW wird nicht mehr unterstützt. [Feature #18824]
- Umbenennung von
--mjit-min-callsin--mjit-call-threshold. - Änderung des Standardwerts für
--mjit-max-cachevon 10000 auf 100.
PubGrub
-
Bundler 2.4 verwendet nun den PubGrub-Resolver anstelle von Molinillo.
- PubGrub ist der Lösungsalgorithmus der nächsten Generation, der vom
pub-Paketmanager für die Dart-Programmiersprache verwendet wird. - Nach dieser Änderung erhalten Sie möglicherweise ein anderes Auflösungsergebnis. Bitte melden Sie solche Fälle an die RubyGems/Bundler Issues.
- PubGrub ist der Lösungsalgorithmus der nächsten Generation, der vom
-
RubyGems verwendet in Ruby 3.2 weiterhin den Molinillo-Resolver. Wir planen, ihn zukünftig durch PubGrub zu ersetzen.
Weitere bemerkenswerte Änderungen seit 3.1
- Data
-
Neue Kernklasse zur Darstellung einfacher, unveränderlicher Wertobjekte. Die Klasse ähnelt Struct und teilt sich teilweise eine Implementierung, hat aber eine schlankere und strengere API. [Feature #16122]
Measure = Data.define(:amount, :unit) distance = Measure.new(100, 'km') #=> #<data Measure amount=100, unit="km"> weight = Measure.new(amount: 50, unit: 'kg') #=> #<data Measure amount=50, unit="kg"> weight.with(amount: 40) #=> #<data Measure amount=40, unit="kg"> weight.amount #=> 50 weight.amount = 40 #=> NoMethodError: undefined method `amount='
-
- Hash
Hash#shiftgibt nun immer nil zurück, wenn der Hash leer ist, anstatt den Standardwert zurückzugeben oder die Default-Prozedur aufzurufen. [Bug #16908]
- MatchData
MatchData#byteoffsetwurde hinzugefügt. [Feature #13110]
- Module
Module.used_refinementswurde hinzugefügt. [Feature #14332]Module#refinementswurde hinzugefügt. [Feature #12737]Module#const_addedwurde hinzugefügt. [Feature #17881]
- Proc
Proc#dupgibt eine Instanz einer Unterklasse zurück. [Bug #17545]Proc#parametersakzeptiert nun das Lambda-Schlüsselwort. [Feature #15357]
- Refinement
Refinement#refined_classwurde hinzugefügt. [Feature #12737]
- RubyVM::AbstractSyntaxTree
- Option
error_tolerantfürparse,parse_fileundofhinzugefügt. [Feature #19013] Mit dieser Option- SyntaxError wird unterdrückt
- AST wird für ungültige Eingabe zurückgegeben
endwird ergänzt, wenn ein Parser das Ende der Eingabe erreicht, aberendnicht ausreichtendwird basierend auf der Einrückung als Schlüsselwort behandelt
# Without error_tolerant option root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY) def m a = 10 if end RUBY # => <internal:ast>:33:in `parse': syntax error, unexpected `end' (SyntaxError) # With error_tolerant option root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) def m a = 10 if end RUBY p root # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-4:3> # `end` is treated as keyword based on indent root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) module Z class Foo foo. end def bar end end RUBY p root.children[-1].children[-1].children[-1].children[-2..-1] # => [#<RubyVM::AbstractSyntaxTree::Node:CLASS@2:2-4:5>, #<RubyVM::AbstractSyntaxTree::Node:DEFN@6:2-7:5>] -
Option
keep_tokensfürparse,parse_fileundofhinzugefügt. [Feature #19070]root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true) root.tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...] root.tokens.map{_1[2]}.join # => "x = 1 + 2"
- Option
- Set
- Set ist jetzt als integrierte Klasse verfügbar, ohne dass
require "set"erforderlich ist. [Feature #16989] Es wird derzeit über die KonstanteSetoder einen Aufruf vonEnumerable#to_setautomatisch geladen.
- Set ist jetzt als integrierte Klasse verfügbar, ohne dass
- String
String#byteindexundString#byterindexwurden hinzugefügt. [Feature #13110]- Unicode auf Version 15.0.0 und Emoji Version 15.0 aktualisiert. [Feature #18639] (gilt auch für Regexp)
String#bytesplicewurde hinzugefügt. [Feature #18598]
- Struct
-
Eine Struct-Klasse kann auch mit Schlüsselwortargumenten initialisiert werden, ohne
keyword_init: truebeiStruct.new. [Feature #16806]Post = Struct.new(:id, :name) Post.new(1, "hello") #=> #<struct Post id=1, name="hello"> # From Ruby 3.2, the following code also works without keyword_init: true. Post.new(id: 1, name: "hello") #=> #<struct Post id=1, name="hello">
-
Kompatibilitätsprobleme
Hinweis: Ausgenommen sind Feature-Fehlerbehebungen.
Entfernte Konstanten
Die folgenden veralteten Konstanten wurden entfernt.
FixnumundBignum[Feature #12005]Random::DEFAULT[Feature #17351]Struct::GroupStruct::Passwd
Entfernte Methoden
Die folgenden veralteten Methoden wurden entfernt.
Dir.exists?[Feature #17391]File.exists?[Feature #17391]Kernel#=~[Feature #15231]Kernel#taint,Kernel#untaint,Kernel#tainted?[Feature #16131]Kernel#trust,Kernel#untrust,Kernel#untrusted?[Feature #16131]
Stdlib-Kompatibilitätsprobleme
Keine Bündelung von Drittanbieterquellen mehr
-
Wir bündeln keine Drittanbieterquellen mehr wie
libyaml,libffi.-
Die libyaml-Quelle wurde aus psych entfernt. Möglicherweise müssen Sie
libyaml-devauf Ubuntu/Debian-Plattformen installieren. Der Paketname ist für jede Plattform unterschiedlich. -
Die gebündelte libffi-Quelle wurde ebenfalls aus
fiddleentfernt.
-
-
Psych und fiddle unterstützten statische Builds mit spezifischen Versionen von libyaml- und libffi-Quellen. Sie können psych mit libyaml-0.2.5 wie folgt erstellen:
$ ./configure --with-libyaml-source-dir=/path/to/libyaml-0.2.5Und Sie können fiddle mit libffi-3.4.4 wie folgt erstellen:
$ ./configure --with-libffi-source-dir=/path/to/libffi-3.4.4
C-API-Aktualisierungen
Aktualisierte C-APIs
Die folgenden APIs wurden aktualisiert.
- PRNG-Update
rb_random_interface_twurde aktualisiert und versioniert. Erweiterungsbibliotheken, die diese Schnittstelle verwenden und für ältere Versionen erstellt wurden. Außerdem muss die Funktioninit_int32definiert werden.
Entfernte C-APIs
Die folgenden veralteten APIs wurden entfernt.
- Variable
rb_cData. - „Taintedness“- und „Trustedness“-Funktionen. [Feature #16131]
Aktualisierungen der Standardbibliothek
-
Bundler
- Hinzufügen der Unterstützung für –ext=rust zum Bündeln von Gems für die Erstellung einfacher Gems mit Rust-Erweiterungen. [GH-rubygems-6149]
- Schnelleres Klonen von Git-Repos. [GH-rubygems-4475]
-
RubyGems
- Hinzufügen der mswin-Unterstützung für den Cargo-Builder. [GH-rubygems-6167]
-
ERB
ERB::Util.html_escapeist schneller alsCGI.escapeHTML.- Es wird kein String-Objekt mehr zugewiesen, wenn keine Zeichen escaped werden müssen.
- Der Aufruf von
#to_swird übersprungen, wenn ein Argument bereits ein String ist. ERB::Escape.html_escapewurde als Alias fürERB::Util.html_escapehinzugefügt, das nicht von Rails monkey-patched wurde.
-
IRB
- Befehle zur Integration von debug.gem wurden hinzugefügt:
debug,break,catch,next,delete,step,continue,finish,backtrace,info- Sie funktionieren auch dann, wenn Sie
gem "debug"nicht in Ihrer Gemfile haben. - Siehe auch: Was gibt es Neues in Ruby 3.2's IRB?
- Sie funktionieren auch dann, wenn Sie
- Es wurden weitere Pry-ähnliche Befehle und Funktionen hinzugefügt.
editundshow_cmds(wie Pry'shelp) wurden hinzugefügt.lsnimmt die Option-goder-Gentgegen, um Ausgaben zu filtern.show_sourceist ein Alias von$und akzeptiert unquotierte Eingaben.whereamiist ein Alias von@.
- Befehle zur Integration von debug.gem wurden hinzugefügt:
-
Die folgenden Standard-Gems werden aktualisiert.
- RubyGems 3.4.1
- abbrev 0.1.1
- benchmark 0.2.1
- bigdecimal 3.1.3
- bundler 2.4.1
- cgi 0.3.6
- csv 3.2.6
- date 3.3.3
- delegate 0.3.0
- did_you_mean 1.6.3
- digest 3.1.1
- drb 2.1.1
- english 0.7.2
- erb 4.0.2
- error_highlight 0.5.1
- etc 1.4.2
- fcntl 1.0.2
- fiddle 1.1.1
- fileutils 1.7.0
- forwardable 1.3.3
- getoptlong 0.2.0
- io-console 0.6.0
- io-nonblock 0.2.0
- io-wait 0.3.0
- ipaddr 1.2.5
- irb 1.6.2
- json 2.6.3
- logger 1.5.3
- mutex_m 0.1.2
- net-http 0.3.2
- net-protocol 0.2.1
- nkf 0.1.2
- open-uri 0.3.0
- open3 0.1.2
- openssl 3.1.0
- optparse 0.3.1
- ostruct 0.5.5
- pathname 0.2.1
- pp 0.4.0
- pstore 0.1.2
- psych 5.0.1
- racc 1.6.2
- rdoc 6.5.0
- readline-ext 0.1.5
- reline 0.3.2
- resolv 0.2.2
- resolv-replace 0.1.1
- securerandom 0.2.2
- set 1.0.3
- stringio 3.0.4
- strscan 3.0.5
- syntax_suggest 1.0.2
- syslog 0.1.1
- tempfile 0.1.3
- time 0.2.1
- timeout 0.3.1
- tmpdir 0.1.3
- tsort 0.1.1
- un 0.2.1
- uri 0.12.0
- weakref 0.1.2
- win32ole 1.8.9
- yaml 0.2.1
- zlib 3.0.0
-
Die folgenden gebündelten Gems werden aktualisiert.
- minitest 5.16.3
- power_assert 2.0.3
- test-unit 3.5.7
- net-ftp 0.2.0
- net-imap 0.3.3
- net-pop 0.1.2
- net-smtp 0.3.3
- rbs 2.8.2
- typeprof 0.21.3
- debug 1.7.1
Siehe GitHub-Releases wie GitHub Releases von logger oder das Changelog für Details zu den Standard- oder gebündelten Gems.
Weitere Details finden Sie in NEWS oder in den Commit-Logs.
Mit diesen Änderungen wurden 3048 Dateien geändert, 218253 Einfügungen(+), 131067 Löschungen(-) seit Ruby 3.1.0!
Frohe Weihnachten, frohe Feiertage und viel Spaß beim Programmieren mit Ruby 3.2!
Herunterladen
-
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.tar.gz
SIZE: 20440715 SHA1: fb4ab2ceba8bf6a5b9bc7bf7cac945cc94f94c2b SHA256: daaa78e1360b2783f98deeceb677ad900f3a36c0ffa6e2b6b19090be77abc272 SHA512: 94203051d20475b95a66660016721a0457d7ea57656a9f16cdd4264d8aa6c4cd8ea2fab659082611bfbd7b00ebbcf0391e883e2ebf384e4fab91869e0a877d35 -
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.tar.xz
SIZE: 15058364 SHA1: bcdae07183d66fd902cb7bf995545a472d2fefea SHA256: d2f4577306e6dd932259693233141e5c3ec13622c95b75996541b8d5b68b28b4 SHA512: 733ecc6709470ee16916deeece9af1c76220ae95d17b2681116aff7f381d99bc3124b1b11b1c2336b2b29e468e91b90f158d5ae5fca810c6cf32a0b6234ae08e -
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0.zip
SIZE: 24583271 SHA1: 581ec7b9289c2a85abf4f41c93993ecaa5cf43a5 SHA256: cca9ddbc958431ff77f61948cb67afa569f01f99c9389d2bbedfa92986c9ef09 SHA512: b7d2753825cc0667e8bb391fc7ec59a53c3db5fa314e38eee74b6511890b585ac7515baa2ddac09e2c6b6c42b9221c82e040af5b39c73e980fbd3b1bc622c99d
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