Ruby 2.1.0 的 NEWS¶ ↑
本文档列出了版本之间用户可见的功能更改,但不包括错误修复。
请注意,每个条目都非常简短,没有提供任何原因或参考信息。有关包含所有足够信息的完整更改列表,请参阅 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
-
其他
-
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 (Array/String)
-
如果平台具有该类型,则为 long long 类型提供 Q! 和 q! 指令。
-
-
toplevel
-
扩展方法
-
main.using 不再是实验性的。该方法激活参数模块的祖先中的改进,以支持通过
Module#include
进行改进继承。
-
-
核心类兼容性问题(不包括功能错误修复)¶ ↑
-
-
不兼容的更改
-
Hash#reject
将在未来的版本中返回普通Hash
对象,也就是说,不再复制原始对象的子类、实例变量、默认值和被污染状态,因此现在在用这样的Hash
调用时会发出警告。
-
-
-
-
不兼容的更改
-
如果外部编码为 ASCII-8BIT,则打开时忽略内部编码。
-
-
-
Kernel#eval
、Kernel#instance_eval 和Module#module_eval
。-
复制原始环境的作用域信息,这意味着没有参数的私有、受保护、公共和 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
-
现在它们返回已定义方法的符号,而不是方法/proc 本身。
-
-
-
如果接收者没有 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.
标准库更新(仅限突出显示)¶ ↑
-
CGI::Util
-
所有类方法都已模块化。
-
-
Digest
-
扩展方法
-
Digest::Class.file 为其构造函数接受可选参数
-
-
-
Matrix
-
添加了 Vector#cross_product。
-
-
Net::SMTP
-
添加了 Net::SMTP#rset 以实现 RSET 命令
-
-
objspace
-
新方法
-
ObjectSpace.trace_object_allocations
-
ObjectSpace.trace_object_allocations_start
-
ObjectSpace.trace_object_allocations_stop
-
ObjectSpace.trace_object_allocations_clear
-
ObjectSpace.allocation_sourcefile
-
ObjectSpace.allocation_sourceline
-
ObjectSpace.allocation_class_path
-
ObjectSpace.allocation_method_id
-
ObjectSpace.allocation_generation
-
ObjectSpace.reachable_objects_from_root
-
ObjectSpace.dump
-
ObjectSpace.dump_all
-
-
-
OpenSSL::BN
-
扩展方法
-
OpenSSL::BN.new 允许使用 Fixnum/Bignum 参数。
-
-
-
open-uri
-
支持具有相同字段名称的多个字段(如 Set-Cookie)。
-
-
Pathname
-
新方法
-
Pathname#write
-
Pathname#binwrite
-
-
-
rake
-
已更新至 10.1.0。主要更改包括删除类命名空间、Rake::DSL 以保存 rake DSL 方法以及删除对旧版 rake 功能的支持。
有关自 rake 0.9.6 以来更改的完整列表,请参阅
-
-
RbConfig
-
新常量
-
添加了 RbConfig::SIZEOF 以提供 C 类型的大小。
-
-
-
-
已更新至 4.1.0 版本。主要增强功能包括修改后的默认模板
-
和辅助功能增强。
有关次要增强和错误修复的列表,请参阅:github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
-
-
Resolv
-
新方法
-
Resolv::DNS.fetch_resource
-
-
一次性组播 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
-
-
-
Set
-
新方法
-
Set#intersect?
-
Set#disjoint?
-
-
-
Socket
-
新方法
-
Socket.getifaddrs
-
-
-
StringScanner
-
扩展方法
-
StringScanner#[] 支持命名捕获。
-
-
-
Syslog::Logger
-
添加了 facility。
-
-
Tempfile
-
新方法
-
Tempfile.create
-
-
-
Timeout
-
默认情况下,除非显式给出异常类,否则无法在块内捕获终止给定块的异常。
-
-
TSort
-
新方法
-
TSort.tsort
-
TSort.tsort_each
-
TSort.strongly_connected_components
-
TSort.each_strongly_connected_component
-
TSort.each_strongly_connected_component_from
-
-
-
WEBrick
-
响应的主体现在可以是 StringIO 或其他响应 readpartial 和 read 的类似 IO 的对象。
-
-
XMLRPC::Client
-
新方法
-
XMLRPC::Client#http。它为客户端返回 Net::HTTP。通常,它不是必需的。当您要更改次要的 HTTP 客户端选项时,它很有用。您可以使用 XMLRPC::Client 方法更改主要的 HTTP 客户端选项。您应该使用 XMLRPC::Client 方法来更改主要的 HTTP 客户端选项,而不是 XMLRPC::Client#http。
-
-
Stdlib 兼容性问题(不包括功能错误修复)¶ ↑
-
Set
-
不兼容的更改
-
Set#to_set 现在返回自身,而不是生成副本。
-
-
-
URI
-
不兼容的更改
-
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)指定“内部事件”。
-