NEWS für Ruby 2.4.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.3.0
Sprachänderungen
-
Mehrfachzuweisungen in bedingten Ausdrücken sind nun erlaubt. [Feature #10617]
-
Refinements werden bei Methoden über
Symbol#to_procaktiviert. [Feature #9451] -
Refinements werden mit Kernel#send und
BasicObject#__send__aktiviert. [Feature #11476] -
Rescue-Modifikatoren können nun auf Methodenargumente angewendet werden. [Feature #12686]
-
Top-Level-Return ist nun erlaubt. [Feature #4840]
Aktualisierungen von Core-Klassen (nur die wichtigsten)
-
-
Array#concat[Feature #12333]Akzeptiert nun mehrere Argumente.
-
Array#maxundArray#min. [Feature #12172]Dies kann zu einer geringfügigen Inkompatibilität führen: Wenn Sie
Enumerable#maxneu definieren und max für einArrayaufrufen, wird Ihre Neudefinition nun ignoriert. Sie sollten auchArray#maxneu definieren. -
Array#pack[Feature #12754]Akzeptiert nun das optionale Argument ‚buffer:‘, um bereits zugewiesenen Puffer wiederzuverwenden.
-
Array#sum[Feature #12217]Dies unterscheidet sich von
Enumerable#sumdadurch, dassArray#sumnicht von der Definition jeder Methode abhängt.
-
-
-
Comparable#clamp. [Feature #10594]
-
-
-
Dir.empty?. [Feature #10121]
-
-
-
Enumerable#chunk, wenn es ohne Block aufgerufen wird, gibt nun einenEnumeratorzurück [Feature #2172] -
Enumerable#sum[Feature #12217] -
Enumerable#uniq[Feature #11090]
-
-
-
Enumerator::Lazy#chunk_while[GH-1186] -
Enumerator::Lazy#uniq[Feature #11090]
-
-
-
File.empty?. [Feature #9969]
-
-
-
Float#ceil,Float#floorundFloat#truncateakzeptieren nun, wie auchFloat#round, eine optionale Anzahl von Dezimalstellen. [Feature #12245] -
Float#roundakzeptiert nun das optionale Schlüsselwortargument half und das Standardverhalten ist round-up. [Bug #12548] [Bug #12958] Die Option half kann :even, :up oder :down sein. [Feature #12953]
-
-
-
Hash#compactundHash#compact![Feature #11818] -
Hash#transform_valuesundHash#transform_values![Feature #12512]
-
-
-
Fixnum und Bignum werden zu
Integervereinigt [Feature #12005] -
Integer#ceil,Integer#floorundInteger#truncateakzeptieren nun, wie auchInteger#round, eine optionale Anzahl von Dezimalstellen. [Feature #12245] -
Integer#digitszum Extrahieren von Stellen der Stellenwertnotation [Feature #12447] -
Integer#roundakzeptiert nun das optionale Schlüsselwortargument half und das Standardverhalten ist nun round-up. [Bug #12548] [Bug #12958]Die Option half kann :even, :up oder :down sein. [Feature #12953]
-
-
-
IO#gets,IO#readline,IO#each_line,IO#readlines,IO.foreachakzeptieren nun das optionale Schlüsselwortargument chomp flag. [Feature #12553]
-
-
-
Kernel#cloneakzeptiert nun das optionale Schlüsselwortargument freeze flag. [Feature #12300]
-
-
-
MatchData#named_captures[Feature #11999] -
MatchData#values_atunterstützt benannte Erfassungen [Feature #9179]
-
-
Module
-
Module#refineakzeptiert nun ein Modul als Argument. [Feature #12534] -
Module.used_modules[Feature #7418]
-
-
-
Numeric#finite?,Numeric#infinite?[Feature #12039]
-
-
Process
-
Unterstützung für CLOCK_MONOTONIC_RAW_APPROX, CLOCK_UPTIME_RAW und CLOCK_UPTIME_RAW_APPROX, die von macOS 10.12 eingeführt wurden.
-
-
-
Rational#roundakzeptiert nun das optionale Schlüsselwortargument half und das Standardverhalten ist nun round-up. [Bug #12548] [Bug #12958] Die Option half kann :even, :up oder :down sein. [Feature #12953]
-
-
-
Das Meta-Zeichen X passt zu Unicode 9.0 Zeichen mit einigen Workarounds für UTR #51 Unicode Emoji, Version 4.0 Emoji ZWJ-Sequenzen.
-
Regexp#match?[Feature #8110]Dies gibt einen Booleschen Wert zurück und speichert keine Backreferences.
-
Aktualisierung auf Onigmo 6.0.0.
-
-
Regexp/String: Unicode-Version von 8.0.0 auf 9.0.0 aktualisiert [Feature #12513]
-
RubyVM::Env
-
RubyVM::Env wurde entfernt.
-
-
-
String#casecmp?[Feature #12786] -
String#concat,String#prepend[Feature #12333]Akzeptiert nun mehrere Argumente.
-
String#each_line,String#linesakzeptieren nun das optionale Schlüsselwortargument chomp flag. [Feature #12553] -
String#match?[Feature #12898] -
String#unpack1[Feature #12752] -
String#upcase,String#downcase,String#capitalize,String#swapcaseund ihre Bang-Varianten funktionieren für das gesamte Unicode und sind nicht mehr auf ASCII beschränkt. Unterstützte Kodierungen sind UTF-8, UTF-16BE/LE, UTF-32BE/LE und ISO-8859-1~16. Variationen sind mit Optionen verfügbar. Einzelheiten finden Sie in der Dokumentation vonString#downcase. [Feature #10085] -
String.new(capacity: size) [Feature #12024]
-
-
-
StringIO#gets,StringIO#readline,StringIO#each_line,StringIO#readlinesakzeptieren nun das optionale Schlüsselwortargument chomp flag. [Feature #12553]
-
-
-
Symbol#casecmp?[Feature #12786] -
Symbol#matchgibt nunMatchDatazurück. [Bug #11991] -
Symbol#match?[Feature #12898] -
Symbol#upcase,Symbol#downcase,Symbol#capitalizeundSymbol#swapcasefunktionieren nun für das gesamte Unicode. Einzelheiten finden Sie in der Dokumentation vonString#downcase. [Feature #10085]
-
-
-
Thread#report_on_exceptionundThread.report_on_exception[Feature #6647]
-
-
-
TracePoint#callee_id[Feature #12747]
-
-
-
Ein neues Modul namens
Warningwird eingeführt. Standardmäßig hat es nur eine Singleton-Methode namens warn. Dies ermöglicht es Drittanbieter-Bibliotheken, die Handhabung von Warnungen zu steuern. [Feature #12299]
-
Aktualisierungen von Stdlib (nur die wichtigsten)
-
-
Keine Kommas als Trennzeichen mehr zulassen [Bug #12791]
-
-
CSV
-
Option liberal_parsing hinzufügen. [Feature #11839]
-
-
-
IPAddr#==undIPAddr#<=>lösen keine Ausnahme mehr aus, wenn die Umwandlung fehlschlägt. [Bug #12799]
-
-
IRB
-
Binding#irb: Starten Sie eine REPL-Sitzung wie bei ‘binding.pry` ab r56624.
-
-
Logger
-
Es können Logger-Parameter im Konstruktor wie level, progname, datetime_format, formatter angegeben werden. [Feature #12224]
-
Option shift_period_suffix hinzufügen. [Feature #10772]
-
-
-
Neue Methode:
Net::HTTP.post[Feature #12375]
-
-
Net::FTP
-
TLS unterstützen (RFC 4217).
-
Hash-Stil-Optionen für Net::FTP.new unterstützen.
-
Neues optionales Argument pathname zu Net::FTP#status hinzufügen. Mit freundlicher Unterstützung von soleboxy. [GH-1478] [Feature #12965]
-
-
-
Enthält Ruby/OpenSSL 2.0.
OpenSSLwurde als Gem extrahiert und wird nun in einem separaten Repository gepflegt: github.com/ruby/openssl. Es bleibt weiterhin ein „Standard-Gem“. [Feature #9612] Lesen Sie ext/openssl/History.md für die vollständige Release-Note.
-
-
optparse
-
Option into hinzufügen. [Feature #11191]
-
-
Pfadname
-
Neue Methode:
Pathname#empty?[Feature #12596]
-
-
Readline
-
Readline.quoting_detection_proc und Readline.quoting_detection_proc= [Feature #12659]
-
-
REXML
-
set
-
Neue Methoden:
Set#compare_by_identityundSet#compare_by_identity?. [Feature #12210]
-
-
WEBrick
-
Keine Kommas als Trennzeichen mehr zulassen [Bug #12791]
-
Kompatibilitätsprobleme (ausgenommen Feature-Fehlerbehebungen)
-
Array#sumundEnumerable#sumsind implementiert. [Feature #12217]Ruby selbst hat keine Kompatibilitätsprobleme, da Ruby vor Ruby 2.4 keine sum-Methode für Arrays hatte. Viele Drittanbieter-Gems wie activesupport, facets, simple_stats usw. definieren jedoch eine sum-Methode. Diese Implementierungen sind meist kompatibel, aber es gibt subtile Unterschiede. Rubys sum-Methode sollte größtenteils kompatibel sein, aber es ist unmöglich, mit allen perfekt kompatibel zu sein.
-
Fixnum und Bignum werden zu
Integervereinigt [Feature #12005]Die Klassen Fixnum und Bignum sind entfernt. Die Klasse
Integerwurde von einer abstrakten Klasse zu einer konkreten Klasse geändert. Zum Beispiel ist 0 eine Instanz von Integer: 0.class gibtIntegerzurück. Die Konstanten Fixnum und Bignum sind anIntegergebunden. Daher funktioniert obj.kind_of?(Fixnum) wie obj.kind_of?(Integer). Auf C-Ebene sollten Fixnum- und Bignum-Objekte durch FIXNUM_P(obj) bzw. RB_TYPE_P(obj, T_BIGNUM) unterschieden werden. RUBY_INTEGER_UNIFICATION kann verwendet werden, um dieses Feature auf C-Ebene zu erkennen. 0.class ==Integerkann verwendet werden, um dieses Feature auf Ruby-Ebene zu erkennen. Die C-Konstanten rb_cFixnum und rb_cBignum sind entfernt. Sie können Kompilierungsfehler verursachen. -
String/Symbol#upcase/downcase/swapcase/capitalize(!) funktionieren jetzt für das gesamte Unicode, nicht nur für ASCII. [Feature #10085]
Keine Änderung ist erforderlich, wenn die Daten ohnehin in ASCII vorliegen oder wenn die Beschränkung auf ASCII nur toleriert wurde, bis eine umfassendere Implementierung verfügbar war. Eine Änderung (mit der Option :ascii) ist erforderlich, wenn Unicode-Daten verarbeitet werden, die Operation jedoch auf ASCII beschränkt werden muss. Ein gutes Beispiel hierfür sind internationalisierte Domainnamen.
-
TRUE / FALSE / NIL
Diese Konstanten sind nun veraltet. [Feature #12574] Verwenden Sie stattdessen true / false / nil.
Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)
-
-
DateTime#to_timebehält nun die Zeitzone bei. [Bug #12189]
-
-
-
Aktualisierung auf
Psych2.2.2
-
-
RDoc
-
Aktualisierung auf RDoc 5.0.0
-
-
RubyGems
-
Aktualisierung auf RubyGems 2.6.8
-
-
shellwords
-
Shellwords.shellwords(shellsplit) behandelt den Backslash als Escape-Zeichen nur, wenn er von einem der folgenden Zeichen gefolgt wird: $ ‘ “ \ <Zeilenumbruch> [Bug #10055]
-
-
-
Time#to_timebehält nun die Zeitzone bei. [Bug #12271]
-
-
thread
-
Die Erweiterungsbibliothek wird entfernt. Bis 2.0 war es ein reines Ruby-Skript „thread.rb“, das Vorrang vor „thread.so“ hatte und seit 2.1 in $LOADED_FEATURES enthalten war.
-
-
Tk
-
Tk wurde aus stdlib entfernt. [Feature #8539]
github.com/ruby/tk ist der neue Upstream.
-
-
XMLRPC
-
XMLRPC wurde aus stdlib entfernt und als Gem gebündelt. [Feature #12160]
github.com/ruby/xmlrpc ist der neue Upstream.
-
-
-
Zlib.gzipundZlib.gunzip[Feature #13020]
-
Updates der C-API
-
ruby_show_version() wird den Prozess nicht mehr beenden, wenn RUBY_SHOW_COPYRIGHT_TO_DIE auf 0 gesetzt ist. Dies wird zukünftig der Standard sein.
-
rb_gc_adjust_memory_usage() [Feature #12690]
Unterstützte Plattformänderungen
-
FreeBSD < 4 wird nicht mehr unterstützt
Implementierungsverbesserungen
-
Unter bestimmten Bedingungen werden `[x, y].max` und `[x, y].min` optimiert, so dass kein temporäres Array erstellt wird. Die konkrete Bedingung ist ein Implementierungsdetail: Derzeit muss das Array-Literal keine Splats haben, mindestens einen Ausdruck, aber ein Literal, die Länge muss <= 0x100 sein und
Array#maxund min dürfen nicht neu definiert sein. Dies funktioniert in den meisten alltäglichen und realen Anwendungsfällen, in denen es mit der Absicht geschrieben ist, `Math.max(x, y)` zu entsprechen. -
Die Deadlock-Erkennung von
Threadzeigt nun ihren Backtrace und ihre Abhängigkeit an. [Feature #8214] -
Die interne Datenstruktur von st_table (st.c) wurde verbessert. [Feature #12142]
-
Rationalwurde umfassend optimiert. [Feature #12484]
Sonstige Änderungen
-
ChangeLog wurde aus dem Repository entfernt.
Er wird aus Commit-Nachrichten in Subversion mit ‚make dist` generiert. Beachten Sie auch, dass nun Git-typische Commit-Nachrichten befolgt werden sollten. Die Vorlage ist unter Short (50 chars or less) summary of changes geschrieben. [Feature #12283]