NEWS für Ruby 2.1.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 ist, dass kein Grund oder Referenzinformationen angegeben werden. Eine vollständige Liste der Änderungen mit allen ausreichenden Informationen finden Sie in der Datei ChangeLog.
Änderungen seit der 2.0.0-Version
Sprachänderungen
-
Jetzt können die Standardwerte von Schlüsselwortargumenten weggelassen werden. Diese „erforderlichen Schlüsselwortargumente“ müssen zum Zeitpunkt des Aufrufs explizit angegeben werden.
-
Suffixe für Integer- und Fließkomma-Literale hinzugefügt: „r“, „i“ und „ri“.
-
„42r“ und „3.14r“ werden als Rational(42, 1) bzw. 3.14.rationalize ausgewertet. Die Exponentialform mit dem Suffix „r“ wie „6.022e+23r“ wird jedoch nicht akzeptiert, da sie irreführend ist.
-
„42i“ und „3.14i“ werden als Complex(0, 42) bzw. Complex(0, 3.14) ausgewertet.
-
„42ri“ und „3.14ri“ werden als Complex(0, 42r) bzw. Complex(0, 3.14r) ausgewertet.
-
-
def-expr gibt jetzt das Symbol seines Namens anstelle von nil zurück.
Aktualisierungen von Core-Klassen (nur die wichtigsten)
-
-
Neue Methoden
-
Array#to_hkonvertiert ein Array von Schlüssel-Wert-Paaren in einenHash.
-
-
-
-
Neue Methoden
-
Enumerable#to_hkonvertiert eine Liste von Schlüssel-Wert-Paaren in einenHash.
-
-
-
-
Neue Methoden
-
Exception#causeliefert die vorherige Ausnahme, die beim Auslösen der neuen Ausnahme abgefangen wurde.
-
-
-
-
Verbesserungen
-
Generationsbasierter
GC, auch bekannt als RGenGC, eingeführt.
-
-
Umgebungsvariablen hinzugefügt
-
RUBY_GC_HEAP_INIT_SLOTS
-
RUBY_GC_HEAP_FREE_SLOTS
-
RUBY_GC_HEAP_GROWTH_FACTOR
-
RUBY_GC_HEAP_GROWTH_MAX_SLOTS
-
RUBY_GC_MALLOC_LIMIT_MAX
-
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
-
RUBY_GC_OLDMALLOC_LIMIT
-
RUBY_GC_OLDMALLOC_LIMIT_MAX
-
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
-
-
Veraltete Umgebungsvariablen
-
RUBY_FREE_MIN (Verwenden Sie stattdessen RUBY_GC_HEAP_FREE_SLOTS)
-
RUBY_HEAP_MIN_SLOTS (Verwenden Sie stattdessen RUBY_GC_HEAP_INIT_SLOTS)
-
-
-
-
Neue Methoden
-
Fixnum#bit_length
-
Bignum#bit_length
-
-
Bignum-Leistungsverbesserung
-
Verwenden Sie GMP, falls verfügbar. GMP wird nur für einige Operationen verwendet: Multiplikation, Division, Radixkonvertierung, GCD
-
-
-
-
erweiterte Methoden
-
IO#seekunterstützt SEEK_DATA und SEEK_HOLE als `whence`. -
IO#seekakzeptiert Symbole (:CUR, :END, :SET, :DATA, :HOLE) für das zweite Argument. -
IO#read_nonblockakzeptiert optional `exception: false`, um Symbole zurückzugeben. -
IO#write_nonblockakzeptiert optional `exception: false`, um Symbole zurückzugeben.
-
-
-
-
Neue Methoden
-
Kernel#singleton_method
-
-
-
Module
-
Neue Methoden
-
Module#using, das Verfeinerungen des angegebenen Moduls nur in der aktuellen Klassen- oder Moduldefinition aktiviert. -
Module#singleton_class?gibt true zurück, wenn der Empfänger eine Singleton-Klasse ist, andernfalls false, wenn es sich um eine gewöhnliche Klasse oder ein Modul handelt.
-
-
erweiterte Methoden
-
Module#refineist nicht mehr experimentell. -
Module#includeundModule#prependsind jetzt öffentliche Methoden.
-
-
-
Mutex
-
Sonstiges
-
Mutex#owned? ist nicht mehr experimentell.
-
-
-
-
erweiterte Methoden
-
Numeric#steperlaubt, dass das `limit`-Argument weggelassen wird, in diesem Fall wird eine unendliche Zahlenfolge generiert. Die Schlüsselwortargumente `to` und `by` wurden zur einfacheren Verwendung eingeführt. `by` kann 0 sein, in diesem Fall wird derselbe Wert unendlich oft generiert.
-
-
-
Process
-
Neue Methoden
-
Alternative Methoden für $0/$0=
-
Process.argv0()gibt den ursprünglichen Wert von $0 zurück. -
Process.setproctitle()setzt den Prozess-Titel, ohne $0 zu beeinflussen.
-
-
-
-
-
„literal“.freeze wird jetzt optimiert, um dasselbe Objekt zurückzugeben.
-
Neue Methoden
-
String#scrubundString#scrub!überprüfen und korrigieren ungültige Byte-Sequenzen. Wenn Sie diese Funktion mit älteren Ruby-Versionen verwenden möchten, sollten Sie string-scrub.gem in Betracht ziehen.
-
-
-
-
Alle Symbole sind jetzt eingefroren.
-
-
pack/unpack (Array/String)
-
Q! und q! Direktiven für den `long long`-Typ, falls die Plattform diesen Typ hat.
-
-
Toplevel
-
erweiterte Methoden
-
main.using ist nicht mehr experimentell. Die Methode aktiviert Verfeinerungen in den Vorfahren des Argumentmoduls, um die Verfeinerungs-Vererbung durch
Module#includezu unterstützen.
-
-
Kompatibilitätsprobleme mit Kernklassen (ausgenommen Fehlerbehebungen)
-
-
inkompatible Änderungen
-
Hash#rejectgibt in zukünftigen Versionen ein einfachesHash-Objekt zurück, d. h. Unterklassen, Instanzvariablen, Standardwerte und die Taint-Status des ursprünglichen Objekts werden nicht mehr kopiert, sodass jetzt Warnungen ausgegeben werden, wenn es mit solchenHash-Objekten aufgerufen wird.
-
-
-
-
inkompatible Änderungen
-
open ignoriert die interne Kodierung, wenn die externe Kodierung ASCII-8BIT ist.
-
-
-
Kernel#eval, Kernel#instance_eval undModule#module_eval.-
Kopiert die Bereichsinformationen der ursprünglichen Umgebung, was bedeutet, dass private, geschützte, öffentliche und `module_function` ohne Argumente die Umgebung außerhalb des Eval-Strings nicht beeinflussen. Zum Beispiel macht ‚class Foo; eval “private”; def foo; end; end‘ Foo#foo nicht privat.
-
-
Kernel#untrusted?, untrust und trust
-
Diese Methoden sind veraltet und ihr Verhalten ist dasselbe wie bei tainted?, taint und untaint. Wenn $VERBOSE true ist, zeigen sie Warnungen an.
-
-
-
Die Vorfahren einer Singleton-Klasse enthalten jetzt Singleton-Klassen, insbesondere sich selbst.
-
-
Module#define_methodundObject#define_singleton_method-
Jetzt geben sie die Symbole der definierten Methoden zurück, nicht die Methoden/Procs selbst.
-
-
-
Löst
TypeErroranstelle vonArgumentErroraus, wenn der Empfänger keine `to_r`-Methode hat.
-
-
-
Das Zurückgeben aus einem Lambda-Proc beendet jetzt immer den
Proc, nicht die Methode, in der das Lambda erstellt wurde. Das Zurückgeben aus einem Nicht-Lambda-Proc beendet die Methode, wie es auch zuvor der Fall war.
-
* If invalid: :replace is specified for String#encode, replace invalid byte sequence even if the destination encoding equals to the source encoding.
Aktualisierungen von Stdlib (nur die wichtigsten)
-
CGI::Util
-
Alle Klassenmethoden wurden modularisiert.
-
-
-
erweiterte Methoden
-
Digest::Class.filenimmt optionale Argumente für seinen Konstruktor entgegen.
-
-
-
Matrix
-
Vector#cross_product hinzugefügt.
-
-
Net::SMTP
-
Net::SMTP#rset hinzugefügt, um den RSET-Befehl zu implementieren.
-
-
objspace
-
neue Methode
-
-
-
erweiterte Methoden
-
OpenSSL::BN.newerlaubt Fixnum/Bignum als Argument.
-
-
-
open-uri
-
Unterstützung für mehrere Felder mit demselben Feldnamen (wie Set-Cookie).
-
-
-
Neue Methoden
-
-
rake
-
Aktualisiert auf 10.1.0. Zu den wichtigsten Änderungen gehören die Entfernung des Klassen-Namensraums, Rake::DSL zur Aufnahme der Rake-DSL-Methoden und die Entfernung der Unterstützung für ältere Rake-Funktionen.
Eine vollständige Liste der Änderungen seit Rake 0.9.6 finden Sie unter
-
-
-
Neue Konstanten
-
RbConfig::SIZEOF wird hinzugefügt, um die Größe von C-Typen bereitzustellen.
-
-
-
RDoc
-
Aktualisiert auf 4.1.0. Zu den wichtigsten Verbesserungen gehören ein geändertes Standard-Template
-
und Verbesserungen der Barrierefreiheit.
Eine Liste kleinerer Verbesserungen und Fehlerbehebungen finden Sie unter: github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
-
-
-
Neue Methoden
-
Resolv::DNS.fetch_resource
-
-
One-shot Multicast-DNS-Unterstützung
-
Unterstützung für LOC-Ressourcen
-
-
REXML::Parsers::SAX2Parser
-
Behebt falsche Anzahl von Argumenten für das entitydecl-Ereignis. Die Dokumentation des Ereignisses besagt „ein Array der Entitätsdeklaration“, aber die Implementierung übergibt zwei oder mehr Argumente. Dies ist ein Implementierungsfehler, der jedoch die Rückwärtskompatibilität beeinträchtigt.
-
-
REXML::Parsers::StreamParser
-
Unterstützt das „entity“-Ereignis.
-
-
REXML::Text
-
REXML::Text#<< unterstützt Methodenkette wie ‚text << “XXX” << “YYY”‘.
-
REXML::Text#<< unterstützt nicht den „rohen“ Modus.
-
-
Rinda::RingServer, Rinda::RingFinger
-
Rinda unterstützt jetzt Multicast-Sockets. Weitere Details finden Sie unter Rinda::RingServer und Rinda::RingFinger.
-
-
RubyGems
-
Aktualisiert auf 2.2.0. Zu den bemerkenswerten neuen Funktionen gehören
-
Gemfile oder gem.deps.rb Unterstützung einschließlich Gem.file.lock (experimentell)
-
Verbesserter, iterativer Resolver (im Vergleich zu RubyGems 2.1 und früher)
-
Unterstützung für die gemeinsame Nutzung von GEM_HOME auf Ruby-Plattformen und -Versionen.
Eine vollständige Liste der Verbesserungen und Fehlerbehebungen finden Sie unter: github.com/rubygems/rubygems/tree/master/History.txt
-
-
-
Set
-
Neue Methoden
-
-
-
Neue Methoden
-
-
-
erweiterte Methoden
-
StringScanner#[]unterstützt benannte Erfassungen.
-
-
-
Syslog::Logger
-
Facility hinzugefügt.
-
-
-
Neue Methoden
-
-
-
Die Ausnahme zum Beenden des gegebenen Blocks kann standardmäßig nicht mehr innerhalb des Blocks abgefangen werden, es sei denn, die Ausnahmeklasse wird explizit angegeben.
-
-
WEBrick
-
Der Körper einer Antwort kann jetzt ein
StringIOoder ein anderes IO-ähnliches Objekt sein, das auf `readpartial` und `read` reagiert.
-
-
XMLRPC::Client
-
Neue Methoden
-
XMLRPC::Client#http. Gibt
Net::HTTPfür den Client zurück. Normalerweise ist dies nicht erforderlich. Es ist nützlich, wenn Sie geringfügige HTTP-Client-Optionen ändern möchten. Sie können wichtige HTTP-Client-Optionen über XMLRPC::Client-Methoden ändern. Sie sollten XMLRPC::Client-Methoden zum Ändern wichtiger HTTP-Client-Optionen anstelle von XMLRPC::Client#http verwenden.
-
-
Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)
-
Set
-
inkompatible Änderungen
-
Set#to_setgibt jetzt `self` zurück, anstatt eine Kopie zu generieren.
-
-
-
-
inkompatible Änderungen
-
URI.decode_www_formfolgt dem aktuellen WHATWG URL Standard. Es nimmt ein `encoding`-Argument entgegen, um die Zeichenkodierung anzugeben. Es erlaubt jetzt lose prozentkodierte Zeichenketten, verweigert aber Semikolon-Trennungen. -
URI.encode_www_formfolgt dem aktuellen WHATWG URL Standard. Es nimmt ein `encoding`-Argument entgegen, um vor der Prozentkodierung zu konvertieren. UTF-16-Zeichenketten werden standardmäßig nicht vor der Prozentkodierung in UTF-8 konvertiert.
-
-
-
curses
-
Entfernt. curses ist jetzt als Gem verfügbar. Weitere Details finden Sie unter rubygems.org/gems/curses.
-
Kompatibilitätsprobleme mit integrierten globalen Variablen
-
$SAFE
-
$SAFE=4 ist veraltet. Wenn $SAFE auf 4 oder höher gesetzt ist, wird ein
ArgumentErrorausgelöst.
-
Updates der C-API
-
rb_gc_set_params() ist veraltet. Dies wird nur intern in Ruby verwendet.
-
rb_gc_count() hinzugefügt. Dies gibt die Anzahl der
GC-Ausführungen zurück. -
rb_gc_stat() hinzugefügt. Dies ermöglicht den Zugriff auf bestimmte
GC.stat()-Werte aus C ohne Overhead durch Allokation. -
rb_gc_latest_gc_info() hinzugefügt. Dies ermöglicht den Zugriff auf
GC.latest_gc_info(). -
rb_postponed_job_register() hinzugefügt. Nimmt eine Funktionsrückruffunktion entgegen, die aufgerufen wird, wenn die VM in einem konsistenten Zustand ist, d. h. um Arbeit von einem C-Signalhandler auszuführen.
-
rb_profile_frames() hinzugefügt. Bietet kostengünstigen Zugriff auf den aktuellen Ruby-Stack für Callstack-Profiling.
-
rb_tracepoint_new() unterstützt neue interne Ereignisse, die nur von C aus zugänglich sind.
-
RUBY_INTERNAL_EVENT_NEWOBJ
-
RUBY_INTERNAL_EVENT_FREEOBJ
-
RUBY_INTERNAL_EVENT_GC_START
-
RUBY_INTERNAL_EVENT_GC_END_MARK
-
RUBY_INTERNAL_EVENT_GC_END_SWEEP
-
Beachten Sie, dass Sie „interne Ereignisse“ *nicht* gleichzeitig mit normalen Ereignissen (wie RUBY_EVENT_CALL, RUBY_EVENT_RETURN) angeben können.
-