NEWS Ruby 1.9.3
本文档是除 bug 修复之外,在版本发布之间所做的用户可见功能更改的列表。
请注意,每个条目都保持得非常简短,没有提供原因或参考信息。有关所有信息的完整更改列表,请参阅 ChangeLog 文件。
自 1.9.2 版本以来的更改
许可证
-
Ruby 的许可证已从 GPLv2 双许可证更改为 BSD 2 条款双许可证。
已知的平台相关问题
OS X Lion
-
如果您使用 Xcode 4.1,则必须使用 ‘–with-gcc=gcc-4.2’ 配置 ruby;如果您使用 Xcode 4.2,则必须使用 ‘–with-gcc=clang’ 配置 ruby。
C API 更新
-
rb_scan_args() 已得到增强,支持提取可选参数哈希。
-
添加了 ruby_vm_at_exit()。这使得扩展库可以钩入 VM 终止。
-
添加了 rb_fd_p()。如果您想关闭所有文件描述符,请使用此 API 进行检查。[ruby-core:37759]
库更新(仅列出重要的)
-
内置类
-
-
扩展方法
-
Array#pack支持字节序修饰符。
-
-
-
Bignum
-
更改了包含超过 150 个 BDIGIT 的大数的乘法算法,以减少计算时间。现在使用 Toom-3 算法来计算这些大数的乘法。
-
-
-
新编码
-
CP950
-
CP951
-
UTF-16
-
UTF-32
-
-
更改别名
-
SJIS 是 Windows-31J
-
-
-
-
新常量
-
File::NULL NULL 设备的名称。
-
File::DIRECT O_DIRECT 的名称。
-
-
-
-
将 __id__ 移至
BasicObject。 -
扩展方法
-
Kernel#rand支持范围参数。
-
-
-
Module
-
-
扩展方法
-
Random.rand支持范围参数。
-
-
-
-
扩展方法
-
String#unpack支持字节序修饰符。
-
-
新方法
-
-
-
扩展方法
-
Time#strftime支持 %:z 和 %::z。
-
-
-
Process
-
如果平台不支持辅助组概念,Process#maxgroups 和 Process#maxgroups= 现在将引发
NotImplementedError。
-
-
bigdecimal
-
BigDecimal#power 和 BigDecimal#** 支持非整数指数。
-
Kernel.BigDecimal和BigDecimal.new现在接受Integer、Rational、Float和BigDecimal的实例。如果您传递Rational或Float给它们,则必须指定精度来生成BigDecimal的数字。 -
BigDecimal#coerce 与
Rational行为已更改。它使用接收者BigDecimal的精度,从给定的Rational生成BigDecimal的数字。
-
-
bigdecimal/util
-
添加了 BigDecimal#to_d 和 Integer#to_d。
-
Float#to_d 接受精度参数。
-
Rational#to_d 在传递零或负精度时引发
ArgumentError。 -
Rational#to_d
-
零和隐式精度已被弃用。此功能将在下一个 bigdecimal 版本中移除。
-
不支持负精度。请注意,这是一个不兼容的更改。
-
-
-
date
-
明确接受浮点数,但有限制。
-
如果给定的偏移量是浮点数,
DateTime假定其精度最多为秒。DateTime.new(2001,2,3,0,0,0,3.0/24)==DateTime.new(2001,2,3,0,0,0,‘+03:00’)#=> true -
如果给定的 +/- 操作数是浮点数,
DateTime假定其精度最多为纳秒。DateTime.new(2001,2,3)+ 0.5 ==DateTime.new(2001,2,3,12)#=> true -
偏移量的精度始终最多为秒。
Rational(‘0.5’) == Rational(‘0.500001’) #=> false
DateTime.new(2001,2,3,0,0,0,Rational(‘0.5’)) ==DateTime.new(2001,2,3,0,0,0,Rational(‘0.500001’))#=> true
-
-
忽略长偏移量和远重排日期(并发出警告)。
-
现在只接受
-1<=offset<=1 (-24:00..+24:00) 2298874<=start<=2426355 或 -/+oo
(proleptic Gregorian/Julian mean -/+oo)
-
-
strftime 方法无法产生巨大的输出(与 Time 的相同)。
-
即使 Date/DateTime 可以处理很远的日期,以下操作也会引发异常。
DateTime.new(1<<10000).strftime(‘%Y’) # Errno::ERANGE
-
-
更改了 inspect 的格式。
-
更改了 marshal 的格式(但是,可以加载旧的 dump)。
-
-
io/console
-
json
-
已更新至 v1.5.4。
-
-
matrix
-
新类
-
Matrix::EigenvalueDecomposition
-
Matrix::LUPDecomposition
-
-
新方法
-
Matrix#diagonal?
-
Matrix#eigen
-
Matrix#eigensystem
-
Matrix#hermitian?
-
Matrix#lower_triangular?
-
Matrix#lup
-
Matrix#lup_decomposition
-
Matrix#normal?
-
Matrix#orthogonal?
-
Matrix#permutation?
-
Matrix#round
-
Matrix#symmetric?
-
Matrix#unitary?
-
Matrix#upper_triangular?
-
Matrix#zero?
-
Vector#magnitude, norm
-
Vector#normalize
-
-
扩展方法
-
Matrix#each 和 each_with_index 可以迭代元素的子集。
-
Matrix#find_index 返回 [行, 列],并且可以迭代元素的子集。
-
Matrix#** 实现
Numeric指数(使用特征系统)。 -
Matrix.zero 可以构建矩形矩阵。
-
-
-
minitest
-
Minitest 已更新至 2.2.2 版本。
-
有关完整详细信息,请参阅 github.com/seattlerb/minitest/blob/master/History.txt
-
-
net/http
-
支持 SNI(服务器名称指示)用于 HTTPS。
-
允许配置等待服务器返回 ‘100 continue’ 响应后再发送 HTTP 请求正文。设置
Net::HTTP#continue_timeout并将 ‘expect’ => ‘100-continue’ 传递给额外的 HTTP 标头。例如,以下代码在发送 HTTP 请求正文之前发送 HTTP 标头并等待获取 ‘100 continue’ 响应。当发生 0.5 秒超时或服务器发送 ‘100 continue’ 时,客户端将发送 HTTP 请求正文。
http.continue_timeout = 0.5 http.request_post('/continue', 'body=BODY', 'expect' => '100-continue')
-
新方法
-
Net::HTTPRequest#set_form): 添加了对 application/x-www-form-urlencoded 和 multipart/form-data 的支持。
-
-
-
objspace
-
openssl
-
PKey::RSA 和 PKey::DSA 在将公钥导出为 DER 或 PEM 时,现在使用通用的 X.509 编码方案(例如,在 X.509 证书的 Subject Public Key Info 中使用)。通过(已有的)创建时的回退机制确保了向后兼容性。
-
OpenSSL::ASN1::Constructive#new 和 OpenSSL::ASN1::Primitive#new(及其子类的构造函数)将不再强制设置 tag 为 :EXPLICIT,当 tag 和/或 tag_class 作为参数传递时。tagging 必须显式设置。
-
通过 infinite_length 属性支持无限长度编码。
-
OpenSSL::PKey.read( file | string [, pwd] ) 允许使用可选的加密 PEM 编码密码,以 DER-/PEM 编码形式读取任意公钥/私钥。 -
添加新方法
OpenSSL::X509::Name#hash_old作为 X509_NAME_hash_old() 的包装器,该函数定义于OpenSSL1.0.0。它返回与OpenSSL0.9.8 兼容的哈希值。
-
-
optparse
-
支持 bash/zsh 自动补全。
-
-
Rake
-
Rake 已从 0.8.7 升级到 0.9.2.2。有关完整的发行说明,请参阅 github.com/jimweirich/rake/blob/master/CHANGES
-
-
RDoc
-
RDoc 已升级到 3.9.4 版本。有关完整的发行说明,请参阅 docs.seattlerb.org/rdoc/History_txt.html
-
-
rexml
-
支持 Ruby 原生的编码机制,并放弃了 iconv 依赖。
-
-
RubyGems
-
RubyGems 已升级到 1.8.10 版本。有关完整的发行说明,请参阅 rubygems.rubyforge.org/rubygems-update/History_txt.html
-
-
stringio
-
扩展方法
-
StringIO#set_encoding可以接受第二个参数和可选的哈希。
-
-
-
test/unit
-
新参数
-
-j N, –jobs=N: 允许同时运行 N 个测试用例。
-
–jobs-status: 在并行运行时显示作业状态。
-
–no-retry: 在并行运行时,不重试失败的测试用例。
-
–ruby=RUBY: 用于作业(工作进程)的 ruby 路径。可选。
-
–hide-skip: 隐藏跳过消息。您将在测试结果的末尾看到跳过的数量。
-
-
-
uri
-
webrick
-
新方法
-
WEBrick::HTTPRequest#continue 用于生成 ‘100 continue’ 响应。
-
-
新日志记录指令
-
%{remote}p 表示远程(客户端)端口号。
-
-
-
yaml
-
zlib
-
-
扩展方法
-
FileUtils#chmod支持符号模式参数。
-
-
语言更改
-
正则表达式现在支持 Unicode 6.0。(新字符和脚本)
- 实验性
-
正则表达式现在支持 Age 属性。
与 Perl 不同,当前实现遵循 UTS #18 的解释。www.unicode.org/reports/tr18/
-
使用指令开启/关闭缩进警告。(“# -*- warn-indent: true -*-” / “# -*- warn-indent: false -*-”)
兼容性问题(不包括功能性 bug 修复)
* Rational#to_d See above.