NEWS for Ruby 2.2.0¶ ↑
此文件列出版本間進行的使用者可見功能變更,但不包含錯誤修正。
請注意,每個條目都簡短到沒有提供背後的原因或參考資訊。若要取得包含所有足夠資訊的變更清單,請參閱變更記錄檔。
自 2.1.0 發行以來的變更¶ ↑
語言變更¶ ↑
-
nil/true/false
-
nil/true/false 物件已凍結。[功能 #8923]
-
-
Hash
文字-
Symbol
鍵值後接冒號可以加上引號。[功能 #4276]
-
-
預設引數修正了一個非常久遠的錯誤,即在預設值表達式中無法存取選擇性引數。[錯誤 #9593]
核心類別更新(僅限未完成的更新)¶ ↑
-
-
新增方法
-
-
-
新增方法
-
延伸方法
-
min、min_by、max 和 max_by 支援選擇性引數以傳回多個元素。
-
-
-
-
新增方法
-
-
-
GC.latest_gc_info
傳回 :state 以表示目前的GC
狀態。 -
改善
-
為主要
GC
引入增量標記。[功能 #10137]
-
-
-
-
改善
-
IO#read_nonblock
和IO#write_nonblock
支援 Windows 上的管線。
-
-
-
-
新增方法
-
Kernel#itself
-
-
改善
-
Kernel#throw
在沒有對應 catch 區塊時,會引發UncaughtThrowError
(ArgumentError
的子類別),而不是ArgumentError
。
-
-
-
-
延伸方法
-
Process
執行方法(例如Process.spawn
)會以寫入模式開啟檔案,以從 [:out, :err] 重新導向。
-
-
-
-
改善
-
大部分由
String#to_sym
和String#intern
傳回的符號都可進行 GC。
-
-
-
-
新增方法
-
Method#curry
([ arity ]) 傳回一個已封裝的Proc
。 -
Method#super_method
傳回超類別的Method
,在使用 super 時會呼叫該方法。
-
-
核心類別相容性問題(不含功能錯誤修正)¶ ↑
-
-
Enumerable#slice_before
的狀態管理已過時。 -
Enumerable#chunk
的狀態管理已過時。
-
-
-
不兼容的變更
-
-
-
不兼容的變更
-
變更重複金鑰的覆寫政策。[錯誤 #10315] { **hash1, **hash2 } 包含重複金鑰的 hash2 值。
-
-
-
-
不兼容的變更
-
如果底數小於 0,
Math.log
現在會引發Math::DomainError
,而不是傳回 NaN;如果兩個參數都是 0,它會傳回 NaN,而不是 -infinity。 -
如果兩個參數都是無窮大,
Math.atan2
現在會傳回 C99 預期的值。
-
-
-
-
不兼容的變更
-
如果 lambda
Proc
傳遞為區塊,而且傳回參數的數量與 lambda 的形式參數不符,但傳回的只是一個陣列,而且其長度相符,則不再引發ArgumentError
。
-
-
-
-
Process
執行方法(例如Process.spawn
)會以寫入模式開啟檔案,以從 [:out, :err] 重新導向。在 Ruby 2.2 之前,它會以讀取模式開啟。
-
標準函式庫更新(僅限未完成的部分)¶ ↑
-
-
callcc 已過時。請改用
Fiber
。
-
-
-
Digest() 現在應該是執行緒安全的。如果您在多執行緒環境中遇到按需載入的問題,請在開機時預載入「digest/*」模組,或使用此方法,而不是直接參照 Digest::*。
-
Digest::HMAC 已移除,正如先前所述。
-
-
DL
-
DL 已從標準函式庫移除。請改用
Fiddle
!
-
-
-
延伸方法
-
find 方法接受「ignore_error」關鍵字參數。
-
-
-
Matrix
-
新增方法
-
Matrix#first_minor(row, column) 傳回刪除指定列和欄所得到的子矩陣。
-
Matrix#cofactor(row, column) 傳回 (row, column) 餘因子,這是透過將 first minor 乘以 (-1)**(row + column) 所得。
-
Matrix#adjugate 傳回矩陣的伴隨矩陣。
-
hstack 和 vstack 是新的實例和類別方法,用於水平和垂直堆疊矩陣。
-
Matrix#laplace_expansion(row_or_column: num) 傳回沿第
num
列或欄的拉普拉斯展開。 -
Vector.basis(size:, index:) 傳回指定的基底向量。
-
為 Vector 和 Matrix 新增一元 - 和 +。
-
Vector#cross_product 推廣到任意維度。
-
Vector#dot 和 cross 是 inner_product 和 cross_product 的別名。
-
Vector#angle_with 傳回與其參數的夾角
-
新的實例和類別方法 independent? 用於測試線性獨立性。
-
-
-
-
Pathname#/
的別名是Pathname#+
。 -
新增方法
-
-
Rake
-
已更新至 Rake 10.4.0。有關完整發行說明,請參閱
-
-
RubyGems
-
已更新至 RubyGems 2.4.2。有關完整發行說明,請參閱
docs.seattlerb.org/rubygems/History_txt.html#label-2.4.2+%2F+2014-10-01
-
-
XMLRPC
-
新增名為 LibXMLStreamParser 的新剖析器類別。
-
標準函式庫相容性問題(不包括功能錯誤修正)¶ ↑
-
lib/mathn.rb
-
顯示已棄用的警告 [功能 #10169]
-
-
ext/date/lib/date/format.rb
-
已移除,因為它是空檔案。
-
-
-
Digest::HMAC 已正式停止使用。請改用
OpenSSL::HMAC
或外部 gem。
-
-
time.rb
-
Time.parse
、Time.strptime
、Time.rfc2822
、Time.xmlschema
可能會產生固定偏移的Time
物件。當常見的 localtime 無法保留與 UTC 的偏移量時,就會發生這種情況。 -
Time.httpdate
永遠會產生 UTCTime
物件。 -
Time.strptime
在沒有日期資訊時會引發ArgumentError
。
-
-
lib/rational.rb
-
已移除,因為自 2009 年起已不建議使用。
-
-
lib/complex.rb
-
已移除,因為自 2009 年起已不建議使用。
-
-
lib/prettyprint.rb
-
已移除 PrettyPrint#first?
-
-
lib/minitest/*.rb
-
已移除,因為它與 minitest 5 衝突。[功能 #9711]
-
-
lib/test/*/.rb
-
已移除,因為它與 minitest 5 衝突,而且它只是 minitest 4 的包裝器。[功能 #9711]
-
-
lib/uri
-
支援 RFC 3986。[功能 #2542]
-
-
GServer
-
GServer 已抽取到 gserver gem。這是一個未維護的程式碼。
-
-
-
Logger::Application 已抽取到 logger-application gem。這是一個未維護的程式碼。
-
-
ObjectSpace
(需要「objspace」)-
ObjectSpace.memsize_of(obj)
會傳回包含 sizeof(RVALUE) 的大小。[錯誤 #8984]
-
-
Prime
-
不兼容的變更
-
Prime.prime? 現在會對負數傳回 false。不應使用此方法來判斷數字是否為合數。[錯誤 #7395]
-
-
-
-
已移除 Psych::EngineManager [錯誤 #8344]
-
內建全域變數相容性問題¶ ↑
C API 更新¶ ↑
-
已移除不建議使用的 API。[功能 #9502]
Check_SafeStr -> SafeStringValue rb_check_safe_str -> SafeStringValue rb_quad_pack -> rb_integer_pack rb_quad_unpack -> rb_integer_unpack rb_read_check:存取結構 FILE 內部。沒有替換。rb_struct_iv_get:內部函式。沒有替換。struct rb_blocking_region_buffer:內部類型。沒有替換。rb_thread_blocking_region_begin -> rb_thread_call_without_gvl 家族 rb_thread_blocking_region_end -> rb_thread_call_without_gvl 家族 TRAP_BEG -> rb_thread_call_without_gvl 家族 TRAP_END -> rb_thread_call_without_gvl 家族 rb_thread_select -> rb_thread_fd_select 家族 struct rb_exec_arg:內部類型。沒有替換。rb_exec:內部函式。沒有替換。rb_exec_arg_addopt:內部函式。沒有替換。rb_exec_arg_fixup:內部函式。沒有替換。rb_exec_arg_init:內部函式。沒有替換。rb_exec_err:內部函式。沒有替換。rb_fork:內部函式。沒有替換。rb_fork_err:內部函式。沒有替換。rb_proc_exec_n:內部函式。沒有替換。rb_run_exec_options:內部函式。沒有替換。rb_run_exec_options_err:內部函式。沒有替換。rb_thread_blocking_region -> rb_thread_call_without_gvl 家族 rb_thread_polling -> rb_thread_wait_for rb_big2str0:內部函式。沒有替換。rb_big2ulong_pack -> rb_integer_pack rb_gc_set_params:內部函式。沒有替換。rb_io_mode_flags -> rb_io_modestr_fmode rb_io_modenum_flags -> rb_io_oflags_fmode
-
struct RBignum 已隱藏。[功能 #6083] 請改用 rb_integer_pack 和 rb_integer_unpack。
-
struct RRational 已隱藏。[功能 #9513] 請改用 rb_rational_num 和 rb_rational_den。
-
rb_big_new 和 rb_big_resize 使用 size_t 而不是 long。
-
rb_num2long 傳回 long 而不是 SIGNED_VALUE。
-
rb_num2ulong 傳回 unsigned long 而不是 VALUE。
-
st 雜湊表使用 2 的次方大小以提升速度 [功能 #9425]。如果使用適當的雜湊函數,查詢速度會快上 10-25%。不過,雜湊分佈的弱點不再能透過質數大小的表格來掩蓋,因此擴充套件可能需要調整雜湊函數以確保良好的分佈。
-
新增 rb_sym2str()。這幾乎等同於「rb_id2str(SYM2ID(sym))」,但不會固定動態符號。
-
新增 rb_str_cat_cstr()。這等同於「rb_str_cat2()」。
-
未來,「rb_str_substr()」和「rb_str_subseq()」將會共用字串的中間部分,而不再只共用字串的結尾。因此,結果字串可能不會以 NUL 結尾,需要呼叫「StringValueCStr()」才能取得以 NUL 結尾的 C 字串。
-
rb_tracepoint_new() 支援只能從 C 存取的新內部事件
-
RUBY_INTERNAL_EVENT_GC_ENTER
-
RUBY_INTERNAL_EVENT_GC_EXIT r47528
-
-
rb_hash_delete() 現在不會呼叫傳給目前方法的區塊。
-
匯出 rb_extract_keywords() 和 rb_get_kwargs()。詳情請參閱 README.EXT。
建置系統更新¶ ↑
-
jemalloc 可透過「./configure –with-jemalloc」選擇性地支援,當系統 malloc 速度較慢或容易產生碎片時,jemalloc 可能適合使用。[功能 #9113]
實作變更¶ ↑
-
* Most symbols which are returned by String#to_sym and String#intern are GC-able [Feature #9634] * Introduce incremental marking for major GC. [Feature #10137] * Enable lazy sweep on GC caused by malloc().
-
VM
* Use frozen string literals for Hash#[] and Hash#[]= * Fast keyword arguments passing [Feature #10440] * Allow to receive huge splatted array by a rest argument [Feature #10440]
-
* Process creation methods, such as spawn(), uses vfork() system call. vfork() is faster than fork() when the parent process uses huge memory.