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
-
-
内置类
-
接受一个可选参数,用于确定扁平化的递归级别。
-
Array#<=>
正确处理递归数据。
-
如果没有给出参数,则使用给定的代码块。
-
如果没有给出代码块,则返回一个枚举器。
请注意,与 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::EC
-
OpenSSL::PKey::EC::Group
-
OpenSSL::PKey::EC::Point
-
OpenSSL::PKey::PKCS5
-
OpenSSL::SSL::Session
-
-
文档!
-
各种新方法(参见文档)。
-
删除 Cipher、Digest、PKCS7、PKCS12 中冗余的模块命名空间。提供兼容性类,这些类将在 Ruby 1.9 中删除。
-
-
shellwords
-
添加用于转义 shell 不安全字符的方法
-
Shellwords.join
-
Shellwords.escape
-
Array#shelljoin
-
String#shellescape
-
-
添加简写方法
-
Shellwords.split(别名 shellwords)
-
String#shellsplit
-
-
-
stringio
-
StringIO#getbyte
-
StringIO#readbyte
新方法。(与 1.9 兼容的别名)
-
StringIO#each_char
-
StringIO#chars
新方法。
-
StringIO#each
-
StringIO#each_line
-
StringIO#each_byte
如果没有给出代码块,则返回一个枚举器。
-
-
tempfile
-
Tempfile.open 和 Tempfile.new 现在接受要创建的临时文件的扩展名。要指定扩展名,请将 [basename, suffix] 数组作为第一个参数传递。
Tempfile.open(['image', 'jpg']) { |tempfile| ... }
-
-
tmpdir
-
新方法
-
Dir.mktmpdir
-
-
-
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 语法不一致,被认为是一个错误。
-
日期
-
Date.parse
现在将 ‘##.##.##’(其中每个 ‘#’ 代表一个数字)解释为 ‘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
-
StringIO#each_byte
返回值已从 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 版本更新。
-
-
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 扩展支持。
-
支持针对非 X11 版本的 Tcl/Tk(例如 Tcl/Tk Aqua)的 –without-X11 配置选项。
-
新增示例脚本:irbtkw.rbw – Ruby/Tk 上的 IRB。它在 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 更新到最新版本可以解决此问题。
-
-
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")
-
Digest::Base#==
-
self == string
已取消对二进制摘要值和十六进制摘要值之间自动检测的支持。现在始终假设比较时使用的是十六进制摘要值。
-
self == md
摘要对象通过生成的摘要值进行比较,而不是通过确切的向量状态。
-
-
-
fileutils
-
一个小的实现更改导致 Rake <=0.7.1 出现问题。将 Rake 更新到 0.7.2 或更高版本可以解决此问题。
-
-
tk
-
Tk::X_Scrollable (Y_Scrollable) 已重命名为 Tk::XScrollable (YScrollable)。Tk::X_Scrollable (Y_Scrollable) 仍然可用,但它是一个别名。
-