NEWS für Ruby 2.6.0

Dieses Dokument ist eine Liste der für Benutzer sichtbaren Funktionsänderungen zwischen den Versionen, mit Ausnahme von Fehlerbehebungen.

Beachten Sie, dass jeder Eintrag so kurz gehalten wird, dass kein Grund oder Referenzinformationen angegeben werden. Eine vollständige Liste der Änderungen mit allen erforderlichen Informationen finden Sie in der Datei ChangeLog oder auf Redmine (z.B. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER)

Änderungen seit der Veröffentlichung von 2.5.0

Sprachänderungen

Aktualisierungen von Core-Klassen (nur die wichtigsten)

Array
Neue Methoden
Modifizierte Methode
  • Array#to_h akzeptiert jetzt einen Block, der Elemente auf neue Schlüssel/Werte-Paare abbildet. [Feature #15143]

Alias-Methoden
Binding
Neue Methode
  • Binding#source_location hinzugefügt. [Feature #14230]

    Diese Methode gibt den Quellort der Bindung zurück, ein 2-Element-Array von __FILE__ und __LINE__. Traditionell konnten dieselben Informationen über eval("[__FILE__, __LINE__]", binding) abgerufen werden, aber wir planen, dieses Verhalten zu ändern, sodass Kernel#eval den Quellort der Bindung ignoriert [Bug #4352]. Daher sollten Benutzer diese neu eingeführte Methode anstelle von Kernel#eval verwenden.

Dir
Neue Methoden
Enumerable
Neue Methode
  • Enumerable#chain gibt ein Enumerator-Objekt zurück, das nacheinander über die Elemente des Receivers und dann über die jedes Arguments iteriert. [Feature #15144]

Modifizierte Methode
  • Enumerable#to_h akzeptiert jetzt einen Block, der Elemente auf neue Schlüssel/Werte-Paare abbildet. [Feature #15143]

Alias-Methode
Enumerator::ArithmeticSequence
  • Dies ist eine neue Klasse zur Darstellung eines Generators einer arithmetischen Folge, d. h. einer Zahlenfolge, die durch eine gemeinsame Differenz definiert ist. Sie kann verwendet werden, um etwas Ähnliches wie Pythons Slices darzustellen. Sie können eine Instanz dieser Klasse von Numeric#step und Range#step erhalten.

Enumerator::Chain
  • Dies ist eine neue Klasse zur Darstellung einer Kette von Enumerable-Objekten, die als ein einzelner Enumerator fungiert und von Methoden wie Enumerable#chain und Enumerator#+ generiert wird.

Enumerator::Lazy
Alias-Methode
Enumerator
Neue Methoden
  • Enumerator#+ gibt ein Enumerator-Objekt zurück, das über die Elemente des Receivers und dann über die des anderen Operanden iteriert. [Feature #15144]

ENV
Modifizierte Methode
  • ENV.to_h akzeptiert jetzt einen Block, der Namen und Werte auf neue Schlüssel und Werte abbildet. [Feature #15143]

Exception
Neue Optionen
Hash
Modifizierte Methoden
  • Hash#merge, Hash#merge! und Hash#update akzeptieren jetzt mehrere Argumente. [Feature #15111]

  • Hash#to_h akzeptiert jetzt einen Block, der Schlüssel und Werte auf neue Schlüssel und Werte abbildet. [Feature #15143]

Alias-Methoden
IO
Neue Option
  • Neuer Modus-Charakter 'x' zum Öffnen von Dateien für exklusiven Zugriff hinzugefügt. [Feature #11258]

Kernel
Alias-Methode
Neue Optionen
Inkompatible Änderungen
  • Kernel#system und Kernel#exec schließen keine nicht standardmäßigen Dateideskriptoren (der Standardwert der Option :close_others ist auf false geändert, aber wir setzen immer noch das FD_CLOEXEC-Flag auf Deskriptoren, die wir erstellen). [Misc #14907]

KeyError
Neue Optionen
  • KeyError.new akzeptiert die Optionen :receiver und :key, um den Receiver und den Schlüssel im Ruby-Code zu setzen. [Feature #14313]

Method
Neue Methoden
Module
Modifizierte Methoden
NameError
Neue Option
  • NameError.new akzeptiert eine Option :receiver, um den Receiver im Ruby-Code zu setzen. [Feature #14313]

NilClass
Neue Methode
  • NilClass#=~ wird zur Kompatibilität hinzugefügt. [Feature #15231]

NoMethodError
Neue Option
  • NoMethodError.new akzeptiert eine Option :receiver, um den Receiver im Ruby-Code zu setzen. [Feature #14313]

Numeric
Inkompatible Änderungen
OpenStruct
Modifizierte Methode
  • OpenStruct#to_h akzeptiert jetzt einen Block, der Schlüssel und Werte auf neue Schlüssel und Werte abbildet. [Feature #15143]

Proc
Neue Methoden
Inkompatible Änderungen
  • Proc#call ändert $SAFE nicht mehr. [Feature #14250]

Random
Neue Methode
Range
Neue Methode
  • Instanzmethode Range#% hinzugefügt. [Feature #14697]

Inkompatible Änderungen
Regexp/String
  • Unicode-Version von 10.0.0 auf 11.0.0 aktualisiert. [Feature #14802]

    Dies beinhaltet eine Neufassung des Algorithmus für grapheme Cluster (/X/) und eine Sonderbehandlung für georgisches MTAVRULI bei String#downcase.

  • Emoji-Version von 5.0 auf 11.0.0 aktualisiert [Feature #14802]

RubyVM::AbstractSyntaxTree
Neue Methoden
RubyVM
Neue Methode
  • RubyVM.resolve_feature_path identifiziert die Datei, die durch „require(feature)“ geladen wird. [experimental] [Feature #15230]

String
  • String#crypt ist jetzt als veraltet markiert. [Feature #14915]

Neue Funktionen
  • String#split übergibt jede Teilzeichenkette an den Block, wenn einer angegeben ist. [Feature #4780]

Struct
Modifizierte Methode
  • Struct#to_h akzeptiert jetzt einen Block, der Schlüssel und Werte auf neue Schlüssel und Werte abbildet. [Feature #15143]

Alias-Methode
Time
Neue Funktionen
  • Time.new und Time#getlocal akzeptieren ein Zeitzonenobjekt sowie einen UTC-Offset-String. Time#+, Time#- und Time#succ bewahren auch die Zeitzone. [Feature #14850]

TracePoint
Neue Funktionen
  • Das Ereignis „script_compiled“ wird unterstützt. [Feature #15287]

Neue Methoden
Modifizierte Methode
  • TracePoint#enable akzeptiert neue Schlüsselwörter „target:“ und „target_line:“. [Feature #15289]

Aktualisierungen von Stdlib (nur die wichtigsten)

BigDecimal

Aktualisierung auf Version 1.4.0. Diese Version enthält mehrere Kompatibilitätsprobleme, siehe den Abschnitt Kompatibilitätsprobleme unten für Details.

Modifizierte Methode
  • BigDecimal() akzeptiert das neue Schlüsselwort „exception:“ ähnlich wie Float().

Hinweis zu den Unterschieden zwischen neueren Versionen

Sie möchten vielleicht die Unterschiede zwischen neueren Versionen von bigdecimal kennen. Bitte wählen Sie die passende Version von bigdecimal gemäß den folgenden Informationen aus.

  • 1.3.5 hat BigDecimal.new ohne das Schlüsselwort „exception:“. Sie sehen die Deprecation-Warnung von BigDecimal.new, wenn Sie die Option „-w“ angeben. BigDecimal(), BigDecimal.new und Object#to_d Methoden sind gleich.

  • 1.4.0 hat BigDecimal.new mit dem Schlüsselwort „exception:“. Sie sehen immer die Deprecation-Warnung von BigDecimal.new. Die Methode Object#to_d unterscheidet sich von BigDecimal() und BigDecimal.new.

  • 2.0.0 wird kurz nach der Veröffentlichung von Ruby 2.6.0 veröffentlicht. Diese Version wird die Methode BigDecimal.new nicht mehr enthalten.

Bundler
  • Bundler wurde zur Standardbibliothek hinzugefügt. [Feature #12733]

  • Verwendet 1.17.2, die neueste stabile Version.

Coverage

Ein oneshot_lines-Modus wurde hinzugefügt. [Feature #15022]

Dieser Modus prüft, ob „jede Zeile mindestens einmal ausgeführt wurde“, anstatt „wie oft jede Zeile ausgeführt wurde“. Ein Hook für jede Zeile wird höchstens einmal ausgelöst, und nachdem er ausgelöst wurde, wird das Hook-Flag entfernt, d. h. er läuft mit Null-Overhead.

Neue Optionen
  • Das Schlüsselwortargument :oneshot_lines wurde zu Coverage.start hinzugefügt.

  • Die Schlüsselwortargumente :stop und :clear wurden zu Coverage.result hinzugefügt. Wenn clear true ist, werden die Zähler auf Null gesetzt. Wenn stop true ist, wird die Coverage-Messung deaktiviert.

Neue Methoden
  • Coverage.line_stub, eine einfache Hilfsfunktion, die den „Stub“ der Zeilenabdeckung aus einem gegebenen Quellcode erstellt.

CSV
ERB
Neue Optionen
  • Die Schlüsselwortargumente :trim_mode und :eoutvar wurden zu ERB.new hinzugefügt. Nicht-Schlüsselwortargumente außer dem ersten werden jetzt als weich veraltet markiert und werden entfernt, wenn Ruby 2.5 EOL wird. [Feature #14256]

  • Die Option -S des erb-Befehls ist veraltet und wird in der nächsten Version entfernt.

FileUtils
Neue Methoden
Matrix
Neue Methoden
  • Matrix#antisymmetric?, Matrix#skew_symmetric?

  • Matrix#map!, Matrix#collect! [Feature #14151]

  • Matrix#[]=

  • Vector#map!, Vector#collect!

  • Vector#[]=

Net
Neue Optionen
  • Das Schlüsselwortargument :write_timeout wurde zu Net::HTTP.new hinzugefügt. [Feature #13396]

Neue Methoden
Neue Konstante
  • Net::HTTPClientException wurde hinzugefügt, um Net::HTTPServerException zu veraltet zu erklären, da ihr Name irreführend ist. [Bug #14688]

NKF
  • Upgrade auf nkf v2.1.5

Psych
  • Upgrade auf Psych 3.1.0

RDoc
  • Wird etwa 2x schneller.

  • Verwendet SOURCE_DATE_EPOCH zur Generierung von Dateien.

  • Behebt die Zeilennummer der Methode, die verrutscht war.

  • Aktiviert --width, --exclude und --line-numbers, die ignoriert wurden.

  • Unterstützung für Blockquotes mit „>>>“ in der Standard-Markup-Notation hinzugefügt.

  • Unterstützung für „Raises“-Zeilen in TomDoc-Notation hinzugefügt.

  • Fehlerausgabe korrigiert.

  • Viele Parsing-Fehler behoben.

REXML
Einige XPath-Implementierungen verbessert
  • concat()-Funktion: Stringifiziert alle Argumente vor dem Verketten.

  • string()-Funktion: Unterstützt den Kontextknoten.

  • string()-Funktion: Unterstützt den Processing Instruction Node.

  • Unterstützt die Syntax "*:#{ELEMENT_NAME}" in XPath 2.0.

Einige XPath-Implementierungen behoben
  • "//#{ELEMENT_NAME}[#{POSITION}]"-Fall

  • string()-Funktion: Behebt function(document) gibt Knoten zurück, die außerhalb der Stammelemente liegen.

  • "/ #{ELEMENT_NAME} "-Fall

  • "/ #{ELEMENT_NAME} [ #{PREDICATE} ]"-Fall

  • "/ #{AXIS}::#{ELEMENT_NAME}"-Fall

  • "#{N}-#{M}"-Fall: Ein oder mehrere Leerzeichen waren vor "-" erforderlich

  • "/child::node()"-Fall

  • "#{FUNCTION}()/#{PATH}"-Fall

  • "@#{ATTRIBUTE}/parent::"-Fall

  • "name(#{NODE_SET})"-Fall

RSS
Neue Optionen
  • RSS::Parser.parse akzeptiert jetzt Optionen als Hash. Die Optionen :validate , :ignore_unknown_element und :parser_class sind verfügbar.

RubyGems
Set
Alias-Methode
URI
Neue Konstante
  • URI::File wurde hinzugefügt, um das URI-Schema file zu verarbeiten. [Feature #14035]

Kompatibilitätsprobleme (ausgenommen Feature-Fehlerbehebungen)

Dir
  • Dir.glob mit einer durch '\0' getrennten Musterliste wird als veraltet markiert und ist jetzt eine Warnung. [Feature #14643]

File
Object
  • Object#=~ ist veraltet. [Feature #15231]

Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)

BigDecimal
  • Die folgenden Methoden wurden entfernt.

    • BigDecimal.allocate

    • BigDecimal.ver

  • Jedes BigDecimal-Objekt ist eingefroren. [Feature #13984]

  • BigDecimal() parst den gegebenen String ähnlich wie Float().

  • String#to_d parst den Receiver-String ähnlich wie String#to_f.

  • BigDecimal.new wird in Version 2.0 entfernt.

Pathname

Implementierungsverbesserungen

Sonstige Änderungen