NEWS für Ruby 2.0.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 1.9.3-Version
Sprachänderungen
-
Schlüsselwortargumente hinzugefügt.
-
%i und %I zum Erstellen von Symbollisten hinzugefügt (ähnlich wie %w und %W).
-
Die Standard-Quellcodierung wurde auf UTF-8 geändert. (war US-ASCII)
-
Keine Warnung für unbenutzte Variablen, die mit „_“ beginnen
Aktualisierungen von Core-Klassen (nur die wichtigsten)
-
-
Methode hinzugefügt
-
ARGF#codepoints und
ARGF#each_codepointhinzugefügt, wie die entsprechenden Methoden fürIO.
-
-
-
-
Methode hinzugefügt
-
Array#bsearchfür binäre Suche hinzugefügt.
-
-
inkompatible Änderungen
-
Der Parameter random von
Array#shuffle!undArray#samplewird nun mit einem Argument aufgerufen, dem Maximalwert. -
Wenn
Range-Argumente übergeben werden, gibtArray#values_atnun nil für jeden Wert zurück, der außerhalb des Bereichs liegt.
-
-
-
-
Methode hinzugefügt
-
Enumerable#lazy-Methode für Lazy-Enumeration hinzugefügt.
-
-
-
-
Methode hinzugefügt
-
Enumerator#sizefür Lazy-Größenbewertung hinzugefügt.
-
-
erweiterte Methode
-
Enumerator.newakzeptiert ein Argument für die Lazy-Größenbewertung.
-
-
Neue Klasse
Enumerator::Lazyfür Lazy-Enumeration
-
-
-
Aliaste Methode
-
ENV.to_hist ein neues Alias fürENV.to_hash
-
-
-
-
inkompatible Änderungen
-
Fiber#resumekann keinen Fiber wiederaufnehmen, der „Fiber#transfer“ aufruft.
-
-
-
-
erweiterte Methode
-
File.fnmatch?erweitert nun Klammern im Muster, wenn die Option File::FNM_EXTGLOB angegeben ist.
-
-
-
-
Verbesserungen
-
Bit-Markierung eingeführt, die das Kopieren einer Speicherseite mit Copy-on-Write unterdrückt.
-
Nicht-rekursive Markierung eingeführt, die einen unerwarteten Stack-Überlauf vermeidet.
-
-
-
GC::Profiler
-
-
Methode hinzugefügt
-
Hash#to_hals explizite Konvertierungsmethode hinzugefügt, ähnlich wieArray#to_a.
-
-
erweiterte Methode
-
Hash#default_proc=kann nil übergeben werden, um den Standard-Proc zu löschen.
-
-
-
-
Veraltete Methoden
-
IO#lines, bytes, chars und codepoints sind veraltet.
-
-
-
-
Methode hinzugefügt
-
Konvertierungsmethode
Kernel#Hashhinzugefügt, ähnlich wie Array() oder Float(). -
Kernel#__dir__hinzugefügt, das den absoluten Pfad des Verzeichnisses der Datei zurückgibt, aus der diese Methode aufgerufen wird. -
Kernel#caller_locationshinzugefügt, das ein Array von Frame-Informations-Objekten zurückgibt.
-
-
erweiterte Methode
-
Kernel#warnakzeptiert mehrere Argumente ähnlich wie puts. -
Kernel#callerakzeptiert ein zweites optionales Argument „n“, das die erforderliche Aufrufergröße angibt. -
Kernel#to_enum und enum_for akzeptieren einen Block für die Lazy-Größenbewertung.
-
-
inkompatible Änderungen
-
system() und exec() schließen nicht standardmäßige Dateideskriptoren (Der Standardwert der Option :close_others wurde auf true geändert.)
-
respond_to? bei einer geschützten Methode gibt nun false zurück, es sei denn, das zweite Argument ist true.
-
__callee__ hat sein ursprüngliches Verhalten wiedererlangt und gibt nun den aufgerufenen Namen und nicht den ursprünglichen Namen in einer alias-Methode zurück.
-
Kernel#inspect ruft to_s nicht mehr auf (es rief früher neu definierte to_s auf).
-
-
-
-
Methode hinzugefügt
-
LoadError#path-Methode hinzugefügt, um den Dateinamen zurückzugeben, der nicht geladen werden konnte.
-
-
-
Module
-
Methode hinzugefügt
-
Module#prependhinzugefügt, wasModule#includeähnelt, jedoch überschreibt eine Methode im vorangestellten Modul die entsprechende Methode im vorangehenden Modul. -
Module.prependedundModule.prepend_featureshinzugefügt, ähnlich wie included und append_features. -
Module#refinehinzugefügt, die eine Klasse oder ein Modul lokal erweitert. [experimentell]
-
-
erweiterte Methode
-
Module#define_methodakzeptiert eineUnboundMethodaus einem Modul. -
Module#const_getakzeptiert einen qualifizierten Konstanten-String, z.B. Object.const_get(“Foo::Bar::Baz”)
-
-
-
Mutex
-
Methode hinzugefügt
-
Mutex#owned? hinzugefügt, das zurückgibt, ob der Mutex vom aktuellen Thread gehalten wird oder nicht. [experimentell]
-
-
inkompatible Änderungen
-
Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize und Mutex#sleep dürfen nicht mehr aus einem Trap-Handler verwendet werden und lösen in diesem Fall eine
ThreadErroraus. -
Mutex#sleep kann irrtümlich geweckt werden. Nach dem Aufwachen prüfen.
-
-
-
-
Methode hinzugefügt
-
nil.to_h hinzugefügt, das {} zurückgibt
-
-
-
-
Neue Low-Level-Klasse zur Speicherung von schwachen Referenzen auf Objekte.
-
-
-
Inkompatible Änderung
-
Proc#==und eql? entfernt, sodass zwei Procs nur dann == sind, wenn sie dasselbe Objekt sind.
-
-
-
Process
-
Methode hinzugefügt
-
getsid zum Abrufen der Sitzungs-ID hinzugefügt (nur Unix).
-
-
-
-
Methode hinzugefügt
-
Range#sizefür Lazy-Größenbewertung hinzugefügt. -
Range#bsearchfür binäre Suche hinzugefügt.
-
-
-
RubyVM(MRI-spezifisch)-
RubyVM::InstructionSequence.ofhinzugefügt, um die Instruktionssequenz von einer Methode oder einem Block zu erhalten. -
RubyVM::InstructionSequence#path, absolute_path, label, base_label und first_lineno hinzugefügt, um Informationen darüber abzurufen, woher die Instruktionssequenz definiert wurde. -
Umgebungsvariablen zum Festlegen der Stapelauslastung hinzugefügt
-
RUBY_THREAD_VM_STACK_SIZE: VM-Stapelgröße, die bei der Thread-Erstellung verwendet wird. Standard: 128KB (32bit CPU) oder 256KB (64bit CPU).
-
RUBY_THREAD_MACHINE_STACK_SIZE: Maschinenstapelgröße, die bei der Thread-Erstellung verwendet wird. Standard: 512KB oder 1024KB.
-
RUBY_FIBER_VM_STACK_SIZE: VM-Stapelgröße, die bei der Fiber-Erstellung verwendet wird. Standard: 64KB oder 128KB.
-
RUBY_FIBER_MACHINE_STACK_SIZE: Maschinenstapelgröße, die bei der Fiber-Erstellung verwendet wird. Standard: 256KB oder 512KB.
Diese Variablen werden nur zum Startzeitpunkt überprüft.
-
-
DEFAULT_PARAMS-Konstante hinzugefügt, um die obigen Standardparameter zu erhalten.
-
-
-
Methode hinzugefügt
-
Signal.signamehinzugefügt, das den Signalnamen zurückgibt
-
-
inkompatible Änderungen
-
Signal.traplöstArgumentErroraus, wenn :SEGV, :BUS, :ILL, :FPE, :VTALRM angegeben sind.
-
-
-
-
Methode hinzugefügt
-
String#bhinzugefügt, das eine kopierte Zeichenkette zurückgibt, deren Codierung ASCII-8BIT ist.
-
-
Rückgabewert geändert
-
String#linesgibt nun ein Array statt eines Enumerators zurück. -
String#charsgibt nun ein Array statt eines Enumerators zurück. -
String#codepointsgibt nun ein Array statt eines Enumerators zurück. -
String#bytesgibt nun ein Array statt eines Enumerators zurück.
-
-
-
-
Methode hinzugefügt
-
Struct#to_hhinzugefügt, das Werte mit Schlüsseln zurückgibt, die den Instanzvariablennamen entsprechen.
-
-
-
-
Methode hinzugefügt
-
Thread#thread_variable_gethinzugefügt, um Thread-lokale Variablen abzurufen (diese unterscheiden sich vonFiber-lokalen Variablen). -
Thread#thread_variable_sethinzugefügt, um Thread-lokale Variablen festzulegen. -
Thread#thread_variableshinzugefügt, um eine Liste der Schlüssel für Thread-lokale Variablen zu erhalten. -
Thread#thread_variable?hinzugefügt, um zu prüfen, ob eine bestimmte Thread-Variable gesetzt wurde. -
Thread.handle_interruptsowie Instanz- und Singleton-Methoden pending_interrupt? für asynchrone Ausnahmebehandlung hinzugefügt -
Thread#backtrace_locationshinzugefügt, das ähnliche Informationen wieKernel#caller_locationszurückgibt.
-
-
Neue Klasse
Thread::Backtrace::Locationzur Speicherung von Backtrace-Standortinformationen. Diese werden vonThread#backtrace_locationsundKernel#caller_locationszurückgegeben. -
inkompatible Änderungen
-
Thread#joinundThread#valuelösen nun eineThreadErroraus, wenn der Ziel-Thread der aktuelle oder Haupt-Thread ist.
-
-
-
-
Rückgabewert geändert
-
Time#to_sgibt nun US-ASCII-Codierung statt BINARY zurück.
-
-
-
-
Neue Klasse. Diese Klasse ersetzt set_trace_func. Einfache und effiziente Implementierung.
-
-
Toplevel
-
Methode hinzugefügt
-
main.define_method hinzugefügt, das eine globale Funktion definiert.
-
main.using hinzugefügt, das Verfeinerungen in die aktuelle Datei oder den Eval-String importiert. [experimentell]
-
-
Kompatibilitätsprobleme bei Kernklassen (ausschließlich Korrekturen von Feature-Bugs)
-
Siehe oben.
-
Diese Methoden geben nun kein
Enumeratormehr zurück, obwohl die Übergabe eines Blocks aus Gründen der Abwärtskompatibilität weiterhin unterstützt wird.Code wie str.lines.with_index(1) { |line, lineno| … } funktioniert nicht mehr, da str.lines ein Array zurückgibt. Ersetzen Sie lines in solchen Fällen durch each_line.
-
IO#lines
-
IO#chars
-
IO#codepoints
-
IO#bytes
-
ARGF#lines
-
ARGF#chars
-
ARGF#bytes
-
StringIO#lines
-
StringIO#chars
-
StringIO#codepoints
-
StringIO#bytes
-
Zlib::GzipReader#lines
-
Zlib::GzipReader#bytes
Diese Methoden sind zugunsten von each_line, each_byte, each_char und each_codepoint veraltet.
-
Diese Methoden wurden entfernt. Zwei Procs sind nur dann ==, wenn sie dasselbe Objekt sind.
-
Fixnum
-
Bignum
-
Fixnums, Bignums und Floats sind gefroren.
-
Siehe oben.
-
Onigmo zusammengeführt. github.com/k-takata/Onigmo
-
Die Option :close_others ist standardmäßig true für system() und exec(). Außerdem ist das close-on-exec-Flag standardmäßig für alle neuen Dateideskriptoren gesetzt. Das bedeutet, dass Dateideskriptoren nicht an den gestarteten Prozess vererbt werden, es sei denn, dies wird explizit angefordert, z. B. system(…, fd=>fd).
-
Kernel#respond_to? bei einer geschützten Methode gibt nun false zurück, es sei denn, das zweite Argument ist true.
-
Kernel#respond_to_missing?
-
Kernel#initialize_clone
-
Kernel#initialize_dup
Diese Methoden sind nun privat.
-
Siehe oben.
-
Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize und Mutex#sleep
Siehe oben.
Aktualisierungen von Stdlib (nur die wichtigsten)
-
cgi
-
HTML5-Tag-Ersteller hinzugefügt.
-
CGI#header wurde in CGI#http_header umbenannt und in CGI#header umbenannt.
-
Wenn der HTML5-Tag-Ersteller aufgerufen wird, überschreibt er CGI#header. Die Funktion CGI#header dient der Erstellung eines <header>-Elements.
-
-
CSV
-
CSV::dump und CSV::load entfernt, um Benutzer vor gefährlichen Serialisierungs-Schwachstellen zu schützen
-
-
iconv
-
Iconv wurde entfernt. Verwenden Sie stattdessen
String#encode.
-
-
io/console
-
neue Methoden
-
IO#cookedhinzugefügt, das das Terminal innerhalb des angegebenen Blocks in den Cooked-Modus versetzt. -
IO#cooked!hinzugefügt, das das Terminal in den Cooked-Modus versetzt.
-
-
erweiterte Methode
-
-
io/wait
-
Neue Funktionen
-
IO#wait_writable-Methode hinzugefügt. -
IO#wait_readable-Methode als Alias fürIO#waithinzugefügt.
-
-
-
json
-
Aktualisiert auf 1.7.7.
-
-
net/http
-
Neue Funktionen
-
Proxies werden nun automatisch aus der Umgebungsvariablen http_proxy erkannt. Details siehe
Net::HTTP::new. -
Gzip- und Deflate-Kompression werden nun standardmäßig für alle Anfragen angefordert. Details siehe
Net::HTTP. -
SSL-Sitzungen werden nun über Verbindungen für eine einzelne Instanz wiederverwendet. Dies beschleunigt die Verbindung durch die Verwendung einer zuvor ausgehandelten Sitzung.
-
Anfragen können von einem
URIerstellt werden, der request_uri und den Host-Header der Anfrage festlegt (aber nicht den verbundenen Host ändert). -
Antworten enthalten das angeforderte
URI, was eine einfachere Implementierung von Weiterleitungsfolgen ermöglicht.
-
-
neue Methoden
-
erweiterte Methode
-
Net::HTTP#connect verwendet local_host und local_port, falls angegeben.
-
-
-
net/imap
-
neue Methoden
-
Net::IMAP.default_port
-
Net::IMAP.default_imap_port
-
Net::IMAP.default_tls_port
-
Net::IMAP.default_ssl_port
-
Net::IMAP.default_imaps_port
-
-
-
objspace
-
neue Methode
-
-
openssl
-
Einheitliche Fehlerbehandlung beim Versuch, nil-Werte zu kodieren. Alle Instanzen von
OpenSSL::ASN1::Primitivelösen nunTypeErroraus, wenn to_der auf einer Instanz mit nil-Wert aufgerufen wird. Alle Instanzen vonOpenSSL::ASN1::Constructivelösen in demselben FallNoMethodErroraus. Die Erstellung solcher Werte ist weiterhin gestattet. -
TLS 1.1 & 1.2-Unterstützung durch Setzen von OpenSSL::SSL::SSLContext#ssl_version auf :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client oder :TLSv1_1, :TLSv1_1_server :TLSv1_1_client. Die tatsächlich verwendete Version kann mit OpenSSL::SSL#ssl_version abgefragt werden. Darüber hinaus ist es möglich, die neuen TLS-Versionen mit OpenSSL::SSL::OP_NO_TLSv1_1 und OpenSSL::SSL::OP_NO_TLSv1_2 zu blockieren.
-
Hinzugefügt:
OpenSSL::SSL::SSLContext#renegotiation_cb. Ein benutzerdefinierter Callback kann gesetzt werden, der aufgerufen wird, wenn ein neuer Handshake ausgehandelt wird. Dies ermöglicht auch, Client-Neuaushandlungsversuche programmatisch abzulehnen. -
Unterstützung für „0/n“-Aufteilung von Datensätzen als BEAST-Abwehr über OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS.
-
Die Standardoptionen für
OpenSSL::SSL::SSLContextwurden von OpenSSL::SSL::OP_ALL zu OpenSSL::SSL::OP_ALL & ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS geändert. Dies aktiviert die Gegenmaßnahme für den BEAST-Angriff standardmäßig. -
OpenSSLerfordert für die Entschlüsselung von PEM-kodierten Dateien Passwörter mit mindestens vier Zeichen Länge. Dies führte zu unangenehmen Situationen, in denen eine Exporte mit einem Passwort von weniger als vier Zeichen möglich war, der Zugriff auf die Datei jedoch danach fehlschlug.OpenSSL::PKey::RSA,OpenSSL::PKey::DSAundOpenSSL::PKey::ECerzwingen daher nun dieselbe Prüfung beim Exportieren eines privaten Schlüssels nach PEM mit einem Passwort – es muss mindestens vier Zeichen lang sein. -
SSL/TLS-Unterstützung für die Next Protocol Negotiation-Erweiterung. Unterstützt mit
OpenSSL1.0.1 und höher. -
OpenSSL::OPENSSL_FIPS ermöglicht es Client-Anwendungen zu erkennen, ob
OpenSSLFIPS-aktiviert ist.OpenSSL.fips_mode=ermöglicht das manuelle Ein- und Ausschalten des FIPS-Modus, um sich an Situationen anzupassen, in denen der FIPS-Modus eine explizite Anforderung wäre. -
Authenticated Encryption with Associated
Data(AEAD) wird über Cipher#auth_data= und Cipher#auth_tag/Cipher#auth_tag= unterstützt. Derzeit (StandOpenSSL1.0.1c) wird nur der GCM-Modus unterstützt.
-
-
ostruct
-
neue Methoden
-
OpenStruct#[], []=
-
OpenStruct#each_pair
-
OpenStruct#to_h konvertiert die Struktur in einen Hash.
-
-
erweiterte Methode
-
OpenStruct.newakzeptiert auch eineOpenStruct/Struct.
-
-
-
Pfadname
-
erweiterte Methode
-
Pathname#findgibt einen Enumerator zurück, wenn kein Block angegeben ist.
-
-
-
rake
-
rake wurde auf Version 0.9.5 aktualisiert.
Diese Version ist abwärtskompatibel mit früheren rake-Versionen und enthält viele Fehlerbehebungen.
Siehe rake.rubyforge.org/doc/release_notes/rake-0_9_5_rdoc.html für eine Liste der Änderungen in rake 0.9.3, 0.9.4 und 0.9.5.
-
-
RDoc
-
RDoc wurde auf Version 4.0 aktualisiert
Diese Version ist weitgehend abwärtskompatibel mit früheren RDoc-Versionen. Die bemerkenswerteste Änderung ist ein Update des ri-Datenformats (ri-Daten müssen für Gems, die zwischen RDoc-Versionen geteilt werden, neu generiert werden). Weitere API-Änderungen sind intern und beeinträchtigen die meisten Benutzer nicht.
Bemerkenswerte Änderungen umfassen
-
Seitenunterstützung für ri. Versuchen Sie „ri ruby:` für eine Liste von Seiten in Ruby oder `ri ruby:syntax/literals` für die Syntaxdokumentation für Literale.
Dies funktioniert auch für Gems wie „ri rspec:README` für die README-Datei des rspec-Gems.
-
Markdown-Unterstützung. Siehe ri RDoc::Markdown für Details.
Eine vollständige Liste der Änderungen in rdoc 4.0 finden Sie unter github.com/rdoc/rdoc/blob/master/History.rdoc.
-
-
-
resolv
-
neue Methoden
-
Resolv::DNS::Config#timeouts=
-
-
rexml
-
REXML::Document#write unterstützt
Hash-Argumente. -
REXML::Document#write unterstützt die neue Option :encoding. Sie ändert die Kodierung des XML-Dokuments. Ohne die Option :encoding wird die Kodierung in der XML-Deklaration für die Kodierung des XML-Dokuments verwendet.
-
-
RubyGems
-
Aktualisiert auf 2.0.0
RubyGems 2.0.0 bietet die folgenden Verbesserungen
-
Verbesserte Unterstützung für Standard-Gems, die mit Ruby 2.0.0+ ausgeliefert werden.
-
Ein Gem kann beliebige Metadaten über
Gem::Specification#metadatahaben. -
‘gem search` ist nun standardmäßig –remote und wie gem list verankert.
-
–document hinzugefügt, um –rdoc und –ri zu ersetzen. Verwenden Sie –no-document, um die Dokumentation zu deaktivieren, –document=rdoc, um nur rdoc zu generieren.
-
Standardmäßig wird nur ri-formatierte Dokumentation generiert.
-
‘gem server` verwendet RDoc::Servlet aus RDoc 4.0, um HTML-Dokumentation zu generieren.
Eine erweiterte Liste der Updates und Fehlerbehebungen finden Sie unter: github.com/rubygems/rubygems/blob/master/History.txt
-
-
-
shellwords
-
Shellwords#shellescapestringifiziert nun das gegebene Objekt mithilfe von to_s. -
Shellwords#shelljoinakzeptiert Nicht-String-Objekte im gegebenen Array, von denen jedes mit to_s stringifiziert wird.
-
-
stringio
-
Veraltete Methoden
-
StringIO#lines, bytes, chars und codepoints sind veraltet.
-
-
-
syslog
-
Syslog::Logger hinzugefügt, das eine Logger-API über Syslog bereitstellt.
-
Syslog::Priority, Syslog::Level, Syslog::Option und Syslog::Macros werden eingeführt, um verfügbare Konstanten auf einem laufenden System leicht zu erkennen.
-
-
tmpdir
-
inkompatible Änderungen
-
Dir.mktmpdirverwendetFileUtils.remove_entryanstelle vonFileUtils.remove_entry_secure. Das bedeutet, dass Anwendungen die Berechtigungen des erstellten temporären Verzeichnisses nicht ändern sollten, um es für andere Benutzer beschreibbar zu machen.
-
-
-
yaml
-
Syck wurde entfernt.
YAMLhängt nun vollständig davon ab, dass libyaml installiert ist. -
libyaml ist nun mit Ruby gebündelt, für Fälle, in denen die Bibliothek nicht lokal installiert ist.
-
-
zlib
-
Streaming-Unterstützung für
Zlib::InflateundZlib::Deflatehinzugefügt. Dies ermöglicht die Verarbeitung eines Streams, ohne große Mengen an Speicher zu verwenden. -
Unterstützung für die neuen Deflate-Strategien Zlib::RLE und Zlib::FIXED hinzugefügt.
-
Zlib-Streams werden nun ohne GVL verarbeitet. Dies ermöglicht die parallele Verarbeitung von Gzip-, Zlib- und Deflate-Streams. -
Veraltete Methoden
-
Zlib::GzipReader#lines und bytes sind veraltet.
-
-
Kompatibilitätsprobleme mit Stdlib (ausgenommen Fehlerbehebungen von Features)
-
Neue Methoden von
OpenStructkönnen mit benutzerdefinierten Attributen namens „each_pair“, „eql?“, „hash“ oder „to_h“ kollidieren. -
Siehe oben.
Updates der C-API
-
NUM2SHORT() und NUM2USHORT() hinzugefügt. Sie ähneln NUM2INT, sind aber kurz.
-
rb_newobj_of() und NEWOBJ_OF() hinzugefügt. Sie erstellen ein neues Objekt einer gegebenen Klasse.