Ruby 2.5.0 veröffentlicht

Wir freuen uns, die Veröffentlichung von Ruby 2.5.0 bekanntgeben zu können.

Ruby 2.5.0 ist die erste stabile Veröffentlichung der 2.5er-Serie und enthält viele neue Features sowie Performanzverbesserungen. Die wichtigsten Änderungen sind:

Neue Features

  • rescue/else/ensure können direkt in do/end-Blöcken genutzt werden. [Feature #12906]
  • yield_self führt den übergebenen Block im umgebenden Kontext aus. Anders als tap gibt es aber das Ergebnis des Blocks zurück. [Feature #6721]
  • Unterstützung für Codeverzweigungs- und Methodenanalysen. Erstere geben an, welche logischen Zweige im Code ausgeführt werden und welche nicht. Letztere geben an, welche Methoden ausgeführt werden und welche nicht. Indem Sie eine Testsuite mit diesen neuen Features ausführen, können Sie feststellen, welche Codezweige und Methoden ausgeführt werden und können so die Testabdeckung Ihres Programms besser überblicken. [Feature #13901]
  • Hash#slice [Feature #8499] und Hash#transform_keys [Feature #13583] hinzugefügt.
  • Struct.new kann nun Klassen erzeugen, die mit Schlüsselwortargumenten (keyword arguments) umgehen können. [Feature #11925]
  • Enumerable#any?, all?, none? und one? können jetzt Musterabgleiche gegen ihr Argument vornehmen. [Feature #11286]
  • Die Auflösung von Konstanten über die oberste Ebene wurde entfernt. [Feature #11547]
  • Eine der beliebtesten Bibliotheken, pp.rb, wird nunmehr automatisch geladen. Sie müssen nicht länger require "pp" schreiben. [Feature #14123]
  • Backtrace und Fehlermeldung werden nunmehr in umgekehrter Reihenfolge (ältester Aufruf zuerst, neuester Aufruf zuletzt) ausgegeben. Wenn ein langes Backtrace auf einem Terminal (TTY) auftaucht, können Sie den Grund daher jetzt einfach am Ende des Backtraces finden. Beachten Sie, dass die Reihenfolge nur dann umgekehrt wird, wenn das Backtrace direkt auf einem Terminal ausgegeben wird. [Feature #8661] [experimentell]

Performanzverbesserungen

  • Zwischen 5 und 10 % Performanzverbesserung durch die Entfernung sämtlicher trace-Befehle aus dem Bytecode (instruction sequences). Der trace-Befehl wurde ursprünglich hinzugefügt, um die TracePoint-API zu unterstützen, welche jedoch praktisch kaum benutzt wurde. Es handelte sich somit um unnötigen Ballast. Stattdessen verwenden wir jetzt eine dynamische Technik. Siehe [Feature #14104] für weitere Details.
  • Die Übergabe von Blöcken mithilfe eines Blockparameters (z.B. def foo(&b); bar(&b); end) ist dank der neuen verzögerten Allozierung der Proc-Instanzen (lazy proc allocation) etwa dreimal so schnell wie unter Ruby 2.4. [Feature #14045]
  • Mutex wurde neu geschrieben. Es ist jetzt kleiner und schneller. [Feature #13517]
  • ERB generiert Quelltext aus einer Vorlage jetzt doppelt so schnell wie unter Ruby 2.4.
  • Die Performanz einiger eingebauter Methoden wie u.a. Array#concat, Enumerable#sort_by, String#concat, String#index, Time#+ und einigen mehr wurde verbessert.
  • IO.copy_stream benutzt jetzt copy_file_range(2). [Feature #13867]

Sonstige bemerkenswerte Änderungen seit 2.4

  • SecureRandom bezieht Zufallsdaten jetzt bevorzugt vom Betriebssystem statt von OpenSSL. [Bug #9569]
  • cmath, csv, date, dbm, etc, fcntl, fiddle, fileutils, gdbm, ipaddr, scanf, sdbm, stringio, strscan, webrick, zlib wurden von der Standardbibliothek in Standard-Gems verschoben.
  • Onigmo wurde auf 6.1.3 aktualisiert.
  • Psych auf 3.0.2 aktualisiert.
  • RubyGems auf 2.7.3 aktualisiert.
  • RDoc auf 6.0.1 aktualisiert.
    • Der Lexer basiert nun nicht mehr auf IRB, sondern auf Ripper, wodurch die Geschwindigkeit, mit der die Dokumentation generiert wird, erheblich zunimmt.
    • Zahlreiche Fehler, die seit über zehn Jahren bekannt waren, wurden behoben.
    • Unterstützung von neuer Ruby-Syntax der neuesten Versionen.
  • Die unterstützte Unicode-Version ist jetzt 10.0.0.
  • Thread.report_on_exception steht jetzt standardmäßig auf true. Das hilft beim Debugging von Programmem mit mehreren Threads. [Feature #14143]
  • IO#write akzeptiert jetzt mehrere Argumente. [Feature #9323]

Siehe die NEWS oder die Commit-Logs für weitere Informationen.

Mit diesen Änderungen wurden 6158 Dateien geändert, 348484 Einfügungen(+), 82747 Löschungen(-) seit Ruby 2.4.0!

Frohe Weihnachten, schöne Feiertage und viel Spaß bei der Programmierung mit Ruby 2.5!

Download

  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz

    SIZE:   15834941 bytes
    SHA1:   58f77301c891c1c4a08f301861c26b1ea46509f6
    SHA256: 46e6f3630f1888eb653b15fa811d77b5b1df6fd7a3af436b343cfe4f4503f2ab
    SHA512: 0712fe68611f5d0cd6dd54b814f825478e64b6a62bdf67bce431f4dca2dc00b1a33f77bebfbcd0a151118a1152554ab457decde435b424aa1f004bc0aa40580d
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.zip

    SIZE:   19495617 bytes
    SHA1:   700b6f55d689a5c8051c8c292b9e77a1b50bf96e
    SHA256: 94559ea6e3c619423da604e503ce1dc1c465d6e0747a07fbdc5f294acaf14c24
    SHA512: e4324064cee8c65b80192e3eff287e915d2d40464d300744c36fb326ae4b1846911400a99d4332192d8a217009d3a5209b43eb5e8bc0b739035bef89cc493e84
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.bz2

    SIZE:   13955820 bytes
    SHA1:   827b9a3bcffa86d1fc9ed96d403cb9dc37731688
    SHA256: d87eb3021f71d4f62e5a5329628ac9a6665902173296e551667edd94362325cc
    SHA512: 8f6fdf6708e7470f55bc009db2567cd8d4e633ad0678d83a015441ecf5b5d88bd7da8fb8533a42157ff83b74d00b6dc617d39bbb17fc2c6c12287a1d8eaa0f2c
    
  • https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.xz

    SIZE:   11292472 bytes
    SHA1:   9c7babcf9e299be3f197d9091024ae458f1a1273
    SHA256: 1da0afed833a0dab94075221a615c14487b05d0c407f991c8080d576d985b49b
    SHA512: 55714a33d7661fe8b432f73c34fd67b49699f8b79df1cbd680a74899124d31111ab0f444677672aac1ba725820182940d485efb2db0bf2bc96737c5d40c54578