NEWS Ruby 2.2.0
本文档是除 bug 修复之外,在版本发布之间所做的用户可见功能更改的列表。
请注意,每个条目都保持得非常简短,没有提供原因或参考信息。有关所有信息的完整更改列表,请参阅 ChangeLog 文件。
自 2.1.0 版本以来的变更
语言更改
-
nil/true/false
-
nil/true/false 对象被冻结。[Feature #8923]
-
-
Hash字面量-
后跟冒号的
Symbol键可以被引用。[Feature #4276]
-
-
默认参数修复了一个长期存在的 bug,即可选参数在其默认值表达式中不可访问。[Bug #9593]
核心类更新(仅列出重要的更新)
-
-
新方法
-
-
-
新方法
-
扩展方法
-
min, min_by, max 和 max_by 支持可选参数以返回多个元素。
-
-
-
-
GC.latest_gc_info返回 :state 来表示当前的GC状态。[Feature #10137] -
改进
-
为主要
GC引入增量标记。[Feature #10137]
-
-
-
-
改进
-
在 Windows 上支持管道的
IO#read_nonblock和IO#write_nonblock。
-
-
-
-
新方法
-
Kernel#itself
-
-
改进
-
当没有对应的 catch 块时,
Kernel#throw抛出UncaughtThrowError,它是ArgumentError的子类,而不是ArgumentError。
-
-
-
Process
-
扩展方法
-
Process 执行方法(如
Process.spawn)以写入模式打开文件,用于从 [:out, :err] 重定向。
-
-
-
-
改进
-
由
String#to_sym和String#intern返回的大多数符号都可以被 GC 回收。
-
-
-
Method
-
新方法
-
Method#curry([ arity ]) 返回一个柯里化的Proc。 -
Method#super_method返回一个超类的方法,当使用 super 时会调用该方法。
-
-
核心类的兼容性问题(不包括功能 bug 修复)
-
-
已弃用
Enumerable#slice_before的状态管理。 -
已弃用
Enumerable#chunk的状态管理。
-
-
-
不兼容的更改
-
重命名
GC.stat条目。[Feature #9924] 请参阅 docs.google.com/spreadsheets/d/11Ua4uBr6o0k-nORrZLEIIUkHJ9JRzRR0NyZfrhEEnc8/edit?usp=sharing
-
-
-
-
不兼容的更改
-
更改重复键的覆盖策略。[Bug #10315] { **hash1, **hash2 } 包含 hash2 中重复键的值。
-
-
-
-
不兼容的更改
-
Math.log现在如果底数小于 0,则抛出Math::DomainError而不是返回 NaN;如果两个参数都为 0,则返回 NaN 而不是 -infinity。 -
Math.atan2现在返回的值与 C99 预期的一样,如果两个参数都为无穷大。
-
-
-
-
不兼容的更改
-
当 lambda
Proc作为块传递,并且生成的参数数量与 lambda 的形式参数不匹配时,如果只生成一个数组并且其长度匹配,则不再抛出ArgumentError。
-
-
-
Process
-
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) 的代数余子式,通过将第一个余子式乘以 (-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 的新解析器类。
-
标准库兼容性问题(不包括功能 bug 修复)
-
lib/mathn.rb
-
显示弃用警告 [Feature #10169]
-
-
ext/date/lib/date/format.rb
-
已移除,因为它是一个空文件。
-
-
-
Digest::HMAC 已最终消失。请改用
OpenSSL::HMAC或外部 gem。
-
-
-
Time.parse,Time.strptime,Time.rfc2822,Time.xmlschema可能会生成固定偏移量的Time对象。当常规本地时间不保留与 UTC 的偏移量时,这种情况会发生。 -
Time.httpdate始终生成 UTCTime对象。 -
当没有日期信息时,
Time.strptime抛出ArgumentError。
-
-
lib/rational.rb
-
已移除,因为它自 2009 年起已被弃用。
-
-
lib/complex.rb
-
已移除,因为它自 2009 年起已被弃用。
-
-
-
移除 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(在 `require "objspace"` 之后)-
ObjectSpace.memsize_of(obj)返回的大小包括 sizeof(RVALUE)。[Bug #8984]
-
-
Prime
-
不兼容的更改
-
Prime.prime? 现在对负数返回 false。此方法不应用于判断数字是否为合数。[Bug #7395]
-
-
-
-
移除 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 : 内部函数。无替换。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 哈希表使用二的幂次大小以提高速度。[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。
构建系统更新
-
jemalloc 可选支持,通过 `./configure –with-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
* Process creation methods, such as spawn(), uses vfork() system call. vfork() is faster than fork() when the parent process uses huge memory.