NEWS for Ruby 1.8.7¶ ↑
本文件列出了版本之间用户可见的功能变更,不包括错误修复。
请注意,每个条目都非常简短,没有提供背后的原因或参考信息。有关所有变更的完整列表以及所有必要的信息,请参阅 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
-
-
内置类
-
接受一个可选参数,用于确定扁平化的递归级别。
-
正确处理递归数据。
-
如果没有给出参数,则使用给定的块。
-
如果没有给出块,则返回一个枚举器。
请注意,与 Ruby 1.9 不同,map 和 collect 仍然返回一个数组,以保持兼容性。
-
接受一个可选参数,用于指定要删除的元素数量。
-
Array#choice
-
新方法。
-
新方法。
-
Dir#foreach
如果没有给出块,则返回一个枚举器。
-
枚举器库定义的各种枚举的新类。
-
枚举器库定义的各种枚举的新方法。
-
新方法。
-
如果没有给出块,则返回一个枚举器。
请注意,与 Ruby 1.9 不同,map 和 collect 仍然返回一个数组,以保持兼容性。
-
接受二元运算符而不是代码块。
-
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
现在是一个内置模块。next 和 rewind 方法使用“生成器”库实现。谨慎使用,并注意性能损失。
-
-
ipaddr
-
net/smtp
-
支持 SSL/TLS。
-
-
openssl
-
新类
-
OpenSSL::PKey::PKCS5
-
文档!
-
各种新方法(参见文档)。
-
删除 Cipher、
Digest
、PKCS7、PKCS12 中冗余的模块命名空间。提供了兼容性类,这些类将在 Ruby 1.9 中删除。
-
-
shellwords
-
添加用于转义 shell 不安全字符的方法
-
添加简写方法
-
Shellwords.split
(别名 shellwords)
-
-
-
stringio
-
新方法。(与 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 模块支持
-
RSS 2.0 支持 content:encoded
-
解释器实现¶ ↑
-
将块传递给
Proc
[实验性]目前这种实现已知存在错误/损坏,尤其是在嵌套块调用时。将其视为一项实验性功能。
-
堆栈跟踪
在非 SystemStackError 异常时,将显示完整的堆栈跟踪。
兼容性问题(不包括功能错误修复)¶ ↑
-
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 语法不一致,被认为是错误。
-
日期
-
‘##.##.##’(其中每个 ‘#’ 都是一个数字)现在被视为 ‘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 模式数组。
-
-
日期
-
基于 date2 4.0.3 更新。
-
-
摘要
-
新增用于 C 和 Ruby 的内部 API。
-
支持自动加载。
require 'digest' # autoloads digest/md5 md = Digest::MD5.digest("string")
-
新增摘要类方法:file
-
新增摘要实例方法:clone、reset、new、inspect、digest_length(别名 size 或 length)、block_length()
-
新增库:digest/bubblebabble
-
新增函数:Digest(name)
-
-
文件工具
-
新增
FileUtils.cp_r()
选项::remove_destination
-
-
nkf
-
基于截至 2007-01-28 的 nkf 更新。
-
-
线程
-
用 C 中更快的互斥锁实现替换。以前的实现速度较慢,但被认为是稳定的,可以通过配置选项“–disable-fastthread”使用。
-
-
tk
-
基于 Tile 0.7.8 更新 Tile 扩展支持。
-
支持针对非 X11 版本的 Tcl/Tk(例如 Tcl/Tk Aqua)的 –without-X11 配置选项。
-
新增示例脚本:irbtkw.rbw –
IRB
on Ruby/Tk。它在 Windows 上不会出现 STDIN 阻塞问题。
-
-
webrick
-
新增方法:WEBrick::Cookie.parse_set_cookies()
-
兼容性问题(不包括功能错误修复)¶ ↑
-
内置类
-
String#intern
现在在 $SAFE 级别大于零时引发SecurityError
。
-
-
日期
-
Time#to_date
和Time#to_datetime
已添加为私有方法。它们在 ActiveSupport 1.4.1 及更早版本(随 Rails 1.2.2 及更早版本提供)中会导致名称冲突错误。将 ActiveSupport 和/或 Rails 更新到最新版本可以解决此问题。
-
-
摘要
-
构造函数不再接受用于馈送的初始字符串。以下示例展示了如何迁移
# 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
对象通过其生成的摘要值进行比较,而不是通过其确切的向量状态。
-
-
-
文件工具
-
一个小的实现更改导致 Rake <=0.7.1 出现问题。将 Rake 更新到 0.7.2 或更高版本可以解决此问题。
-
-
tk
-
Tk::X_Scrollable (Y_Scrollable) 已重命名为 Tk::XScrollable (YScrollable)。Tk::X_Scrollable (Y_Scrollable) 仍然可用,但它是一个别名。
-