NEWS für Ruby 2.3.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.2.0
Sprachänderungen
-
pragma frozen-string-literal
-
Neues Pragma, frozen-string-literal wurde experimentell eingeführt. [Feature #8976]
-
Außerdem wurden die Optionen –enable/–disable=frozen-string-literal eingeführt. [Feature #8976]
-
Die Kommandozeilenoptionen –debug oder –debug=frozen-string-literal aktivieren einen zusätzlichen Debug-Modus, der den Erstellungsort bei einem Fehler mit einem gefrorenen Objekt anzeigt (
RuntimeError). [Feature #11725]
-
-
Safe-Navigation-Operator
-
Neue Methodensyntax, ‘object&.foo’, die Methode foo wird auf ‘object’ aufgerufen, wenn es nicht nil ist. [Feature #11537]
Dies ähnelt ‘try!’ in Active Support, außer dass
-
der Methodenname syntaktisch erforderlich ist
obj.try! {} # valid obj&. {} # syntax error -
Argumente werden nur ausgewertet, wenn ein Aufruf erfolgt
obj.try!(:foo, bar()) # bar() is always evaluated obj&.foo(bar()) # bar() is conditionally evaluated
-
Attributzuweisung ist gültig
obj&.attr += 1
-
-
-
das did_you_mean gem
-
Wenn ein
NameErroroderNoMethodErroraufgrund eines Tippfehlers im Namen auftritt, schlägt das did_you_mean gem automatisch andere, ähnliche Namen zur Methode vor."Yuki".starts_with?("Y") # => NoMethodError: undefined method `starts_with?' for "Yuki":String # Did you mean? start_with?
-
-
eingerücktes Here-Dokument
-
Neue String-Literalform, Here-Dokument beginnt mit ‘<<~`. Weitere Details finden Sie in doc/syntax/literals.rdoc. [Feature #9098]
-
Aktualisierungen von Core-Klassen (nur die wichtigsten)
-
-
ARGF.read_nonblockunterstützt ‘exception: false’ wieIO#read_nonblock. [Feature #11358]
-
-
-
Array#bsearch_index[Feature #10730] -
Array#dig[Feature #11643]
-
-
-
Comparable#==fängt keine Ausnahmen mehr ab [Feature #7688]
-
-
-
neues Encoding: Encoding::IBM037 (Alias: ebcdic-cp-us; Dummy)
-
-
-
Enumerable#grep_vwird als inverse Version vonEnumerable#grephinzugefügt. [Feature #11049] -
Enumerable#chunk_while[Feature #10769]
-
-
-
Enumerator::Lazy#grep_v[Feature #11773]
-
-
-
File.mkfifo[Feature #11536] -
File::TMPFILE hinzugefügt, entsprechend O_TMPFILE
-
-
-
Hash#fetch_values[Feature #10017] -
Hash#dig[Feature #11643] -
Hash#to_proc[Feature #11653]
-
-
-
Neues Modusflag File::SHARE_DELETE ist verfügbar. Dieses Flag bedeutet, das Löschen einer geöffneten Datei unter Windows zu erlauben, aber derzeit betrifft es nur Dateien, die als Binärdateien geöffnet wurden. [Feature #11218]
-
Neuer optionaler Parameter ‘flags’ hinzugefügt. Dieser Parameter wird per bitweisem OR zu den oflags hinzugefügt, die durch das normale Modusargument generiert werden. [Feature #11253]
-
IO#adviselöst keine Errno::ENOSYS-Ausnahme mehr aus, wenn diese zur Build-Zeit erkannt, aber zur Laufzeit nicht verfügbar war. [Feature #11806]
-
-
-
Kernel#loopgibt, wenn es durch eineStopIteration-Ausnahme gestoppt wird, das zurück, was der Enumerator zurückgegeben hat, anstatt nil. [Feature #11498]
-
-
Module
-
Module#deprecate_constant[Feature #11398]
-
-
-
NameError#receiverwird hinzugefügt, um das Empfängerobjekt zu erhalten. [Feature #10881]
-
-
-
Numeric#positive?undNumeric#negative?werden hinzugefügt und geben true zurück, wenn der Empfänger positiv bzw. negativ ist. [Feature #11151]
-
-
-
Proc#call(und auch [], ===, yield) werden optimiert. Die Backtrace zeigt nicht mehr jede Methode an (zeigt stattdessen direkt Blockzeilen).TracePointignoriert ebenfalls diese Aufrufe. [Feature #11569]
-
-
Queue (
Thread::Queue)-
Queue#close wird hinzugefügt, um eine Beendigung zu signalisieren. [Feature #10600]
-
-
Regexp/String: Unicode-Version von 7.0.0 auf 8.0.0 aktualisiert
-
-
Die folgenden Methoden werden als primitive Werkzeuge für den iseq-Loader hinzugefügt. Siehe sample/iseq_loader.rb für die Verwendung. Beachten Sie, dass der Loader keinen Verifier hat, daher ist es einfach, kritische Probleme durch das Laden von modifizierten/beschädigten Binärdaten zu verursachen. Weitere Details finden Sie in [Feature #11788]. (Experimentelle Funktion)
-
-
-
String#+@undString#-@werden hinzugefügt, um veränderliche/gefrorene Strings zu erhalten. [Feature #11782] -
String.newakzeptiert jetzt den neuen optionalen Parameter ‘encoding’. [Feature #11785]
-
-
-
Struct#dig[Feature #11688]
-
-
-
Thread#name,Thread#name=werden hinzugefügt, um Thread-Namen zu verwalten [Feature #11251]
-
Kompatibilitätsprobleme bei Core-Klassen (ausgenommen Fehlerbehebungen von Features)
-
-
Array#select!,Array#keep_if,Array#reject!undArray#delete_ifändern das Empfänger-Array nicht mehr sofort bei jedem Blockaufruf. [Feature #10714] -
Array#flattenundArray#flatten!versuchen nicht mehr, die to_ary-Methode für Elemente jenseits des angegebenen Levels aufzurufen. [Bug #10748] -
Array#inspectlöst keinen Fehler mehr aus, selbst wenn sein Inhalt einen String zurückgibt, der nicht mitEncoding.default_externalals inspiziertes Ergebnis kompatibel ist. [Feature #11801]
-
-
-
Enumerable#chunkundEnumerable#slice_beforeakzeptieren das Argument initial_state nicht mehr. [Feature #10958] Verwenden Sie stattdessen eine lokale Variable, um einen Zustand zu erhalten.
-
-
-
Unter Windows gab
File::Stat#inoimmer 0 zurück, gibt jetzt aber BY_HANDLE_FILE_INFORMATION.nFileIndexHigh/Low zurück. [Feature #11216]
-
-
-
Hash#inspectlöst keinen Fehler mehr aus, selbst wenn sein Inhalt einen String zurückgibt, der nicht mitEncoding.default_externalals inspiziertes Ergebnis kompatibel ist. [Feature #11801]
-
-
-
IO#closelöst keine Ausnahme aus, wenn dasIO-Objekt bereits geschlossen ist. [Feature #10718] -
IO#each_codepointlöst eine Ausnahme bei einem unvollständigen Zeichen vor EOF aus, wenn eine Konvertierung stattfindet. [Bug #11444]
-
-
Module
-
Module#define_methodundObject.define_singleton_methoderfordern nun den Methodenkörper, einProc, eine Methode oder einen Block und lösen eineArgumentErroraus, wenn kein Block direkt angegeben wird. [Bug #11283]
-
-
pack/unpack (Array/String)
-
j und J Direktiven für Integer-Typen mit Zeigerbreite. [Feature #11215]
-
Aktualisierungen von Stdlib (nur die wichtigsten)
-
Logger
-
Logger#level= unterstützt nun Symbol- und String-Levels wie :debug, :info, :warn, :error, :fatal (Groß-/Kleinschreibung wird nicht beachtet) [Feature #11695]
-
Logger#reopen wird hinzugefügt, um ein Log-Gerät neu zu öffnen. [Feature #11696]
-
-
io/wait
-
IO#wait_readableprüft nicht mehr FIONREAD, es kann für Nicht-Bytestream-IOs wie Listen-Sockets verwendet werden.
-
-
Net::FTP
-
Net::FTP#mlst wird hinzugefügt.
-
Net::FTP#mlsd wird hinzugefügt.
-
-
nkf
-
nkf 2.1.4 zusammengeführt.
-
-
ObjectSpace(objspace)-
ObjectSpace.count_symbolswird hinzugefügt. -
ObjectSpace.count_imemo_objectswird hinzugefügt. -
ObjectSpace.internal_class_ofwird hinzugefügt. -
ObjectSpace.internal_super_ofwird hinzugefügt.
-
-
-
OpenSSL::SSL::SSLSocket#accept_nonblockundOpenSSL::SSL::SSLSocket#connect_nonblockunterstützen ‘exception: false`. [Feature #10532]
-
-
-
Pathname#descendundPathname#ascendunterstützen die Block-lose Form. [Feature #11052]
-
-
-
Socket#connect_nonblock,Socket#accept_nonblock,TCPServer#accept_nonblock,UNIXServer#accept_nonblock,BasicSocket#recv_nonblock,BasicSocket#recvmsg_nonblock,BasicSocket#sendmsg_nonblockunterstützen alle ‘exception: false` zur Rückgabe von :wait_readable oder :wait_writable Symbolen anstelle des Auslösens vonIO::WaitReadableoderIO::WaitWritableAusnahmen [Feature #10532] [Feature #11229] -
BasicSocket#recvundBasicSocket#recv_nonblockerlauben ein Ausgabestring-Puffer-Argument wieIO#readundIO#read_nonblockzur Reduzierung desGC-Overheads [Feature #11242]
-
-
-
Im Nur-Lese-Modus setzt
StringIO#set_encodingnicht mehr die Kodierung seines Puffer-Strings. Das direkte Setzen der Kodierung des Strings ohneStringIO#set_encodingkann nun zu unvorhersehbarem Verhalten führen. [Bug #11827]
-
-
timeout
-
Object#timeout wird nun als veraltet gewarnt, wenn es aufgerufen wird.
-
Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)
-
-
Coverage.peek_result: Neue Methode, um die Abdeckung zu erfassen, ohne das Abdeckungswerkzeug zu stoppen. [Feature #10816]
-
-
Fiddle
-
Fiddle::Function#call gibt die GVL frei. [Feature #11607]
-
-
io-console
-
Update auf io-console 0.4.5 und Änderung der Lizenz auf BSD 2-Clause „Simplified“ License.
-
-
lib/base64.rb
-
Base64.urlsafe_encode64: Eine Option „padding“ wurde hinzugefügt, um das Füllzeichen („=“) zu unterdrücken. [Feature #10740]
-
Base64.urlsafe_decode64: Akzeptiert nun nicht nur korrekt aufgefüllte Eingaben, sondern auch ungefüllte Eingaben. [Feature #10740]
-
-
lib/drb/drb.rb
-
nicht verwendetes Argument entfernt. github.com/ruby/ruby/pull/515
-
-
lib/matrix.rb
-
Vector#round hinzugefügt. github.com/ruby/ruby/pull/802
-
-
lib/webrick/utils.rb
-
nicht verwendetes Argument entfernt. github.com/ruby/ruby/pull/356
-
-
Net::FTP
-
Verbindungen sind standardmäßig im passiven Modus. Der Standardmodus kann durch Net::FTP.default_passive= geändert werden. [Feature #11612]
-
-
-
Standardwert von
Net::HTTP#open_timeoutist nun 60 (war nil).
-
-
Net::Telnet
-
Net::Telnet wurde in das gem net-telnet extrahiert. Es handelt sich um unbeaufsichtigten Code. [Feature #11083]
-
-
-
Aktualisiert auf
Psych2.0.17
-
-
Rake
-
Rake wurde aus dem Standardbibliotheksumfang entfernt. [Feature #11025]
-
-
RDoc
-
Aktualisiert auf RDoc 4.2.1. Die vollständigen Release Notes finden Sie unter
github.com/rdoc/rdoc/blob/master/History.rdoc#421–2015-12-22
-
-
RubyGems
-
Aktualisiert auf RubyGems 2.5.1. Die vollständigen Release Notes finden Sie unter
docs.seattlerb.org/rubygems/History_txt.html#label-2.5.0+-2F+2015-11-03 und docs.seattlerb.org/rubygems/History_txt.html#label-2.5.1+-2F+2015-12-10
-
Kompatibilitätsprobleme bei integrierten globalen Variablen
-
$SAFE
-
$SAFE=2 und $SAFE=3 sind veraltet. Wenn $SAFE auf 2 oder höher gesetzt wird, wird eine
ArgumentErrorausgelöst. [Feature #5455]
-
Updates der C-API
-
rb_define_class_id_under() löst nun eine
TypeError-Ausnahme aus, wenn die Klasse bereits definiert ist, aber ihre Oberklasse nicht mit der angegebenen Oberklasse übereinstimmt, wie auch bei Definitionen auf Ruby-Ebene. -
rb_timespec_now() wird hinzugefügt, um die aktuelle Zeit als struct timespec abzurufen. [Feature #11558]
-
rb_time_timespec_new() wird hinzugefügt, um ein Zeitobjekt mit Epoche, Nanosekunde und UTC/Lokalzeit/Zeitzonen-Argumenten zu erstellen. [Feature #11558]
-
rb_autoload() ist veraltet, verwenden Sie stattdessen rb_funcall(). [Feature #11664]
-
rb_compile_error_with_enc(), rb_compile_error() und rb_compile_bug() sind veraltet. Diese Funktionen sind verfügbar, aber nur für den internen Gebrauch. Externe Bibliotheken sollten sie nicht verwenden.
Unterstützte Plattformänderungen
-
OS/2 wird nicht mehr unterstützt
-
BeOS wird nicht mehr unterstützt
-
Borland-C wird nicht mehr unterstützt
-
Haiku ist jetzt stabil und wird nach bestem Bemühen unterstützt
Implementierungsverbesserungen
-
Optimierung von
Proc#callzur Eliminierung der Methodengenerierung. [Feature #11569] -
Überarbeitung der Datenstruktur für den Methodeneinstieg. [Bug #11278]
-
Einführung einer neuen Tabellen-Datenstruktur für ID-Schlüssel-Tabellen, die von der Methodentabelle usw. verwendet werden. Die neue Tabellenstruktur ist einfacher und schneller als st_table. [Feature #11420]
-
Optimierung des Maschinencodes für Objektallokation und Methodenaufrufcode. r52099, r52254
-
RubyVM::InstructionSequencewird für zukünftige Verbesserungen erweitert. [Feature #11788] -
Die Fallunterscheidung ist nun für alle speziellen konstanten Literale, einschließlich nil, true und false, optimiert. Zuvor wurden nur literale Strings, Symbole, Integer und Floats zu optimierten Fallunterscheidungen kompiliert. [Feature #11769]
-
Instanzvariablen auf Nicht-Pure-Ruby-Klassen (T_DATA, T_FILE usw.) sind jetzt kostengünstiger zu speichern als zuvor. [Feature #11170]
-
Alle Zugriffe auf Elemente großer
Struct-Objekte erfolgen in konstanter Zeit. Zuvor wurdenStruct-Elemente über die ersten 10 Elemente hinaus linear durchsucht. [Feature #10585] -
Die Set-Klasse hat mehrere Geschwindigkeitssteigerungen erfahren. [Misc #10754], [r52591]
-
Socketund I/O-bezogene Verbesserungen-
Der Aufruf-Overhead der meisten neuen Schlüsselwort-verwendenden I/O-Methoden in
- Feature #11229
-
wird reduziert, indem die ineffiziente C-API zur
Schlüsselwort-Analyse vermieden wird. [Feature #11339]
-
Die Standardbibliothek wurde aktualisiert, um die verbesserte exception-freie nicht-blockierende I/O von [Feature #11229] zu verwenden. Dies hat den zusätzlichen Vorteil einer ruhigeren $DEBUG-Ausgabe sowie der Reduzierung teurer Ausnahmen. [Feature #11044]
-
(Nur Linux) Das Warten auf ein einzelnes FD im gesamten Standardbibliotheksumfang verwendet nicht mehr select(2), wodurch es immun gegen Verlangsamungen bei hoch nummerierten FDs ist. [Feature #11081] [Feature #11377]
-
-
CGI.escapeHTMLwird mit einer C-Erweiterung optimiert. github.com/ruby/ruby/pull/1164