Ruby 2.2.0 的 NEWS¶ ↑
此文档列出了版本之间用户可见的功能更改,不包括错误修复。
请注意,每个条目都非常简短,没有提供背后的原因或参考信息。有关包含所有足够信息的完整更改列表,请参阅 ChangeLog 文件。
自 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]
-
-
-
-
改进
-
支持 Windows 上的管道的
IO#read_nonblock
和IO#write_nonblock
。
-
-
-
-
新方法
-
Kernel#itself
-
-
改进
-
当没有相应的 catch 块时,
Kernel#throw
会引发UncaughtThrowError
(ArgumentError
的子类),而不是引发ArgumentError
。
-
-
-
-
扩展方法
-
诸如
Process.spawn
之类的Process
执行方法会以写入模式打开文件,以从 [:out, :err] 重定向。
-
-
-
-
改进
-
由
String#to_sym
和String#intern
返回的大多数符号都是可进行垃圾回收的。
-
-
-
-
新方法
-
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
作为块传递时,如果仅生成一个数组且其长度匹配,则不再引发ArgumentError
,并且生成的参数数量与 lambda 的形式参数不匹配。
-
-
-
-
诸如
Process.spawn
之类的Process
执行方法会以写入模式打开文件,以从 [:out, :err] 重定向。在 Ruby 2.2 之前,它以读取模式打开。
-
标准库更新 (仅限突出的更新)¶ ↑
-
-
callcc 已过时。请改用
Fiber
。
-
-
Digest
-
Digest() 现在应该是线程安全的。如果在多线程环境下按需加载时遇到问题,请在启动时预加载“digest/*”模块,或使用此方法而不是直接引用 Digest::*。
-
Digest::HMAC 已按先前通知的方式删除。
-
-
DL
-
DL 已从 stdlib 中删除。请改用 Fiddle!
-
-
Etc
-
新方法
-
Etc.uname
-
Etc.sysconf
-
Etc.confstr
-
IO#pathconf
-
Etc.nprocessors
-
-
-
Find、Pathname
-
扩展方法
-
find 方法接受 “ignore_error” 关键字参数。
-
-
-
Matrix
-
新方法
-
Matrix#first_minor(row, column) 返回通过删除指定行和列获得的子矩阵。
-
Matrix#cofactor(row, column) 返回 (row, column) 的余因子,该余因子是通过将第一子式乘以 (-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#/ 是 Pathname#+ 的别名。
-
新方法
-
Pathname#birthtime
-
-
-
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
-
-
TSort
-
如果没有给定块,TSort.tsort_each、TSort.each_strongly_connected_component 和 TSort.each_strongly_connected_component_from 将返回一个枚举器。
-
-
XMLRPC
-
添加名为 LibXMLStreamParser 的新解析器类。
-
标准库兼容性问题 (不包括功能错误修复)¶ ↑
-
lib/mathn.rb
-
显示已弃用警告。[功能 #10169]
-
-
ext/date/lib/date/format.rb
-
已删除,因为它是空文件。
-
-
Digest
-
Digest::HMAC 最终已停止存在。请改用 OpenSSL::HMAC 或外部 gem。
-
-
time.rb
-
Time.parse、Time.strptime、Time.rfc2822、
Time.xmlschema
可能会生成固定偏移量Time
对象。当通常的本地时间不保留与 UTC 的偏移量时会发生这种情况。 -
Time.httpdate 始终生成 UTC
Time
对象。 -
当没有日期信息时,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
-
Logger::Application 被提取到 logger-application gem。它是无法维护的代码。
-
-
ObjectSpace
(在 require “objspace” 之后)-
ObjectSpace.memsize_of(obj) 返回包含 sizeof(RVALUE) 的大小。[错误 #8984]
-
-
Prime
-
不兼容的更改
-
Prime.prime? 现在对于负数返回 false。此方法不应用于判断数字是否为合数。[Bug #7395]
-
-
-
Psych
-
移除了 Psych::EngineManager [Bug #8344]
-
内置全局变量的兼容性问题¶ ↑
C API 更新¶ ↑
-
已弃用的 API 已移除。[Feature #9502]
Check_SafeStr -> SafeStringValue rb_check_safe_str -> SafeStringValue rb_quad_pack -> rb_integer_pack rb_quad_unpack -> rb_integer_unpack rb_read_check : 访问 struct 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 已隐藏。[Feature #6083] 请改用 rb_integer_pack 和 rb_integer_unpack。
-
struct RRational 已隐藏。[Feature #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 的幂次大小 [Feature #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。
构建系统更新¶ ↑
-
通过 `./configure –with-jemalloc` 可选支持 jemalloc。当系统 malloc 速度慢或容易出现碎片时,jemalloc 可能适用。[Feature #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.