NEWS for Ruby 1.8.7
本文档是除 bug 修复之外,在版本发布之间所做的用户可见功能更改的列表。
请注意,每个条目都保持得非常简短,没有提供原因或参考信息。有关所有信息的完整更改列表,请参阅 ChangeLog 文件。
自 1.8.6 版本以来的更改
配置更改
-
默认 C 标志
根据您的环境,可能默认会添加一些 C 编译器标志。如有必要,请指定 optflags=.. 和 warnflags=.. 以覆盖它们。
-
vendor_ruby 目录
除了 ‘site_ruby’ 之外,还引入了一个名为 ‘vendor_ruby’ 的新库目录。目的是将通过包系统安装的库(‘vendor’)与手动(‘site’)安装的库分开,防止前者被后者覆盖,同时保留用户用 site 库覆盖 vendor 库的选项。(‘site_ruby’ 优先于 ‘vendor_ruby’)
如果您是包维护者,请让每个库包配置该库,将 ‘–vendor’ 选项传递给 ‘extconf.rb’,以便库文件将被安装在 ‘vendor_ruby’ 下。
您可以使用 ‘–with-sitedir=DIR’ 和 ‘–with-vendordir=DIR’ 等配置选项来更改目录位置。
全局常量
-
新常量
-
RUBY_COPYRIGHT
-
RUBY_DESCRIPTION
-
库更新(仅列出重要的)
-
新库
-
securerandom
-
-
内置类
-
接受一个可选参数,该参数确定展平的递归级别。
-
正确处理递归数据。
-
如果不提供参数,则使用给定的块。
-
如果不提供块,则返回一个枚举器。
请注意,map 和 collect 仍然返回一个数组,与 Ruby 1.9 不同,以保持兼容性。
-
接受一个可选参数,指定要删除的元素数量。
-
Array#choice
-
新方法。
-
新方法。
-
Dir#foreach
如果不提供块,则返回一个枚举器。
-
由 enumerator 库定义的各种枚举的新类。
-
由 enumerator 库定义的各种枚举的新方法。
-
新方法。
-
如果不提供块,则返回一个枚举器。
请注意,map 和 collect 仍然返回一个数组,与 Ruby 1.9 不同,以保持兼容性。
-
接受二元运算符而不是块。
-
inject 的新别名。
-
可以接受可选参数并将它们传递给 each。
-
正确处理递归数据。
-
如果不提供块,则返回一个枚举器。
-
新方法。
-
新方法。
-
如果不提供块,则返回一个枚举器。
-
如果不提供块,则返回一个枚举器。
-
IO#bytes
-
IO#chars
-
IO#lines
-
ARGF.bytes
-
ARGF.chars
-
ARGF.lines
-
新方法。
-
新方法。
-
新方法。
-
如果不提供块,则返回一个枚举器。
-
新方法。
-
如果不提供块,则返回一个枚举器。
-
Process.exec已实现。 -
如果不提供块,则返回一个枚举器。
-
Regexp.union接受模式数组。 -
新方法
-
新方法,返回字节大小。 (length 和 size 的别名)
-
新方法。这些方法与 index、rindex 和 include? 不同,它们会受到 $KCODE 的影响。
-
String#each
-
如果不提供块,则返回一个枚举器。
-
添加了一个可选的第二个参数来指定最后一个值是否应被包含。
-
新的异常类,当引发时会导致
Kernel#loop停止迭代。 -
如果不提供块,则返回一个枚举器。
-
新方法。
-
__method__
新的全局函数,它返回当前方法的名称,为一个
Symbol。
-
enumerator
-
Enumerator现在是一个内置模块。next 和 rewind 方法使用“generator”库实现。请谨慎使用,并注意性能损失。
-
-
ipaddr
-
net/smtp
-
支持 SSL/TLS。
-
-
openssl
-
新类
-
OpenSSL::PKey::PKCS5
-
文档!
-
各种新方法(请参阅文档)。
-
删除 Cipher、
Digest、PKCS7、PKCS12 中多余的模块命名空间。提供了兼容类,这些类将在 Ruby 1.9 中删除。
-
-
shellwords
-
添加用于转义 shell 不安全字符的方法
-
添加简写方法
-
Shellwords.split(别名 shellwords)
-
-
-
stringio
-
StringIO#readbyte
新方法。 (兼容 1.9 的别名)
-
StringIO#chars
新方法。
-
如果不提供块,则返回一个枚举器。
-
tempfile
-
Tempfile.open和Tempfile.new现在接受创建临时文件的后缀。要指定后缀,请将 [basename, suffix] 数组作为第一个参数传递。Tempfile.open(['image', 'jpg']) { |tempfile| ... }
-
-
tmpdir
-
新方法
-
-
uri
-
添加了 LDAPS 方案。
-
RFC3986 的更改
-
FTP
-
URI(‘example.com/foo’).path #=> ‘foo’
-
URI(‘example.com/%2Ffoo’).path #=> ‘/foo’
-
URI::FTP.build([nil, ‘example.com’, nil, ‘/foo’, ‘i’]).to_s #=> ‘example.com/%2Ffoo;type=i’
-
-
URI合并-
URI(‘a/b/c/d;p?q’).merge(‘?y’) == URI(‘a/b/c/d;p?y’)
-
URI(‘a/b/c/d;p?q’).merge(‘/./g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘/../g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘../../../g’) == URI(‘a/g’)
-
URI(‘a/b/c/d;p?q’).merge(‘../../../../g’) == URI(‘a/g’)
-
-
-
-
rss
-
0.1.6 -> 0.2.4
-
修复了图像模块
URI -
Atom 支持
-
ITunes 模块支持
-
Slash 模块支持
-
content:encoded 与 RSS 2.0 支持
-
解释器实现
-
将块传递给
Proc[实验性]当前形态的实现已知存在错误/缺陷,尤其是在嵌套块调用方面。请将此视为一项实验性功能。
-
堆栈跟踪
对于非 SystemStackError 异常,将显示完整的堆栈跟踪。
兼容性问题(不包括功能性 bug 修复)
-
String#slice!存在一些无意中的错误,并且已得到修复,因为它们要么与文档不符,要么与 slice 的相应行为不符。不幸的是,这会在以下(一些罕见)情况下引起不兼容。-
当提供越界值时,slice! 不再扩展数组。
# Ruby 1.8.6 a = [1,2] a.slice!(4,0) #=> nil a #=> [1,2,nil,nil] # Ruby 1.8.7 a = [1,2] a.slice!(4,0) #=> nil a #=> [1,2]
-
当提供负长度或越界负位置时,slice! 不再引发异常,而是返回 nil。
# Ruby 1.8.6 a = [1,2] a.slice!(1,-1) #=> (raises IndexError) a.slice!(-5,1) #=> (raises IndexError) # Ruby 1.8.7 a = [1,2] a.slice!(1,-1) #=> nil a.slice!(-5,1) #=> nil
-
-
String#to_i、String#hex和String#oct不再接受下划线序列(‘__’)作为数字的一部分。# Ruby 1.8.6 '1__0'.to_i #=> 10 '1__0'.to_i(2) #=> 2 # 0b10 '1__0'.oct #=> 8 # 010 '1__0'.hex #=> 16 # 0x10 # Ruby 1.8.7 '1__0'.to_i #=> 1 '1__0'.to_i(2) #=> 1 '1__0'.oct #=> 1 '1__0'.hex #=> 1
旧行为与 Ruby 语法不一致,被视为一个错误。
-
date
-
‘##.##.##’ (其中每个 ‘#’ 都是一个数字) 现在被解释为 ‘YY.MM.DD’ 而不是 ‘MM.DD.YY’。虽然这个更改可能会让您感到困惑,但当您清楚您在处理什么时,始终可以使用
Date.strptime()。
-
-
REXML
-
REXML::Document.entity_expansion_limit=
设置实体展开限制的新方法。默认限制设置为 10000。有关详细信息,请参阅以下 URL。
www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/
-
-
stringio
-
返回值从 nil 更改为 self。这正是文档所说的,并且与 each_line() 的行为相同。
-
-
tempfile
-
文件名格式已更改。默认情况下,临时文件名中不再包含点。有关如何指定后缀,请参阅上方。
-
-
uri
-
有关详细信息,请参阅上方。
-
自 1.8.5 版本以来的更改
新平台/构建工具支持
-
IA64 HP-UX
-
Visual C++ 8 SP1
-
autoconf 2.6x
全局常量
-
RUBY_PATCHLEVEL
自 1.8.5-p1 以来的新常量。
库更新(仅列出重要的)
-
内置类
-
新方法:Kernel#instance_variable_defined?
-
新功能:
Dir::glob()现在可以接受 glob 模式数组。
-
-
date
-
基于 date2 4.0.3 更新。
-
-
digest
-
用于 C 和 Ruby 的新内部 API。
-
支持自动加载。
require 'digest' # autoloads digest/md5 md = Digest::MD5.digest("string")
-
新的 digest 类方法:file
-
新的 digest 实例方法:clone, reset, new, inspect, digest_length (别名 size 或 length), block_length()
-
新库:digest/bubblebabble
-
新函数:Digest(name)
-
-
fileutils
-
对
FileUtils.cp_r()的新选项::remove_destination
-
-
nkf
-
基于 2007-01-28 的 nkf 更新。
-
-
thread
-
用更快的 C 实现的互斥锁替换。以前的实现虽然慢但被认为稳定,可以通过配置选项 ‘–disable-fastthread’ 使用。
-
-
tk
-
基于 Tile 0.7.8 更新了 Tile 扩展支持。
-
支持 Tcl/Tk 的非 X11 版本的 –without-X11 配置选项(例如 Tcl/Tk Aqua)。
-
新的示例脚本:irbtkw.rbw – Ruby/Tk 上的 IRB。它没有关于 Windows 上 STDIN 阻塞的问题。
-
-
webrick
-
新方法:WEBrick::Cookie.parse_set_cookies()
-
兼容性问题(不包括功能性 bug 修复)
-
内置类
-
String#intern在 $SAFE 级别大于零时现在会引发SecurityError。
-
-
date
-
添加了
Time#to_date和Time#to_datetime作为私有方法。它们会导致 ActiveSupport 1.4.1 及更早版本(随 Rails 1.2.2 及更早版本一起提供)出现名称冲突错误。更新 ActiveSupport 和/或 Rails 到最新版本可以解决此问题。
-
-
digest
-
构造函数不再接受初始字符串进行馈送。以下示例显示了如何迁移
# Before md = Digest::MD5.new("string") # After (works with any version) md = Digest::MD5.new.update("string") # Before hd = Digest::MD5.new("string").hexdigest # After (works with any version) hd = Digest::MD5.hexdigest("string")
-
-
self == string
已删除二进制摘要值和十六进制摘要值之间的自动检测。比较时始终假定提供的是十六进制摘要值。
-
self == md
Digest对象通过结果摘要值进行比较,而不是通过精确的向量状态。
-
-
-
fileutils
-
一个小的实现更改破坏了 Rake <=0.7.1。将 Rake 更新到 0.7.2 或更高版本可以解决此问题。
-
-
tk
-
Tk::X_Scrollable (Y_Scrollable) 已重命名为 Tk::XScrollable (YScrollable)。Tk::X_Scrollable (Y_Scrollable) 仍然可用,但它是一个别名。
-