NEWS for Ruby 2.1.0¶ ↑
這份文件列出版本間可見的使用者功能變更,但排除錯誤修正。
請注意,每筆條目都簡短到沒有提供背後原因或參考資訊。如需包含所有足夠資訊的完整變更清單,請參閱 ChangeLog 檔案。
自 2.0.0 版本發布以來的變更¶ ↑
語言變更¶ ↑
-
現在關鍵字參數的預設值可以省略。這些「必要的關鍵字參數」需要在呼叫時明確提供。
-
新增整數和浮點數字面值的後綴:『r』、『i』和『ri』。
-
「42r」和「3.14r」分別會評估為 Rational(42, 1) 和 3.14.rationalize。但帶有『r』後綴的指數形式,例如「6.022e+23r」,則不會被接受,因為這會造成誤導。
-
「42i」和「3.14i」分別會評估為 Complex(0, 42) 和 Complex(0, 3.14)。
-
「42ri」和「3.14ri」分別會評估為 Complex(0, 42r) 和 Complex(0, 3.14r)。
-
-
def-expr 現在會傳回其名稱的符號,而非 nil。
核心類別更新(僅限傑出的更新)¶ ↑
-
-
新增方法
-
Array#to_h
會將一組鍵值對陣列轉換為Hash
。
-
-
-
-
新增方法
-
Enumerable#to_h
會將一組鍵值對清單轉換為Hash
。
-
-
-
-
新增方法
-
Exception#cause
會提供先前已在引發新例外狀況處捕獲的例外狀況。
-
-
-
-
改善
-
引進世代式
GC
,又稱 RGenGC。
-
-
新增環境變數
-
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
-
-
已過時的環境變數
-
RUBY_FREE_MIN(請改用 RUBY_GC_HEAP_FREE_SLOTS)
-
RUBY_HEAP_MIN_SLOTS(請改用 RUBY_GC_HEAP_INIT_SLOTS)
-
-
-
-
新增方法
-
Fixnum#bit_length
-
Bignum#bit_length
-
-
Bignum 效能改善
-
如果可用,請使用 GMP。GMP 僅用於數個運算:乘法、除法、基數轉換、最大公因數
-
-
-
-
延伸方法
-
IO#seek
支援 SEEK_DATA 和 SEEK_HOLE 作為 whence。 -
IO#seek
接受符號(:CUR、:END、:SET、:DATA、:HOLE)作為第 2 個引數。 -
IO#read_nonblock
接受選用的『exception: false』來傳回符號 -
IO#write_nonblock
接受任意的「exception: false」來回傳符號
-
-
-
-
新增方法
-
核心#singleton_method
-
-
-
-
新增方法
-
Module#using
,它只在目前類別或模組定義中啟用指定模組的改良。 -
Module#singleton_class?
如果接收者是單例類別,則回傳 true;如果是普通類別或模組,則回傳 false。
-
-
延伸方法
-
Module#refine
不再是實驗性質。 -
Module#include
和Module#prepend
現在是公開方法。
-
-
-
互斥鎖
-
雜項
-
Mutex#owned? 不再是實驗性質。
-
-
-
-
延伸方法
-
Numeric#step
允許省略 limit 參數,這樣會產生一個無限數字序列。為了易於使用,引入了關鍵字參數「to」和「by」。「by」可以是 0,這樣會無限期地產生相同的值。
-
-
-
-
新增方法
-
替代 $0/$0= 的方法
-
Process.argv0()
回傳 $0 的原始值。 -
Process.setproctitle()
設定處理程序標題,而不影響 $0。
-
-
-
-
-
“literal”.freeze 現在經過最佳化,會回傳同一個物件
-
新增方法
-
String#scrub
和String#scrub!
驗證並修復無效的位元組序列。如果您想在較舊的 Ruby 中使用這個函式,請考慮使用 string-scrub.gem。
-
-
-
-
現在所有符號都是凍結的。
-
-
封裝/解封裝(陣列/字串)
-
如果平台有此類型,則 Q! 和 q! 指令用於 long long 類型。
-
-
頂層
-
延伸方法
-
main.using 不再是實驗性質。此方法會啟用參數模組祖先中的改良,以支援
Module#include
的改良繼承。
-
-
核心類別相容性問題(不包含功能錯誤修復)¶ ↑
-
-
不相容的變更
-
Hash#reject
將在未來版本回傳純粹的Hash
物件,也就是說原始物件的子類別、實例變數、預設值和污染狀態將不再被複製,因此現在呼叫此類Hash
時會發出警告。
-
-
-
-
不相容的變更
-
開啟忽略內部編碼,如果外部編碼是 ASCII-8BIT。
-
-
-
Kernel#eval
、Kernel#instance_eval 和Module#module_eval
。-
複製原始環境的範圍資訊,表示私有、受保護、公開和沒有參數的 module_function 都不會影響 eval 字串外部的環境。例如,‘class Foo; eval “private”; def foo; end; end’ 不會讓 Foo#foo 變成私有的。
-
-
Kernel#untrusted?、untrust 和 trust
-
這些方法已過時,且其行為分別與 tainted?、taint 和 untaint 相同。如果 $VERBOSE 為 true,它們會顯示警告。
-
-
-
單例類別的祖先現在包含單例類別,特別是它本身。
-
-
Module#define_method
和Object#define_singleton_method
-
現在它們會回傳已定義方法的符號,而不是方法/程序本身。
-
-
-
如果接收者沒有 to_r 方法,則會引發
TypeError
,而不是ArgumentError
。
-
-
-
現在從 lambda 程序回傳始終會退出
Proc
,而不是建立 lambda 的方法。從非 lambda 程序回傳會退出方法,與之前的行為相同。
-
* If invalid: :replace is specified for String#encode, replace invalid byte sequence even if the destination encoding equals to the source encoding.
標準函式庫更新(僅限未完成的更新)¶ ↑
-
-
所有類別方法模組化。
-
-
-
延伸方法
-
Digest::Class.file
為其建構函式採用選用參數
-
-
-
Matrix
-
新增 Vector#cross_product。
-
-
Net::SMTP
-
新增 Net::SMTP#rset 來實作 RSET 指令
-
-
objspace
-
新方法
-
-
-
延伸方法
-
OpenSSL::BN.new
允許 Fixnum/Bignum 參數。
-
-
-
open-uri
-
支援具有相同欄位名稱的多個欄位(例如 Set-Cookie)。
-
-
rake
-
更新至 10.1.0。主要變更包括移除類別命名空間、Rake::DSL 用於保存 rake DSL 方法,以及移除對舊版 rake 功能的支援。
如需自 rake 0.9.6 以來的完整變更清單,請參閱
-
-
-
新增常數
-
新增 RbConfig::SIZEOF 以提供 C 類型的尺寸。
-
-
-
-
更新至 4.1.0。主要強化功能包括修改預設範本
-
以及無障礙功能強化。
如需次要強化功能和錯誤修正清單,請參閱:github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
-
-
-
新增方法
-
一次性多播 DNS 支援
-
支援 LOC 資源
-
-
REXML::Parsers::SAX2Parser
-
修正 entitydecl 事件的參數數量錯誤。事件的文件說明「實體宣告的陣列」,但實作傳遞兩個以上的參數。這是一個實作錯誤,但會破壞向後相容性。
-
-
REXML::Parsers::StreamParser
-
支援「實體」事件。
-
-
REXML::Text
-
REXML::Text#<< 支援方法鏈,例如「text << “XXX” << “YYY”」。
-
REXML::Text#<< 不支援「原始」模式。
-
-
Rinda::RingServer
、Rinda::RingFinger
-
Rinda
現在支援多播通訊端。如需詳細資訊,請參閱Rinda::RingServer
和Rinda::RingFinger
。
-
-
RubyGems
-
更新至 2.2.0。顯著的新功能包括
-
Gemfile 或 gem.deps.rb 支援,包括 Gem.file.lock(實驗性質)
-
改良的迭代解析器(與 RubyGems 2.1 及更早版本相比)
-
支援跨 Ruby 平台和版本共用 GEM_HOME
如需完整強化功能和錯誤修正清單,請參閱:github.com/rubygems/rubygems/tree/master/History.txt
-
-
-
-
新增方法
-
-
-
延伸方法
-
StringScanner#[]
支援命名擷取。
-
-
-
-
新增功能。
-
-
-
新增方法
-
-
-
預設情況下,除非明確給定例外類別,否則無法在區塊內救援終止給定區塊的例外。
-
-
WEBrick
-
回應主體現在可以是
StringIO
或其他類似 IO 的,回應 readpartial 和 read。
-
-
XMLRPC::Client
-
新增方法
-
XMLRPC::Client#http。它會傳回
Net::HTTP
給客戶端。通常不需要。當您想變更次要 HTTP 客戶端選項時,這很有用。您可以使用 XMLRPC::Client 方法變更主要 HTTP 客戶端選項。您應該使用 XMLRPC::Client 方法變更主要 HTTP 客戶端選項,而不是 XMLRPC::Client#http。
-
-
標準函式庫相容性問題(不包括功能錯誤修正)¶ ↑
-
-
不相容的變更
-
Set#to_set
現在會傳回自身,而不是產生副本。
-
-
-
-
不相容的變更
-
URI.decode_www_form
遵循目前的 WHATWG URL 標準。它取得編碼引數來指定字元編碼。它現在允許鬆散百分比編碼字串,但拒絕 ;-分隔符號。 -
URI.encode_www_form
遵循目前的 WHATWG URL 標準。它取得編碼引數在百分比編碼之前轉換。預設情況下,UTF-16 字串不會在百分比編碼之前轉換為 UTF-8。
-
-
-
curses
-
已移除。curses 現在可用作 gem。有關詳細資訊,請參閱 rubygems.org/gems/curses。
-
內建全域變數相容性問題¶ ↑
-
$SAFE
-
$SAFE=4 已過時。如果 $SAFE 設為 4 或更大,則會引發
ArgumentError
。
-
C API 更新¶ ↑
-
rb_gc_set_params() 已棄用。這僅用於 Ruby 內部。
-
新增 rb_gc_count()。這會傳回
GC
發生次數。 -
新增 rb_gc_stat()。這允許從 C 存取特定的
GC.stat()
值,而不會產生任何配置開銷。 -
新增 rb_gc_latest_gc_info()。這允許存取
GC.latest_gc_info()
。 -
新增 rb_postponed_job_register()。採用函式回呼,在 VM 處於一致狀態時呼叫,例如從 C 訊號處理常式執行工作。
-
新增 rb_profile_frames()。提供低成本存取呼叫堆疊剖析的目前 ruby 堆疊。
-
rb_tracepoint_new() 支援僅能從 C 存取的新內部事件
-
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
-
請注意,您*無法*同時指定「內部事件」和一般事件(例如 RUBY_EVENT_CALL、RUBY_EVENT_RETURN)。
-