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
现在会抛出Math::DomainError
而不是返回 NaN,如果底数小于 0,并且如果两个参数都为 0,则返回 NaN 而不是 -infinity。 -
Math.atan2
现在返回与 C99 预期一致的值,如果两个参数都是无穷大。
-
-
-
-
不兼容的更改
-
当 lambda
Proc
作为块传递时,不再抛出ArgumentError
,并且如果只传递了一个数组并且它的长度匹配,则传递的参数数量与 lambda 的形式参数不匹配。
-
-
-
-
Process
执行方法(如Process.spawn
)以写入模式打开文件,用于从 [:out, :err] 重定向。在 Ruby 2.2 之前,它是以读取模式打开的。
-
标准库更新(仅突出显示的更新)¶ ↑
-
-
callcc 已过时。请使用
Fiber
代替。
-
-
-
Digest() 现在应该是线程安全的。如果您在多线程环境下遇到按需加载的问题,请在启动时预加载“digest/*”模块,或者使用此方法而不是直接引用 Digest::*。
-
Digest::HMAC 已被删除,正如之前通知的那样。
-
-
DL
-
DL 已从标准库中移除。请使用
Fiddle
代替!
-
-
-
扩展方法
-
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#+
的别名。 -
新方法
-
-
耙子
-
更新到 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
-
显示弃用警告 [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
始终生成 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。
构建系统更新¶ ↑
-
通过 `./configure –with-jemalloc` 可选支持 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.