NEWS für Ruby 2.5.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 Version 2.4.0
Sprachänderungen
-
Die Suche nach Konstanten auf oberster Ebene wurde entfernt. [Feature #11547]
-
rescue/else/ensure sind nun innerhalb von do/end-Blöcken erlaubt. [Feature #12906]
-
Refinements finden nun in String-Interpolationen statt. [Feature #13812]
Aktualisierungen von Core-Klassen (nur die wichtigsten)
-
-
Neue Methoden
-
Array#append[Feature #12746] -
Array#prepend[Feature #12746]
-
-
-
-
Ist veraltet. Es war eine Basisklasse für C-Erweiterungen und ist nicht notwendig, auf Ruby-Ebene exponiert zu werden. [Feature #3072]
-
-
-
Neue Methoden
-
Exception#full_messagezum Abrufen einesString-Ausdrucks einer Ausnahme, formatiert auf die gleiche Weise, wie Ruby eine nicht abgefangene Ausnahme ausgibt. [Feature #14141] [experimentell]
-
-
-
-
Dir.globbietet ein neues optionales Schlüsselwortargument:basean. [Feature #13056] -
Dir.chdir(ohne Block-Argument),Dir.open,Dir.new,Dir.mkdir,Dir.rmdir,Dir.empty?geben die GVL frei -
Neue Methoden
-
Dir.children[Feature #11302] -
Dir.each_child[Feature #11302]
-
-
-
-
Enumerable#any?,Enumerable#all?,Enumerable#none?undEnumerable#one?akzeptieren ein Musterargument. [Feature #11286]
-
-
-
File.openakzeptiert die Option:newline, um den Textmodus zu implizieren. [Bug #13350] -
File#pathlöst einenIOErrorfür Dateien aus, die mit der Option File::Constants::TMPFILE geöffnet wurden. [Feature #13568] -
File.stat,File.exist?und andere Methoden, dierb_stat()verwenden, geben die GVL frei. [Bug #13941] -
File.renamegibt die GVL frei. [Feature #13951] -
File::Stat#atime,File::Stat#mtimeundFile::Stat#ctimeunterstützen Bruchteil-Sekunden-Zeitstempel unter Windows 8 und neuer. [Feature #13726] -
File::Stat#inoundFile.identical?unterstützen ReFS 128-Bit-Inodes unter Windows 8.1 und neuer. [Feature #13731] -
File.readable?,File.readable_real?,File.writable?,File.writable_real?,File.executable?,File.executable_real?,File.mkfifo,File.readlink,File.truncate,File#truncate,File.chmod,File.lchmod,File.chown,File.lchown,File.unlink,File.utime,File.lstatgeben die GVL frei -
Neue Methode
-
File.lutime[Feature #4052]
-
-
-
-
Neue Methoden
-
Hash#transform_keys[Feature #13583] -
Hash#transform_keys![Feature #13583] -
Hash#slice[Feature #8499]
-
-
-
-
IO.copy_streamversucht Copy-Offload mit copy_file_range(2). [Feature #13867] -
Neue Methoden
-
-
-
IO#closekönnte einen Fehler mit der Meldung „stream closed“ auslösen, aber er wurde zu „stream closed in another thread“ verfeinert. Die neue Meldung ist für den Benutzer klarer. [Bug #13405]
-
-
-
Integer#round,Integer#floor,Integer#ceilundInteger#truncategeben immer einenIntegerzurück. [Bug #13420] -
Integer#powakzeptiert ein Modulo-Argument zur Berechnung der modularen Exponentiation. [Feature #12508] [Feature #11003] -
Neue Methoden
-
Integer#allbits?,Integer#anybits?,Integer#nobits?[Feature #12753] -
Integer.sqrt[Feature #13219]
-
-
-
-
Kernel#yield_self[Feature #6721] -
Kernel#pp[Feature #14123] -
Kernel#warn(…, uplevel:n) [Feature #12882]
-
-
Method
-
Neue Methoden
-
Method#===, dasMethod#callaufruft, ebenso wieProc#===[Feature #14142]
-
-
-
Module
-
Module#attr,Module#attr_accessor,Module#attr_readerundModule#attr_writersind nun öffentlich. [Feature #14132] -
Module#define_method,Module#alias_method,Module#undef_methodundModule#remove_methodsind nun öffentlich. [Feature #14133]
-
-
-
Numeric#stepunterdrückt keine Fehler mehr aus der Coerce-Methode, wenn ein Schrittwert angegeben wird, der nicht mit > 0 verglichen werden kann. [Feature #7688] -
Numerische Vergleichsoperatoren (<,<=,>=,>) unterdrücken keine Ausnahmen mehr aus der Coerce-Methode intern. Rückgabe von nil in Coerce, wenn die Umwandlung unmöglich ist. [Feature #7688]
-
-
Process
-
Die Genauigkeit von
Process.timesist verbessert, wenn getrusage(2) existiert. [Feature #11952] -
Neue Methode
-
Process.last_statusals Alias für $? [Feature #14043]
-
-
-
-
Range#initialize unterdrückt keine Ausnahmen mehr beim Vergleichen von Begin und End mit <=> und löst einen „bad value for range“
ArgumentErroraus, sondern lässt stattdessen die Ausnahme vom <=>-Aufruf durch. [Feature #7688]
-
-
-
Update auf Onigmo 6.1.3-669ac9997619954c298da971fcfacccf36909d05.
-
Unterstützung für den Abwesenheitsoperator github.com/k-takata/Onigmo/issues/82
-
-
Unterstützung für neue 5 Emoji-bezogene Unicode-Zeicheneigenschaften
-
-
-
String#-@dedupliziert nicht-eingefrorene Strings. Bereits eingefrorene Strings bleiben aus Kompatibilitätsgründen unverändert. [Feature #13077] -
-"literal"(String#-@) wird optimiert, um dasselbe Objekt zurückzugeben (wie"literal".freezeab Ruby 2.1+) [Feature #13295] -
String#casecmpundString#casecmp?geben nil für nicht-String-Argumente zurück, anstatt einTypeErrorauszulösen. [Bug #13312] -
String#start_with?akzeptiert einen regulären Ausdruck [Feature #13712] -
Neue Methoden
-
String#delete_prefix,String#delete_prefix![Feature #12694] -
String#delete_suffix,String#delete_suffix![Feature #13665] -
String#each_grapheme_clusterundString#grapheme_clusterszum Aufzählen von Graphem-Clustern [Feature #13780] -
String#undumpzum Entschlüsseln eines mitString#dumpdump-verschlüsselten Strings [Feature #12275]
-
-
-
-
Struct.newnimmt die Option 'keyword_init: true` entgegen, um Mitglieder mit Schlüsselwortargumenten zu initialisieren. [Feature #11925]
-
-
Regexp/String: Unicode-Version von 9.0.0 auf 10.0.0 aktualisiert [Feature #13685]
-
-
Die von
Thread#name=gesetzte Beschreibung ist nun unter Windows 10 sichtbar. -
Neue Methode
-
Thread#fetch[Feature #13009]
-
-
Der Standardwert für
Thread.report_on_exceptionist nun true, wodurch nicht abgefangene Ausnahmen, die Threads beenden, auf $stderr angezeigt werden. [Feature #14143]
-
-
-
Time.atempfängt ein drittes Argument, das die Einheit des zweiten Arguments angibt. [Feature #13919]
-
-
-
Neue Methoden
-
KeyError#receiver[Feature #12063] -
KeyError#key[Feature #12063]
-
-
-
-
Neue Ausnahme-Klasse. [Feature #13224]
-
Aktualisierungen von Stdlib (nur die wichtigsten)
-
-
Update auf
BigDecimal1.3.4 -
Folgende Features wurden hinzugefügt
-
BigDecimal::VERSION
-
-
Die folgenden Features wurden als veraltet markiert und sollen in Version 1.4.0 entfernt werden
-
BigDecimal.ver
-
BigDecimal#cloneund dup erstellen nun keine neue Instanz mehr, sondern geben den Empfänger selbst zurück.
-
-
-
Unterstützung für Messung von Branch-Coverage und Method-Coverage. [Feature #13901] Branch-Coverage zeigt Ihnen, welche Zweige ausgeführt werden und welche nicht. Method-Coverage zeigt Ihnen, welche Methoden aufgerufen werden und welche nicht. Durch Ausführen einer Testsuite mit diesem neuen Feature können Sie erkennen, welche Zweige und Methoden von einem Test ausgeführt werden, und die Gesamtabdeckung einer Testsuite strenger bewerten.
Sie können das zu messende Ziel über eine Option an 'Coverage.start' angeben.
Coverage.start(lines: true, branches: true, methods: true)
Nachdem einige Ruby-Dateien geladen wurden, können Sie 'Coverage.result' verwenden, um das Coverage-Ergebnis zu erhalten.
Coverage.result #=> { "/path/to/file.rb"=> # { :lines => [1, 2, 0, nil, ...], # :branches => # { [:if, 0, 2, 1, 6, 4] => # { [:then, 1, 3, 2, 3, 8] => 0, # [:else, 2, 5, 2, 5, 8] => 2 # } # }, # :methods => { # [Object, :foo, 1, 0, 7, 3] => 2 # } # } # }
Der Ergebnistyp der Zeilenabdeckung bleibt unverändert; es ist einfach ein Array, das Zahlen enthält, die die Anzahl der Ausführungen jeder Zeile bedeuten, oder 'nil', was bedeutet, dass die Zeile nicht relevant ist.
Der Ergebnistyp der Branch-Abdeckung ist
{ (jump base) => { (jump target) => (counter) } }wobei jump base und targets das Format haben
[type, unique-id, start lineno, start column, end lineno, end column]
Zum Beispiel liest '[:if, 0, 2, 1, 6, 4]' eine `if`-Anweisung, die von Zeile 2 Spalte 1 bis Zeile 6 Spalte 4 reicht. '[:then, 1, 3, 2, 3, 8]' liest eine `then`-Klausel, die von Zeile 3 Spalte 2 bis Zeile 3 Spalte 8 reicht. Beachten Sie, dass lineno bei 1 beginnt und columnno bei 0. Das obige Beispiel zeigt also, dass ein Zweig von `if` zu `then` nie ausgeführt wurde und ein Zweig von `if` zu `else` zweimal ausgeführt wurde.
Der Ergebnistyp der Method-Abdeckung ist
{ (method key) => (counter) }wobei method key das Format hat
[class, method-name, start lineno, start column, end lineno, end column]
Zum Beispiel liest '[Object, :foo, 1, 0, 7, 3]' `Object#foo`, die von Zeile 1 Spalte 0 bis Zeile 7 Spalte 3 reicht. Das obige Beispiel zeigt, dass diese `Object#foo` zweimal aufgerufen wurde.
Hinweis: Um die Kompatibilität zu wahren, misst die Übergabe keiner Option an 'Coverage.start' nur die Zeilenabdeckung, und `Coverage.result` gibt das alte Format zurück.
Coverage.result #=> { "/path/to/file.rb"=> [1, 2, 0, nil, ...] }
-
-
DRb
-
ACL::ACLEntry.new unterdrückt nun nicht mehr
IPAddr::InvalidPrefixError.
-
-
-
Fügt
ERB#result_with_hashhinzu, um eine Vorlage mit lokalen Variablen, die mit einemHash-Objekt übergeben werden, zu rendern. [Feature #8631] -
Die Standard-Datei-Encoding für Vorlagen wird im erb-Befehl von ASCII-8BIT auf UTF-8 geändert. [Bug #14095]
-
Wagenrückläufe werden nun ordnungsgemäß beschnitten, wenn trim_mode angegeben und verwendet wird. Doppelte Zeilenumbrüche werden unter Windows entfernt. [Bug #5339] [Bug #11464]
-
-
-
IPAddrakzeptiert keine ungültige Adressmaske mehr. [Bug #13399] -
IPAddr#ipv4_compatundIPAddr#ipv4_compat?sind zur Verdeprecation markiert. [Bug #13769] -
Neue Methoden
-
IPAddr#private?[Feature #11666] -
IPAddr#link_local?[Feature #10912]
-
-
IRB
-
Gibt Backtrace und Fehlermeldung in umgekehrter Reihenfolge aus [Feature #8661] [experimentell]
-
‘binding.irb` erfordert nun automatisch irb und wird ausgeführt [Bug #13099] [experimentell]
-
‘binding.irb` zeigt zu Beginn den Quellcode um die Zeile an, in der es aufgerufen wurde [Feature #14124]
-
-
Matrix
-
Neue Methoden
-
Matrix.combine und Matrix#combine [Feature #10903]
-
Matrix#hadamard_product und Matrix#entrywise_product
-
-
-
-
Net::HTTP.newunterstützt den Parameter no_proxy [Feature #11195] -
Net::HTTP#min_versionundNet::HTTP#max_version[Feature #9450] -
Zusätzliche HTTP-Statusklassen hinzugefügt
-
Net::HTTP::STATUS_CODES wird als Repository für HTTP-Statuscodes hinzugefügt [Misc #12935]
-
Net::HTTP#proxy_userundNet::HTTP#proxy_passspiegeln die http_proxy-Umgebungsvariable wider, wenn die Umgebungsvariable des Systems multiuser-sicher ist. [Bug #12921]
-
-
open-uri
-
URI.open-Methode ist als Alias für open-uri'sKernel.opendefiniert. open-uri'sKernel.openwird in Zukunft veraltet sein.
-
-
-
Aktualisiert Ruby/OpenSSL von Version 2.0 auf 2.1. Änderungen sind im Abschnitt „Version 2.1.0“ in ext/openssl/History.md vermerkt.
-
-
-
Neue Methode
-
Pathname#glob[Feature #7360]
-
-
-
-
Update auf
Psych3.0.2.-
Fallback-Option in ein Schlüsselwortargument konvertiert github.com/ruby/psych/pull/342
-
Fügt die Option :symbolize_names zu
Psych.load,Psych.safe_loadhinzu, ähnlich wie beiJSON.parsegithub.com/ruby/psych/pull/333, github.com/ruby/psych/pull/337 -
Fügt
Psych::Handler#event_locationhinzu github.com/ruby/psych/pull/326 -
Macht eingefrorene String-Literale = true github.com/ruby/psych/pull/320
-
Behält Zeitzonen-Offset bei der Deserialisierung von Zeiten bei github.com/ruby/psych/pull/316
-
Entfernt veraltete Alias-Methoden für das Syck-Gem github.com/ruby/psych/pull/312
-
-
-
-
RbConfig::LIMITS wird hinzugefügt, um die Grenzen von C-Typen bereitzustellen. Dies ist verfügbar, wenn rbconfig/sizeof geladen wird.
-
-
-
Ripper::EXPR_BEG und so weiter für Ripper#state.
-
Neue Methode
-
Ripper#state, um den Zustand des Scanners mitzuteilen. [Feature #13686]
-
-
-
RDoc
-
Update auf RDoc 6.0.1.
-
Ersetzt den IRB-basierten Lexer durch
Ripper.-
Dies verbessert die Geschwindigkeit der Dokumentengenerierung erheblich.
-
Es erleichtert auch die Unterstützung neuer Syntax in der Zukunft.
-
Unterstützt viele neue Syntaxen von Ruby aus den letzten Jahren.
-
Verwendet „frozen_string_literal: true“. Performance-Umfrage: gist.github.com/aycabta/abdfaa75ea8a6877eeb734e942e73800
-
Unterstützt did_you_mean.
-
-
-
Rubygems
-
Update auf Rubygems 2.7.3.
-
-
-
Neue Methode
-
-
Set
-
-
StringIO#writeakzeptiert mehrere Argumente
-
-
-
Neue Methoden
-
StringScanner#size,StringScanner#captures,StringScanner#values_at[Feature #836]
-
-
-
-
Operationen mit relativen Pfaden kollabieren nun keine aufeinanderfolgenden Schrägstriche mehr zu einem einzelnen Schrägstrich. [Bug #8352]
-
-
WEBrick
-
Unterstützung für Server Name Indication (SNI) hinzugefügt [Feature #13729]
-
Unterstützung für
Proc-Objekte als Body-Antworten [Feature #855] -
Als RubyGem veröffentlicht [Feature #13173]
-
Vermeidet unbeabsichtigtes Verhalten von
Kernel#open[Misc #14216]
-
-
-
Zlib::GzipWriter#writeakzeptiert mehrere Argumente
-
Kompatibilitätsprobleme (ausgenommen Feature-Fehlerbehebungen)
-
-
BasicSocket#read_nonblockundBasicSocket#write_nonblocksetzen das O_NONBLOCK-Dateideskriptorflag nicht mehr als Nebeneffekt (nur unter Linux) [Feature #13362]
-
-
-
Random.raw_seed wurde in
Random.urandomumbenannt. Es ist nun auch für nicht-seeding-Zwecke anwendbar aufgrund von [Bug #9569].
-
-
-
Socket::Ifaddr#vhidwurde hinzugefügt [Feature #13803]
-
-
ConditionVariable, Queue und SizedQueue wurden für höhere Geschwindigkeit neu implementiert. Sie erben nicht mehr von
Struct. [Feature #13552]
Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)
-
Gemifizierung
-
Die folgenden Standardbibliotheken werden zu Default-Gems befördert.
-
cmath
-
csv
-
date
-
dbm
-
etc
-
fcntl
-
fiddle
-
fileutils
-
gdbm
-
ipaddr
-
scanf
-
sdbm
-
stringio
-
strscan
-
webrick
-
zlib
-
-
-
Logger
-
Logger.new („| command“) hat unbeabsichtigt einen Befehl geöffnet. Dies wurde unterbunden, und nun behandelt Logger#initialize ein
String-Argument nur noch als Dateiname, wie in der Spezifikation vorgesehen. [Bug #14212]
-
-
-
Net::HTTP#startübergibt nun standardmäßig :ENV an p_addr. [Bug #13351] Um dies zu vermeiden, übergeben Sie nil explizit.
-
-
mathn.rb
-
Aus der Standardbibliothek entfernt. [Feature #10169]
-
-
Rubygems
-
Datei „ubygems.rb“ aus der Standardbibliothek entfernt. Sie ist seit Ruby 1.9 überflüssig.
-
Unterstützte Plattformänderungen
-
Unterstützung für die NaCl-Plattform eingestellt
Implementierungsverbesserungen
-
(Dies ist vielleicht keine „für den Benutzer sichtbare Funktionsänderung“, aber) die Hash-Funktion der Klasse
Hashist nun SipHash13. [Feature #13017] -
SecureRandombevorzugt nun vom Betriebssystem bereitgestellte Quellen gegenüberOpenSSL. [Bug #9569] -
Mutex wurde kleiner und schneller neu geschrieben [Feature #13517]
-
Die Performance des Blockübergangs über Blockparameter wird durch eine verzögerte
Proc-Allokation verbessert [Feature #14045] -
Dynamische Instrumentierung für
TracePoint-Hooks anstelle der Verwendung der „trace“-Anweisung, um Overhead zu vermeiden [Feature #14104] -
ERBgeneriert nun Code aus einer Vorlage doppelt so schnell wie Ruby 2.4
Sonstige Änderungen
-
Gibt den Backtrace und die Fehlermeldung in umgekehrter Reihenfolge aus, wenn $stderr unverändert und ein TTY ist. [Feature #8661] [experimentell]
-
Gibt die Fehlermeldung in fetter/unterstrichener Textform aus, wenn $stderr unverändert und ein TTY ist. [Feature #14140] [experimentell]
-
Configure-Option –with-ext erzwingt nun ihre Argumente. Wenn Sie also z.B. ./configure –with-ext=openssl,+ ausführen, wird die OpenSSL-Bibliothek garantiert kompiliert, andernfalls schlägt der Build fehl.
Beachten Sie jedoch, dass Sie immer „,+“ am Ende des Arguments hinzufügen müssen. Andernfalls werden nur OpenSSL und nichts anderes gebaut. [Feature #13302]