NEWS für Ruby 1.8.7
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 1.8.6-Version
Konfigurationsänderungen
-
Standard-C-Flags
Einige C-Compiler-Flags können standardmäßig hinzugefügt werden, abhängig von Ihrer Umgebung. Geben Sie bei Bedarf optflags=.. und warnflags=.. an, um sie zu überschreiben.
-
vendor_ruby-Verzeichnis
Zusätzlich zu ‘site_ruby’ wird ein neues Bibliotheksverzeichnis namens ‘vendor_ruby’ eingeführt. Die Idee ist, vom Paketmanager installierte Bibliotheken (‘vendor’) von manuell installierten Bibliotheken (‘site’) zu trennen, um zu verhindern, dass die ersteren von letzteren überschrieben werden, während die Benutzeroption erhalten bleibt, Vendor-Bibliotheken mit Site-Bibliotheken zu überschreiben. (‘site_ruby’ hat Vorrang vor ‘vendor_ruby’)
Wenn Sie ein Paketbetreuer sind, konfigurieren Sie jedes Paket so, dass die Bibliothek beim Konfigurieren der Bibliothek die Option ‘–vendor’ an ‘extconf.rb’ übergeben wird, damit die Bibliotheksdateien unter ‘vendor_ruby’ installiert werden.
Sie können die Verzeichnispfade mit Konfigurationsoptionen wie ‘–with-sitedir=DIR’ und ‘–with-vendordir=DIR’ ändern.
Globale Konstanten
-
neue Konstanten
-
RUBY_COPYRIGHT
-
RUBY_DESCRIPTION
-
Bibliotheksaktualisierungen (nur herausragende)
-
neue Bibliothek
-
securerandom
-
-
eingebaute Klassen
-
Nimmt ein optionales Argument, das die Rekursionstiefe für das Abflachen bestimmt.
-
Behandelt rekursive Daten korrekt.
-
Verwendet einen gegebenen Block, wenn kein Argument übergeben wird.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
Beachten Sie, dass map und collect im Gegensatz zu Ruby 1.9 immer noch ein Array zurückgeben, um die Kompatibilität zu gewährleisten.
-
Nimmt ein optionales Argument, das die Anzahl der zu entfernenden Elemente angibt.
-
Array#choice
-
Neue Methoden.
-
Neue Methode.
-
Dir#foreach
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Neue Klasse für verschiedene Aufzählungen, die von der Enumerator-Bibliothek definiert werden.
-
Neue Methoden für verschiedene Aufzählungen, die von der Enumerator-Bibliothek definiert werden.
-
Neue Methoden.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
Beachten Sie, dass map und collect im Gegensatz zu Ruby 1.9 immer noch ein Array zurückgeben, um die Kompatibilität zu gewährleisten.
-
Akzeptiert einen binären Operator anstelle eines Blocks.
-
Neues Alias für inject.
-
Kann optionale Argumente entgegennehmen und an each weiterleiten.
-
Behandelt rekursive Daten korrekt.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Neue Methoden.
-
Neue Methoden.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
IO#bytes
-
IO#chars
-
IO#lines
-
ARGF.bytes
-
ARGF.chars
-
ARGF.lines
-
Neue Methoden.
-
Neue Methoden.
-
Neue Methoden.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Neue Methoden.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Process.execimplementiert. -
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Regexp.unionakzeptiert ein Array von Mustern. -
Neue Methode
-
Neue Methode, die die Größe in Bytes zurückgibt. (Alias für length und size)
-
Neue Methoden. Diese berücksichtigen $KCODE im Gegensatz zu index, rindex und include?.
-
String#each
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Ein optionales zweites Argument wird hinzugefügt, um anzugeben, ob der letzte Wert enthalten sein soll.
-
Neue Ausnahme-Klasse, die dazu führt, dass
Kernel#loopdie Iteration stoppt, wenn sie ausgelöst wird. -
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
Neue Methode.
-
__method__
Neue globale Funktion, die den Namen der aktuellen Methode als
Symbolzurückgibt.
-
enumerator
-
Enumeratorist jetzt ein integriertes Modul. Die Methoden next und rewind werden mit der „generator“-Bibliothek implementiert. Mit Vorsicht verwenden und auf den Leistungsverlust achten.
-
-
ipaddr
-
Neue Methoden
-
Unterstützung für Typkonvertierung
-
Diese Methoden akzeptieren jetzt eine Zeichenkette oder eine Ganzzahl anstelle eines
IPAddr-Objekts als Argument.
-
-
net/smtp
-
Unterstützung für SSL/TLS.
-
-
openssl
-
Neue Klassen
-
OpenSSL::PKey::PKCS5
-
Dokumentation!
-
Verschiedene neue Methoden (siehe Dokumentation).
-
Entfernen redundanter Modul-Namensräume in Cipher,
Digest, PKCS7, PKCS12. Kompatibilitätsklassen werden bereitgestellt, die in Ruby 1.9 entfernt werden.
-
-
shellwords
-
Hinzufügen von Methoden zum Maskieren von Shell-unsicheren Zeichen
-
Hinzufügen von Kurzmethoden
-
Shellwords.split(Alias shellwords)
-
-
-
stringio
-
StringIO#readbyte
Neue Methoden. (Aliase zur Kompatibilität mit 1.9)
-
StringIO#chars
Neue Methoden.
-
Gibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
tempfile
-
Tempfile.openundTempfile.newakzeptieren jetzt ein Suffix für die zu erstellende temporäre Datei. Um ein Suffix anzugeben, übergeben Sie ein Array aus [Basisname, Suffix] als erstes Argument.Tempfile.open(['image', 'jpg']) { |tempfile| ... }
-
-
tmpdir
-
Neue Methode
-
-
uri
-
LDAPS-Schema hinzugefügt.
-
Änderung für RFC3986
-
FTP
-
URI(‘example.com/foo’).path #=> ‘foo’
-
URI(‘example.com/%2Ffoo’).path #=> ‘/foo’
-
URI::FTP.build([nil, ‘example.com’, nil, ‘/foo’, ‘i’]).to_s #=> ‘example.com/%2Ffoo;type=i’
-
-
URImerge-
URI(‘a/b/c/d;p?q’).merge(‘?y’) == URI(‘a/b/c/d;p?y’)
-
URI(‘a/b/c/d;p?q’).merge(‘/./g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘/../g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘../../../g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘../../../../g’) == URI(‘a/g’)
-
-
-
-
rss
-
0.1.6 -> 0.2.4
-
Bildmodul
URIkorrigiert -
Atom-Unterstützung
-
Unterstützung für das iTunes-Modul
-
Unterstützung für das Slash-Modul
-
content:encoded mit RSS 2.0-Unterstützung
-
Interpreter-Implementierung
-
Übergabe eines Blocks an ein
Proc[experimentell]Diese Implementierung in ihrer jetzigen Form ist bekanntermaßen fehlerhaft/beschädigt, insbesondere bei verschachtelten Blockaufrufen. Betrachten Sie dies als experimentelles Feature.
-
Stacktrace
Bei anderen Ausnahmen als SystemStackError wird der vollständige Stacktrace angezeigt.
Kompatibilitätsprobleme (ausgenommen Feature-Fehlerbehebungen)
-
String#slice!hatte einige unbeabsichtigte Fehler, die behoben wurden, da sie entweder nicht mit der Dokumentation oder dem jeweiligen Verhalten von slice übereinstimmten. Leider führt dies in den folgenden (eher seltenen) Fällen zu Inkompatibilitäten.-
slice! erweitert das Array nicht mehr, wenn ein Wert außerhalb der Grenzen angegeben wird.
# Ruby 1.8.6 a = [1,2] a.slice!(4,0) #=> nil a #=> [1,2,nil,nil] # Ruby 1.8.7 a = [1,2] a.slice!(4,0) #=> nil a #=> [1,2]
-
slice! löst keine Ausnahme mehr aus, sondern gibt nil zurück, wenn eine negative Länge oder eine negative Position außerhalb der Grenzen angegeben wird.
# Ruby 1.8.6 a = [1,2] a.slice!(1,-1) #=> (raises IndexError) a.slice!(-5,1) #=> (raises IndexError) # Ruby 1.8.7 a = [1,2] a.slice!(1,-1) #=> nil a.slice!(-5,1) #=> nil
-
-
String#to_i,String#hexundString#octakzeptieren keine Sequenz von Unterstrichen (‘__’) mehr als Teil einer Zahl.# Ruby 1.8.6 '1__0'.to_i #=> 10 '1__0'.to_i(2) #=> 2 # 0b10 '1__0'.oct #=> 8 # 010 '1__0'.hex #=> 16 # 0x10 # Ruby 1.8.7 '1__0'.to_i #=> 1 '1__0'.to_i(2) #=> 1 '1__0'.oct #=> 1 '1__0'.hex #=> 1
Das alte Verhalten stimmte nicht mit der Ruby-Syntax überein und wurde als Fehler betrachtet.
-
date
-
‘##.##.##’ (wobei jedes ‘#’ eine Ziffer ist) wird jetzt als ‘YY.MM.DD’ statt ‘MM.DD.YY’ interpretiert. Obwohl die Änderung Sie verwirren mag, können Sie immer
Date.strptime()verwenden, wenn Sie wissen, was Sie tun.
-
-
REXML
-
REXML::Document.entity_expansion_limit=
Neue Methode zum Festlegen des Entitätserweiterungslimits. Standardmäßig ist das Limit auf 10000 gesetzt. Weitere Details finden Sie unter der folgenden URL.
www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/
-
-
stringio
-
Der Rückgabewert hat sich von nil zu self geändert. Dies entspricht der Dokumentation und dem Verhalten von each_line().
-
-
tempfile
-
Das Dateiformat hat sich geändert. Standardmäßig werden keine Punkte mehr in temporären Dateinamen aufgenommen. Siehe oben, wie Sie ein Suffix angeben können.
-
-
uri
-
Siehe oben für Details.
-
Änderungen seit der 1.8.5-Version
Unterstützung für neue Plattformen/Build-Tools
-
IA64 HP-UX
-
Visual C++ 8 SP1
-
autoconf 2.6x
Globale Konstanten
-
RUBY_PATCHLEVEL
Neue Konstante seit 1.8.5-p1.
Bibliotheksaktualisierungen (nur herausragende)
-
eingebaute Klassen
-
Neue Methode: Kernel#instance_variable_defined?
-
Neue Methode:
Module#class_variable_defined? -
Neues Feature:
Dir::glob()kann jetzt ein Array von Glob-Mustern entgegennehmen.
-
-
date
-
Aktualisiert basierend auf date2 4.0.3.
-
-
digest
-
Neue interne APIs für C und Ruby.
-
Unterstützung für Autoloading.
require 'digest' # autoloads digest/md5 md = Digest::MD5.digest("string")
-
Neue Digest-Klassenmethoden: file
-
Neue Digest-Instanzmethoden: clone, reset, new, inspect, digest_length (Alias size oder length), block_length()
-
Neue Bibliothek: digest/bubblebabble
-
Neue Funktion: Digest(name)
-
-
fileutils
-
Neue Option für
FileUtils.cp_r(): :remove_destination
-
-
nkf
-
Aktualisiert basierend auf nkf vom 28.01.2007.
-
-
thread
-
Ersetzt durch eine viel schnellere Mutex-Implementierung in C. Die frühere Implementierung, die langsam, aber als stabil gilt, ist mit der Konfigurationsoption ‘–disable-fastthread’ verfügbar.
-
-
tk
-
Unterstützung für die Tile-Erweiterung basierend auf Tile 0.7.8 aktualisiert.
-
Unterstützung der Konfigurationsoption –without-X11 für Nicht-X11-Versionen von Tcl/Tk (z. B. Tcl/Tk Aqua).
-
Neues Beispielskript: irbtkw.rbw – IRB auf Ruby/Tk. Es hat keine Probleme mit blockierendem STDIN unter Windows.
-
-
webrick
-
Neue Methode: WEBrick::Cookie.parse_set_cookies()
-
Kompatibilitätsprobleme (ausgenommen Feature-Fehlerbehebungen)
-
eingebaute Klassen
-
String#internlöst jetztSecurityErroraus, wenn das $SAFE-Level größer als null ist.
-
-
date
-
Time#to_dateundTime#to_datetimewerden als private Methoden hinzugefügt. Sie verursachen einen Namenskonfliktfehler in ActiveSupport 1.4.1 und früheren Versionen, die mit Rails 1.2.2 und früheren Versionen geliefert werden. Die Aktualisierung von ActiveSupport und/oder Rails auf die neuesten Versionen behebt das Problem.
-
-
digest
-
Der Konstruktor nimmt keine anfängliche Zeichenkette mehr entgegen, um sie zu füttern. Die folgenden Beispiele zeigen, wie migriert wird
# Before md = Digest::MD5.new("string") # After (works with any version) md = Digest::MD5.new.update("string") # Before hd = Digest::MD5.new("string").hexdigest # After (works with any version) hd = Digest::MD5.hexdigest("string")
-
-
self == string
Die automatische Erkennung zwischen binären Digest-Werten und hexadezimalen Digest-Werten wurde eingestellt. Es wird immer davon ausgegangen, dass für den Vergleich ein hexadezimaler Digest-Wert angegeben wird.
-
self == md
Digest-Objekte werden anhand der resultierenden Digest-Werte verglichen, nicht anhand der exakten Vektorzustände.
-
-
-
fileutils
-
Eine geringfügige Implementierungsänderung bricht Rake <=0.7.1. Die Aktualisierung von Rake auf 0.7.2 oder höher behebt das Problem.
-
-
tk
-
Tk::X_Scrollable (Y_Scrollable) wird in Tk::XScrollable (YScrollable) umbenannt. Tk::X_Scrollable (Y_Scrollable) ist weiterhin verfügbar, aber es ist ein Alias-Name.
-