Ruby 3.1.0 Preview 1 Released
Post von naruse am 9 Nov 2021
Wir freuen uns, die Veröffentlichung von Ruby 3.1.0-preview1 bekannt zu geben.
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 MJIT im Jahr 2018 eingeführt hat, hat sich seine Leistung stark verbessert, und letztes Jahr haben wir schließlich Ruby3x3 erreicht. Aber obwohl Optcarrot beeindruckende Geschwindigkeitssteigerungen gezeigt hat, hat der JIT keinen Nutzen für reale Geschäftsanwendungen 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.
Obwohl MJIT ein methodenbasierter JIT-Compiler ist und einen externen C-Compiler verwendet, nutzt YJIT Basic Block Versioning und enthält den JIT-Compiler darin. Mit Lazy Basic Block Versioning (LBBV) kompiliert es zunächst den Anfang einer Methode und kompiliert schrittweise den Rest, wenn der Typ der Argumente und Variablen dynamisch ermittelt wird. Siehe YJIT: a basic block versioning JIT compiler for CRuby für eine detaillierte Einführung.
Mit dieser Technologie erreicht YJIT sowohl schnelle Aufwärmzeiten als auch Leistungssteigerungen bei den meisten realen Softwareanwendungen, bis zu 22 % bei railsbench, 39 % bei liquid-render.
YJIT ist immer noch eine experimentelle Funktion und daher standardmäßig deaktiviert. Wenn Sie dies verwenden möchten, geben Sie die Kommandozeilenoption --yjit an, um YJIT zu aktivieren. Es ist vorerst auch auf macOS & Linux auf x86-64-Plattformen beschränkt.
- https://bugs.ruby-lang.org/issues/18229
- https://shopify.engineering/yjit-just-in-time-compiler-cruby
- https://www.youtube.com/watch?v=PBVLf3yfMs8
debug gem: Ein neuer Debugger
Ein neuer Debugger debug.gem ist enthalten. debug.gem ist eine schnelle Debugger-Implementierung und bietet viele Funktionen wie Remote-Debugging, bunte REPL, IDE (VSCode) -Integration und mehr. Er ersetzt die Standardbibliothek lib/debug.rb.
error_highlight: Feingranulare Fehlerlokalisierung im Backtrace
Ein integriertes Gem, error_highlight, wurde eingeführt. Es enthält eine feingranulare Fehlerlokalisierung im Backtrace.
$ ruby test.rb
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)
1.time {}
^^^^^
Did you mean? times
Dieses Gem ist standardmäßig aktiviert. Sie können es mit der Kommandozeilenoption --disable-error_highlight deaktivieren. Sehen Sie sich das Repository im Detail an.
Irb-Verbesserung
Wird im nächsten Vorschau beschrieben.
Weitere bemerkenswerte neue Funktionen
Sprache
- Werte in Hash-Literalen und Keyword-Argumenten 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ürfoo(x: x, y: y).
- Der Pin-Operator im Pattern Matching nimmt nun einen Ausdruck entgegen. [Feature #17411]
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
#=> [[3, 5], [5, 7], [11, 13]]
RBS
RBS ist eine Sprache zur Beschreibung der Struktur von Ruby-Programmen. Siehe das Repository für Details.
Updates seit Ruby 3.0.0
rbs collectionwurde eingeführt, um RBSs von Gems zu verwalten. Doku- Viele Signaturen für integrierte und Standardbibliotheken wurden hinzugefügt/aktualisiert.
- Es enthält viele Fehlerbehebungen und Leistungsverbesserungen.
Siehe die CHANGELOG.md für weitere Informationen.
TypeProf
TypeProf ist ein statischer Typenanalysator für Ruby. Er generiert einen Prototyp von RBS aus nicht typ-annotiertem Ruby-Code. Siehe das Dokument für Details.
Updates seit Ruby 3.0.0
- Experimentelle IDE-Unterstützung wurde implementiert.
- Viele Fehlerbehebungen und Leistungsverbesserungen.
Leistungsverbesserungen
- MJIT
- Für Workloads wie Rails wird der Standardwert
--jit-max-cachevon 100 auf 10000 geändert. Der JIT-Compiler überspringt nicht mehr die Kompilierung von Methoden mit mehr als 1000 Anweisungen. - Zur Unterstützung von Zeitwerk von Rails wird der JIT-kompilierte Code nicht mehr abgebrochen, wenn ein TracePoint für Klassenereignisse aktiviert ist.
- Für Workloads wie Rails wird der Standardwert
Weitere bemerkenswerte Änderungen seit 3.0
- Einzeilige Musterabgleiche, z. B.
ary => [x, y, z], sind nicht mehr experimentell. - Die Auswertungsreihenfolge von Mehrfachzuweisungen wurde geringfügig geändert. [Bug #4443]
foo[0], bar[0] = baz, quxwurde in Ruby 3.0 in der Reihenfolgebaz,qux,foound dannbarausgewertet. In Ruby 3.1 wird es in der Reihenfolgefoo,bar,bazund dannquxausgewertet.
- Variable Width Allocation: Strings (experimentell) [Bug #18239]
Aktualisierungen der Standardbibliotheken
- Einige Standardbibliotheken wurden aktualisiert.
- RubyGems
- Bundler
- RDoc 6.4.0
- ReLine
- JSON 2.6.0
- Psych 4.0.2
- FileUtils 1.6.0
- Fiddle
- StringIO 3.0.1
- IO::Console 0.5.9
- IO::Wait 0.2.0
- CSV
- Etc 1.3.0
- Date 3.2.0
- Zlib 2.1.1
- StringScanner
- IpAddr
- Logger 1.4.4
- OStruct 0.5.0
- Irb
- Racc 1.6.0
- Delegate 0.2.0
- Benchmark 0.2.0
- CGI 0.3.0
- Readline(C-ext) 0.1.3
- Timeout 0.2.0
- YAML 0.2.0
- URI 0.11.0
- OpenSSL
- DidYouMean
- Weakref 0.1.1
- Tempfile 0.1.2
- TmpDir 0.1.2
- English 0.7.1
- Net::Protocol 0.1.2
- Net::Http 0.2.0
- BigDecimal
- OptionParser 0.2.0
- Set
- Find 0.1.1
- Rinda 0.1.1
- Erb
- NKF 0.1.1
- Base64 0.1.1
- OpenUri 0.2.0
- SecureRandom 0.1.1
- Resolv 0.2.1
- Resolv::Replace 0.1.0
- Time 0.2.0
- PP 0.2.1
- Prettyprint 0.1.1
- Drb 2.1.0
- Pathname 0.2.0
- Digest 3.1.0.pre2
- Un 0.2.0
- Die folgenden gebündelten Gems werden aktualisiert.
- minitest 5.14.4
- power_assert 2.0.1
- rake 13.0.6
- test-unit 3.5.0
- rbs 1.6.2
- typeprof 0.20.0
- Die folgenden Standard-Gems sind nun gebündelte Gems.
- net-ftp
- net-imap
- net-pop
- net-smtp
- matrix
- prime
Siehe NEWS oder Commit-Logs für weitere Details.
Mit diesen Änderungen wurden seit Ruby 3.0.0 2963 Dateien geändert, 529321 Einfügungen (+), 92305 Löschungen (-)!
Herunterladen
-
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.gz
SIZE: 20821221 SHA1: 40dfd3db076a49fab9a0eee51e89d9b3d16a4e23 SHA256: 540f49f4c3aceb1a5d7fb0b8522a04dd96bc4a22f9660a6b59629886c8e010d4 SHA512: 63f528f20905827d03649ed9804e4a4e5c15078f9c6c8efcfb306baa7baafa17a406eb09a2c08b42e151e14af33b1aadbd9fb1cc84f9353d070b54bbf1ff950d -
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.xz
SIZE: 15742844 SHA1: 22aa861b17031cd1b163b7443f5f2f5897c5895e SHA256: 86a836ad42f6a7a469fce71ffec48fd3184af55bf79e488b568a4f64adee551d SHA512: bdbd7c624197ca478658280d84123a8c12ae72425bc566dcc75989c5b5ef114dd57e64efc09e2413ed615d9b47621a70ace0f3612e8ca7ba853822ad9e88c0b0 -
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.zip
SIZE: 25019629 SHA1: ef5fa22890e55935db4b96b3089a8aea1335bd85 SHA256: 4e8d118b2365164873148ac545a8fa36c098b846a9b19ebb9037f8ee9adb4414 SHA512: 917803aac0848e00871614a09740b5c9cca26f200d68580dde61666633f1b7fee506e25ea4ed0c38eb20149417bf9f1ed449a4d2aec5b726de670e7177e5c07a
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