NEWS for Ruby 2.2.0¶ ↑
本文件列出了版本之间用户可见的功能变更,不包括错误修复。
请注意,每个条目都非常简短,没有提供任何原因或参考信息。有关包含所有充分信息的完整变更列表,请参阅 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]
-
-
-
-
改进
-
IO#read_nonblock
和IO#write_nonblock
用于 Windows 上的管道。
-
-
-
-
新方法
-
Kernel#itself
-
-
改进
-
Kernel#throw
抛出UncaughtThrowError
,它是ArgumentError
的子类,当没有相应的 catch 块时,而不是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
的状态管理已弃用。
-
-
-
不兼容的更改
-
-
-
不兼容的更改
-
更改重复键的覆盖策略。[Bug #10315] { **hash1, **hash2 } 包含重复键的 hash2 值。
-
-
-
-
不兼容的更改
-
Math.log
方法现在会在底数小于 0 时抛出Math::DomainError
异常,而不是返回 NaN;如果两个参数都为 0,则返回 NaN,而不是 -infinity。 -
Math.atan2
方法现在会返回与 C99 预期一致的值,即使两个参数都是无穷大。
-
-
-
-
不兼容的更改
-
当将 lambda
Proc
作为代码块传递时,如果只传递了一个数组,并且数组长度与 lambda 的形式参数数量匹配,即使传递的实参数量与 lambda 的形式参数数量不匹配,也不会再抛出ArgumentError
异常。
-
-
-
-
Process
的执行方法(例如Process.spawn
)会以写入模式打开文件,用于从 [:out, :err] 重定向。在 Ruby 2.2 之前,它是以读取模式打开的。
-
标准库更新(仅突出显示)¶ ↑
-
-
callcc 已被弃用。请使用
Fiber
代替。
-
-
摘要
-
Digest() 现在应该是线程安全的。如果您在多线程环境下遇到按需加载的问题,请在启动时预加载“digest/*”模块,或者使用此方法,而不是直接引用 Digest::*。
-
Digest::HMAC 已被移除,正如之前通知的那样。
-
-
DL
-
DL 已从标准库中移除。请使用 Fiddle 代替!
-
-
等等
-
新方法
-
Etc.uname
-
Etc.sysconf
-
Etc.confstr
-
IO#pathconf
-
Etc.nprocessors
-
-
-
查找,路径名
-
扩展方法
-
find 方法接受“ignore_error”关键字参数。
-
-
-
矩阵
-
新方法
-
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#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
-
显示弃用警告 [Feature #10169]
-
-
ext/date/lib/date/format.rb
-
已删除,因为它是一个空文件。
-
-
摘要
-
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 冲突。[Feature #9711]
-
-
lib/test/*/.rb
-
已删除,因为它与 minitest 5 冲突,并且它只是 minitest 4 的包装器。[Feature #9711]
-
-
lib/uri
-
支持 RFC 3986。[Feature #2542]
-
-
GServer
-
GServer 已提取到 gserver gem 中。它是不维护的代码。
-
-
Logger
-
Logger::Application 已提取到 logger-application gem 中。它是不维护的代码。
-
-
ObjectSpace
(在要求“objspace”之后)-
ObjectSpace.memsize_of(obj) 返回的大小包括 sizeof(RVALUE)。[Bug #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 : 访问结构体 FILE 内部。无替换。 rb_struct_iv_get : 内部函数。无替换。 结构体 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 结构体 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
-
结构体 RBignum 已隐藏。[功能 #6083] 使用 rb_integer_pack 和 rb_integer_unpack 代替。
-
结构体 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().
-
虚拟机
* 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.