Ruby 3.0.0 Preview 1 veröffentlicht

Gepostet von naruse am 25. Sep 2020

Wir freuen uns, die Veröffentlichung von Ruby 3.0.0-preview1 bekannt zu geben.

Sie führt eine Reihe neuer Funktionen und Leistungsverbesserungen ein.

RBS

RBS ist eine Sprache zur Beschreibung der Typen von Ruby-Programmen. Typüberprüfer, einschließlich type-profiler und andere Tools, die RBS unterstützen, werden Ruby-Programme mit RBS-Definitionen viel besser verstehen.

Sie können die Definition von Klassen und Modulen aufschreiben: Methoden, die in der Klasse definiert sind, Instanzvariablen und ihre Typen sowie Vererbungs-/Mix-in-Beziehungen. Das Ziel von RBS ist es, gängige Muster in Ruby-Programmen zu unterstützen und fortgeschrittene Typen wie Union-Typen, Methodenüberladung und Generics zu ermöglichen. Es unterstützt auch Duck-Typing mit *Interface-Typen*.

Ruby 3.0 wird mit dem rbs Gem geliefert, das das Parsen und Verarbeiten von in RBS geschriebenen Typdefinitionen ermöglicht.

Das Folgende ist ein kleines Beispiel für RBS.

module ChatApp
  VERSION: String

  class Channel
    attr_reader name: String
    attr_reader messages: Array[Message]
    attr_reader users: Array[User | Bot]              # `|` means union types, `User` or `Bot`.

    def initialize: (String) -> void

    def post: (String, from: User | Bot) -> Message   # Method overloading is supported.
            | (File, from: User | Bot) -> Message
  end
end

Weitere Details finden Sie in der README des rbs Gems.

Ractor (experimentell)

Ractor ist eine Actor-Model-ähnliche Konkurrenz-Abstraktion, die darauf ausgelegt ist, eine parallele Ausführungsfunktion ohne Bedenken hinsichtlich der Thread-Sicherheit bereitzustellen.

Sie können mehrere Raktoren erstellen und diese parallel ausführen. Ractor ermöglicht das Erstellen von Thread-sicheren parallelen Programmen, da Raktoren keine normalen Objekte teilen können. Die Kommunikation zwischen Raktoren wird durch Nachrichtenübermittlung unterstützt.

Um die gemeinsame Nutzung von Objekten einzuschränken, führt Ractor mehrere Einschränkungen der Ruby-Syntax ein (ohne mehrere Raktoren gibt es keine Änderungen).

Die Spezifikation und die Implementierung sind noch nicht ausgereift und können sich in Zukunft ändern. Daher ist diese Funktion als experimentell gekennzeichnet und zeigt eine Warnung für experimentelle Funktionen an, wenn ein Ractor erstellt wird.

Das folgende kleine Programm berechnet prime? parallel mit zwei Raktoren und ist auf zwei oder mehr Kernen etwa doppelt so schnell wie ein sequentielles Programm.

require 'prime'

# n.prime? with sent integers in r1, r2 run in parallel
r1, r2 = *(1..2).map do
  Ractor.new do
    n = Ractor.recv
    n.prime?
  end
end

# send parameters
r1.send 2**61 - 1
r2.send 2**61 + 15

# wait for the results of expr1, expr2
p r1.take #=> true
p r2.take #=> true

Weitere Details finden Sie unter doc/ractor.md.

Scheduler (Experimentell)

Thread#scheduler wird eingeführt, um blockierende Operationen abzufangen. Dies ermöglicht eine leichtgewichtige Nebenläufigkeit, ohne vorhandenen Code zu ändern.

Derzeit unterstützte Klassen/Methoden

  • Mutex#lock, Mutex#unlock, Mutex#sleep
  • ConditionVariable#wait
  • Queue#pop, SizedQueue#push
  • Thread#join
  • Kernel#sleep
  • IO#wait, IO#read, IO#write und verwandte Methoden (z. B. #wait_readable, #gets, #puts usw.).
  • IO#select wird *nicht unterstützt*.

Der aktuelle Einstiegspunkt für die Nebenläufigkeit ist Fiber.schedule{...}, dieser kann sich jedoch bis zur Veröffentlichung von Ruby 3 noch ändern.

Derzeit ist ein Test-Scheduler in Async::Scheduler verfügbar. Weitere Details finden Sie unter doc/scheduler.md. [Feature #16786]

VORSICHT: Diese Funktion ist stark experimentell. Sowohl der Name als auch die Funktion werden sich in der nächsten Vorschauversion ändern.

Weitere bemerkenswerte neue Funktionen

  • Die rechtsgerichtete Zuweisungsanweisung wurde hinzugefügt.

    fib(10) => x
    p x #=> 55
    
  • Endless-Methodendefinition wurde hinzugefügt.

    def square(x) = x * x
    
  • Das Mustererkennungsfeature wurde hinzugefügt.

    case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
    in [*pre, String => x, String => y, *post]
      p pre  #=> ["a", 1]
      p x    #=> "b"
      p y    #=> "c"
      p post #=> [2, "d", "e", "f", 3]
    end
    
  • Hash#except ist jetzt integriert.

    h = { a: 1, b: 2, c: 3 }
    p h.except(:a) #=> {:b=>2, :c=>3}
    
  • Memory View wird als experimentelle Funktion hinzugefügt

    • Dies ist ein neuer C-API-Satz zum Austausch eines Rohspeicherbereichs, wie z. B. eines numerischen Arrays und eines Bitmap-Bildes, zwischen Erweiterungsbibliotheken. Die Erweiterungsbibliotheken können auch die Metadaten des Speicherbereichs austauschen, die Form, das Elementformat und so weiter umfassen. Mithilfe dieser Metadaten können die Erweiterungsbibliotheken sogar mehrdimensionale Arrays angemessen austauschen. Diese Funktion wurde in Anlehnung an das Pufferprotokoll von Python entworfen.

Leistungsverbesserungen

  • Viele Verbesserungen wurden in MJIT implementiert. Siehe NEWS im Detail.

Weitere bemerkenswerte Änderungen seit 2.7

  • Schlüsselwortargumente wurden von anderen Argumenten getrennt.
    • Grundsätzlich funktioniert Code, der unter Ruby 2.7 eine Warnung ausgibt, nicht mehr. Lesen Sie das Dokument im Detail.
    • Übrigens unterstützt die Argumentenweiterleitung jetzt führende Argumente.

      def method_missing(meth, ...)
        send(:"do_#{ meth }", ...)
      end
      
  • Die Funktion von $SAFE wurde vollständig entfernt; sie ist jetzt eine normale globale Variable.

  • Die Reihenfolge des Backtrace wurde bei Ruby 2.5 umgekehrt, aber dann rückgängig gemacht. Jetzt verhält es sich wie Ruby 2.4; zuerst wird eine Fehlermeldung und die Zeilennummer, an der die Ausnahme auftritt, ausgegeben, und dann werden ihre Aufrufer ausgegeben.

  • Einige Standardbibliotheken wurden aktualisiert.
    • RubyGems 3.2.0.rc.1
    • Bundler 2.2.0.rc.1
    • IRB 1.2.6
    • Reline 0.1.5
  • Die folgenden Bibliotheken sind keine gebündelten Gems mehr. Installieren Sie die entsprechenden Gems, um diese Funktionen zu nutzen.
    • net-telnet
    • xmlrpc
  • Standard-Gems zu gebündelten Gems befördert.
    • rexml
    • rss
  • Standard-Bibliotheken zu Standard-Gems befördert. Die folgenden Standard-Gems wurden auf rubygems.org veröffentlicht.
    • abbrev
    • base64
    • English
    • erb
    • find
    • io-nonblock
    • io-wait
    • net-ftp
    • net-http
    • net-imap
    • net-protocol
    • nkf
    • open-uri
    • optparse
    • resolv
    • resolv-replace
    • rinda
    • securerandom
    • set
    • shellwords
    • tempfile
    • time
    • tmpdir
    • tsort
    • weakref

Siehe NEWS oder Commit-Protokolle für weitere Details.

Mit diesen Änderungen wurden 3385 Dateien geändert, 150159 Einfügungen(+), 124949 Löschungen(-) seit Ruby 2.7.0!

Bitte probieren Sie Ruby 3.0.0-preview1 aus und geben Sie uns Feedback!

Herunterladen

  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.tar.bz2

    SIZE: 15538340
    SHA1: 032697f3ace0a697cd72f68bac0032c31a8328d4
    SHA256: 013bdc6e859d76d67a6fcd990d401ed57e6e25896bab96d1d0648a877f556dbb
    SHA512: 3a6a6458d9c5f06555ab8705160f6b071f4dbe9d2a91cd7848852633657b495c480d74e4b2ff2cebddda556118d26bbb271160c989bc970bb1b5cb234e868d2f
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.tar.gz

    SIZE: 17747808
    SHA1: 2842d2af2568d74c8d4071f5f536889a6b149202
    SHA256: ce8bd7534e7ec2a870b24d2145ea20e9bbe5b2d76b7dfa1102dbee5785253105
    SHA512: b94892951f842a1538f4b99022606ac2c0b5031f1ede7eef3833a8caa9ed63e9b22868509173bfefb406f263c65211db75597b152b61f49e5ba2a875fce63a27
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.tar.xz

    SIZE: 12703060
    SHA1: 91d9fbe87504924148deeec90199d6ff4d7dcf56
    SHA256: aa7cce0c99f4ea2145fef9b78d74a44857754396790cd23bad75d759811e7a2a
    SHA512: dca5dcc965c434371947c100864090e29e649e19ae24b8bb2e88a534ebd8220c5a086035a999b1e8b1cd5ec154a6985a8d8dfea56095d712d62aeea7a2054f7d
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0-preview1.zip

    SIZE: 22002645
    SHA1: 4b5b61066373daf0a947d3fafe2645788504a164
    SHA256: a39a48ed9a8ca2c83d65d225a1bb3db331c6587a77ba156c20e630c1b4bfc23b
    SHA512: 10f6f28715a52093d7d9da82d1678147091b45e2f279e463626adea8efbf181485daa42565e5086057ffb45a097ffb8ff395c572b247b6b5da27d85933cf58a8
    

3.0.0-preview2 Trailer

Wir planen, "type-profiler", eine Funktion zur statischen Typanalyse, aufzunehmen. Bleiben Sie dran!

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...