NEWS for Ruby 2.1.0¶ ↑
本文件列出了版本之间用户可见的功能变更,不包括错误修复。
请注意,每个条目都非常简短,没有提供任何原因或参考信息。有关包含所有充分信息的完整变更列表,请参阅 ChangeLog 文件。
自 2.0.0 版本以来的变更¶ ↑
语言变更¶ ↑
-
现在,关键字参数的默认值可以省略。这些“必需关键字参数”需要在调用时显式给出。
-
为整数和浮点数字面量添加了后缀:“r”、“i”和“ri”。
-
“42r”和“3.14r”分别被评估为 Rational(42, 1) 和 3.14.rationalize。但带有“r”后缀的指数形式,例如“6.022e+23r”,不被接受,因为它具有误导性。
-
“42i”和“3.14i”分别被评估为 Complex(0, 42) 和 Complex(0, 3.14)。
-
“42ri”和“3.14ri”分别被评估为 Complex(0, 42r) 和 Complex(0, 3.14r)。
-
-
def-expr 现在返回其名称的符号,而不是 nil。
核心类更新(仅突出显示的更新)¶ ↑
-
-
新方法
-
Array#to_h
将一个键值对数组转换为一个Hash
。
-
-
-
-
新方法
-
Enumerable#to_h
将一个键值对列表转换为一个Hash
。
-
-
-
-
新方法
-
Exception#cause
提供在引发新异常时捕获的先前异常。
-
-
-
-
改进
-
引入了代际
GC
,也称为 RGenGC。
-
-
添加了环境变量
-
RUBY_GC_HEAP_INIT_SLOTS
-
RUBY_GC_HEAP_FREE_SLOTS
-
RUBY_GC_HEAP_GROWTH_FACTOR
-
RUBY_GC_HEAP_GROWTH_MAX_SLOTS
-
RUBY_GC_MALLOC_LIMIT_MAX
-
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
-
RUBY_GC_OLDMALLOC_LIMIT
-
RUBY_GC_OLDMALLOC_LIMIT_MAX
-
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
-
-
已弃用的环境变量
-
RUBY_FREE_MIN(使用 RUBY_GC_HEAP_FREE_SLOTS 代替)
-
RUBY_HEAP_MIN_SLOTS(使用 RUBY_GC_HEAP_INIT_SLOTS 代替)
-
-
-
-
新方法
-
Fixnum#bit_length
-
Bignum#bit_length
-
-
Bignum 性能改进
-
如果可用,则使用 GMP。GMP 仅用于几个操作:乘法、除法、基数转换、GCD
-
-
-
-
扩展方法
-
IO#seek
支持 SEEK_DATA 和 SEEK_HOLE 作为 whence。 -
IO#seek
接受符号(:CUR、:END、:SET、:DATA、:HOLE)作为第二个参数。 -
IO#read_nonblock
接受可选的“exception: false”以返回符号 -
IO#write_nonblock
接受可选的“exception: false”以返回符号
-
-
-
-
新方法
-
Kernel#singleton_method
-
-
-
-
新方法
-
Module#using
,它仅在当前类或模块定义中激活指定模块的细化。 -
Module#singleton_class?
如果接收者是单例类,则返回 true,如果接收者是普通类或模块,则返回 false。
-
-
扩展方法
-
Module#refine
现已不再处于实验阶段。 -
Module#include
和Module#prepend
现在是公开方法。
-
-
-
互斥锁
-
杂项
-
Mutex#owned? 现已不再处于实验阶段。
-
-
-
-
扩展方法
-
Numeric#step
允许省略 limit 参数,在这种情况下,将生成一个无限的数字序列。引入了关键字参数 ‘to` 和 `by` 以便于使用。`by` 可以为 0,在这种情况下,将无限期地生成相同的值。
-
-
-
-
新方法
-
$0/$0= 的替代方法
-
Process.argv0()
返回 $0 的原始值。 -
Process.setproctitle()
设置进程标题,但不影响 $0。
-
-
-
-
-
“literal”.freeze 现在经过优化,可以返回相同的对象
-
新方法
-
String#scrub
和String#scrub!
验证并修复无效的字节序列。如果您想在旧版本的 Ruby 中使用此函数,请考虑使用 string-scrub.gem。
-
-
-
-
所有符号现在都已冻结。
-
-
pack/unpack(数组/字符串)
-
如果平台具有该类型,则针对 long long 类型的 Q! 和 q! 指令。
-
-
顶层
-
扩展方法
-
main.using 现已不再处于实验阶段。该方法激活参数模块祖先中的细化,以通过
Module#include
支持细化继承。
-
-
核心类兼容性问题(不包括功能错误修复)¶ ↑
-
-
不兼容的更改
-
Hash#reject
将在未来的版本中返回普通的Hash
对象,即原始对象的子类、实例变量、默认值和污染性将不再被复制,因此现在在使用此类Hash
调用时会发出警告。
-
-
-
-
不兼容的更改
-
如果外部编码为 ASCII-8BIT,则打开忽略内部编码。
-
-
-
Kernel#eval
、Kernel#instance_eval 和Module#module_eval
。-
复制原始环境的范围信息,这意味着 private、protected、public 和 module_function(不带参数)不会影响 eval 字符串之外的环境。例如,“class Foo; eval “private”; def foo; end; end” 不会使 Foo#foo 成为私有方法。
-
-
Kernel#untrusted?、untrust 和 trust
-
这些方法已弃用,其行为与 tainted?、taint 和 untaint 分别相同。如果 $VERBOSE 为 true,则会显示警告。
-
-
-
单例类的祖先现在包括单例类,特别是它本身。
-
-
Module#define_method
和Object#define_singleton_method
-
现在它们返回定义的方法的符号,而不是方法/过程本身。
-
-
-
如果接收者没有 to_r 方法,则会引发
TypeError
而不是ArgumentError
。
-
-
-
从 lambda proc 返回现在总是退出
Proc
,而不是退出创建 lambda 的方法。从非 lambda proc 返回退出方法,与以前的行为相同。
-
* If invalid: :replace is specified for String#encode, replace invalid byte sequence even if the destination encoding equals to the source encoding.
标准库更新(仅突出显示的更新)¶ ↑
-
-
所有类方法模块化。
-
-
-
扩展方法
-
Digest::Class.file
为其构造函数接受可选参数
-
-
-
Matrix
-
添加了 Vector#cross_product。
-
-
Net::SMTP
-
添加了 Net::SMTP#rset 来实现 RSET 命令
-
-
objspace
-
新方法
-
-
-
扩展方法
-
OpenSSL::BN.new
允许 Fixnum/Bignum 参数。
-
-
-
open-uri
-
支持具有相同字段名称的多个字段(如 Set-Cookie)。
-
-
rake
-
更新至 10.1.0。主要变化包括删除类命名空间,Rake::DSL 用于保存 rake DSL 方法,以及删除对旧版 rake 功能的支持。
有关自 rake 0.9.6 以来更改的完整列表,请参见
-
-
-
新常量
-
添加了 RbConfig::SIZEOF 来提供 C 类型的大小。
-
-
-
-
更新至 4.1.0。主要增强功能包括修改后的默认模板
-
以及可访问性增强功能。
有关次要增强功能和错误修复的列表,请参见:github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
-
-
-
新方法
-
单播多播 DNS 支持
-
支持 LOC 资源
-
-
REXML::Parsers::SAX2Parser
-
修复了 entitydecl 事件参数数量错误。事件文档说明“实体声明的数组”,但实现传递了两个或多个参数。这是一个实现错误,但它破坏了向后兼容性。
-
-
REXML::Parsers::StreamParser
-
支持“entity”事件。
-
-
REXML::Text
-
REXML::Text#<< 支持方法链,例如“text << “XXX” << “YYY””。
-
REXML::Text#<< 支持非“raw”模式。
-
-
Rinda::RingServer
,Rinda::RingFinger
-
Rinda
现在支持多播套接字。有关详细信息,请参阅Rinda::RingServer
和Rinda::RingFinger
。
-
-
RubyGems
-
更新至 2.2.0。值得注意的新功能包括
-
Gemfile 或 gem.deps.rb 支持,包括 Gem.file.lock(实验性)
-
改进的迭代解析器(与 RubyGems 2.1 及更早版本相比)
-
支持在 ruby 平台和版本之间共享 GEM_HOME
有关增强功能和错误修复的完整列表,请参阅:github.com/rubygems/rubygems/tree/master/History.txt
-
-
-
-
扩展方法
-
StringScanner#[]
支持命名捕获。
-
-
-
-
添加了设施。
-
-
-
新方法
-
-
-
默认情况下,终止给定块的异常不再可以在块内被救援,除非显式给出异常类。
-
-
WEBrick
-
响应的主体现在可以是
StringIO
或其他类似 IO 的对象,它响应 readpartial 和 read。
-
-
XMLRPC::Client
-
新方法
-
XMLRPC::Client#http。它返回
Net::HTTP
作为客户端。通常,不需要它。当您想要更改次要 HTTP 客户端选项时,它很有用。您可以通过 XMLRPC::Client 方法更改主要的 HTTP 客户端选项。您应该使用 XMLRPC::Client 方法来更改主要的 HTTP 客户端选项,而不是 XMLRPC::Client#http。
-
-
标准库兼容性问题(不包括功能错误修复)¶ ↑
-
-
不兼容的更改
-
Set#to_set
现在返回自身,而不是生成副本。
-
-
-
-
不兼容的更改
-
URI.decode_www_form
遵循当前的 WHATWG URL 标准。它获取编码参数以指定字符编码。现在允许松散的百分比编码字符串,但拒绝 ;- 分隔符。 -
URI.encode_www_form
遵循当前的 WHATWG URL 标准。它获取编码参数以在百分比编码之前进行转换。默认情况下,UTF-16 字符串不会在百分比编码之前转换为 UTF-8。
-
-
-
curses
-
已移除。curses 现在可作为 gem 获取。有关详细信息,请参见 rubygems.org/gems/curses。
-
内置全局变量兼容性问题¶ ↑
-
$SAFE
-
$SAFE=4 已过时。如果 $SAFE 设置为 4 或更大,则会引发
ArgumentError
。
-
C API 更新¶ ↑
-
rb_gc_set_params() 已弃用。这仅用于 Ruby 内部。
-
添加了 rb_gc_count()。这将返回
GC
发生的次数。 -
添加了 rb_gc_stat()。这允许从 C 访问特定的
GC.stat()
值,而无需任何分配开销。 -
添加了 rb_gc_latest_gc_info()。这允许访问
GC.latest_gc_info()
。 -
添加了 rb_postponed_job_register()。接受一个函数回调,该回调在 VM 处于一致状态时调用,例如,从 C 信号处理程序执行工作。
-
添加了 rb_profile_frames()。为调用堆栈分析提供对当前 ruby 堆栈的低成本访问。
-
rb_tracepoint_new() 支持仅从 C 访问的新内部事件
-
RUBY_INTERNAL_EVENT_NEWOBJ
-
RUBY_INTERNAL_EVENT_FREEOBJ
-
RUBY_INTERNAL_EVENT_GC_START
-
RUBY_INTERNAL_EVENT_GC_END_MARK
-
RUBY_INTERNAL_EVENT_GC_END_SWEEP
-
请注意,您*不能*同时指定“内部事件”和普通事件(例如 RUBY_EVENT_CALL、RUBY_EVENT_RETURN)。
-