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! 指令表示 long long 类型。
-
-
顶层
-
扩展方法
-
main.using 现已不再处于实验阶段。该方法激活参数模块祖先中的细化,以支持通过
Module#include
进行细化继承。
-
-
核心类兼容性问题(不包括功能错误修复)¶ ↑
-
-
不兼容的更改
-
Hash#reject
将在未来的版本中返回普通的Hash
对象,即原始对象的子类、实例变量、默认值和污染性将不再被复制,因此现在在使用此类Hash
调用时会发出警告。
-
-
-
-
不兼容的更改
-
如果外部编码为 ASCII-8BIT,则 open 会忽略内部编码。
-
-
-
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 为真,则会显示警告。
-
-
-
单例类的祖先现在包括单例类,特别是它本身。
-
-
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.
标准库更新(仅突出显示)¶ ↑
-
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 或其他类似 IO 的对象,它响应 readpartial 和 read。
-
-
XMLRPC::Client
-
新方法
-
XMLRPC::Client#http。它为客户端返回 Net::HTTP。通常,不需要它。当您想要更改次要 HTTP 客户端选项时,它很有用。您可以通过 XMLRPC::Client 方法更改主要的 HTTP 客户端选项。您应该使用 XMLRPC::Client 方法来更改主要的 HTTP 客户端选项,而不是 XMLRPC::Client#http。
-
-
标准库兼容性问题(不包括功能错误修复)¶ ↑
-
Set
-
不兼容的更改
-
Set#to_set 现在返回 self 而不是生成副本。
-
-
-
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)。
-