mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Add historical NEWS files for the record.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
303c28d49b
commit
cef2867e66
2 changed files with 839 additions and 0 deletions
635
doc/NEWS-1.8.7
Normal file
635
doc/NEWS-1.8.7
Normal file
|
@ -0,0 +1,635 @@
|
||||||
|
= NEWS
|
||||||
|
|
||||||
|
This document is a list of user visible feature changes made between
|
||||||
|
releases except for bug fixes.
|
||||||
|
|
||||||
|
Note that each entry is kept so brief that no reason behind or
|
||||||
|
reference information is supplied with. For a full list of changes
|
||||||
|
with all sufficient information, see the ChangeLog file.
|
||||||
|
|
||||||
|
== Changes since the 1.8.6 release
|
||||||
|
|
||||||
|
=== Configuration changes
|
||||||
|
|
||||||
|
* default C flags
|
||||||
|
|
||||||
|
Some C compiler flags may be added by default depending on your
|
||||||
|
environment. Specify optflags=.. and warnflags=.. as necessary to
|
||||||
|
override them.
|
||||||
|
|
||||||
|
* vendor_ruby directory
|
||||||
|
|
||||||
|
A new library directory named `vendor_ruby' is introduced in
|
||||||
|
addition to `site_ruby'. The idea is to separate libraries
|
||||||
|
installed by the package system (`vendor') from manually (`site')
|
||||||
|
installed libraries preventing the former from getting overwritten
|
||||||
|
by the latter, while preserving the user option to override vendor
|
||||||
|
libraries with site libraries. (`site_ruby' takes precedence over
|
||||||
|
`vendor_ruby')
|
||||||
|
|
||||||
|
If you are a package maintainer, make each library package configure
|
||||||
|
the library passing the `--vendor' option to `extconf.rb' so that
|
||||||
|
the library files will get installed under `vendor_ruby'.
|
||||||
|
|
||||||
|
You can change the directory locations using configure options such
|
||||||
|
as `--with-sitedir=DIR' and `--with-vendordir=DIR'.
|
||||||
|
|
||||||
|
=== Global constants
|
||||||
|
|
||||||
|
* new constants
|
||||||
|
|
||||||
|
* RUBY_COPYRIGHT
|
||||||
|
* RUBY_DESCRIPTION
|
||||||
|
|
||||||
|
=== Library updates (outstanding ones only)
|
||||||
|
|
||||||
|
* new library
|
||||||
|
|
||||||
|
* securerandom
|
||||||
|
|
||||||
|
* builtin classes
|
||||||
|
|
||||||
|
* Array#flatten
|
||||||
|
* Array#flatten!
|
||||||
|
|
||||||
|
Takes an optional argument that determines the level of recursion
|
||||||
|
to flatten.
|
||||||
|
|
||||||
|
* Array#eql?
|
||||||
|
* Array#hash
|
||||||
|
* Array#==
|
||||||
|
* Array#<=>
|
||||||
|
|
||||||
|
Handle recursive data properly.
|
||||||
|
|
||||||
|
* Array#index
|
||||||
|
* Array#rindex
|
||||||
|
|
||||||
|
Take a block instead of an argument.
|
||||||
|
|
||||||
|
* Array#collect!
|
||||||
|
* Array#map!
|
||||||
|
* Array#each
|
||||||
|
* Array#each_index
|
||||||
|
* Array#reverse_each
|
||||||
|
* Array#reject
|
||||||
|
* Array#reject!
|
||||||
|
* Array#delete_if
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
Note that #map and #collect still return an array unlike Ruby 1.9
|
||||||
|
to keep compatibility.
|
||||||
|
|
||||||
|
* Array#pop
|
||||||
|
* Array#shift
|
||||||
|
|
||||||
|
Take an optional argument specifying the number of elements to
|
||||||
|
remove.
|
||||||
|
|
||||||
|
* Array#choice
|
||||||
|
* Array#combination
|
||||||
|
* Array#cycle
|
||||||
|
* Array#drop
|
||||||
|
* Array#drop_while
|
||||||
|
* Array#permutation
|
||||||
|
* Array#product
|
||||||
|
* Array#shuffle
|
||||||
|
* Array#shuffle!
|
||||||
|
* Array#take,
|
||||||
|
* Array#take_while
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Binding#eval
|
||||||
|
|
||||||
|
New method.
|
||||||
|
|
||||||
|
* Dir#each
|
||||||
|
* Dir#foreach
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* Enumerable::Enumerator
|
||||||
|
|
||||||
|
New class for various enumeration defined by the enumerator library.
|
||||||
|
|
||||||
|
* Enumerable#each_slice
|
||||||
|
* Enumerable#each_cons
|
||||||
|
* Object#to_enum
|
||||||
|
* Object#enum_for
|
||||||
|
|
||||||
|
New methods for various enumeration defined by the enumerator library.
|
||||||
|
|
||||||
|
* Enumerable#count
|
||||||
|
* Enumerable#cycle
|
||||||
|
* Enumerable#drop
|
||||||
|
* Enumerable#drop_while
|
||||||
|
* Enumerable#find_index
|
||||||
|
* Enumerable#first
|
||||||
|
* Enumerable#group_by
|
||||||
|
* Enumerable#max_by
|
||||||
|
* Enumerable#min_by
|
||||||
|
* Enumerable#minmax
|
||||||
|
* Enumerable#minmax_by
|
||||||
|
* Enumerable#none?
|
||||||
|
* Enumerable#one?
|
||||||
|
* Enumerable#take
|
||||||
|
* Enumerable#take_while
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Enumerable#find
|
||||||
|
* Enumerable#find_all
|
||||||
|
* Enumerable#partition
|
||||||
|
* Enumerable#reject
|
||||||
|
* Enumerable#select
|
||||||
|
* Enumerable#sort_by
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
Note that #map and #collect still return an array unlike Ruby 1.9
|
||||||
|
to keep compatibility.
|
||||||
|
|
||||||
|
* Enumerable#inject
|
||||||
|
|
||||||
|
Accepts a binary operator instead of a block.
|
||||||
|
|
||||||
|
* Enumerable#reduce
|
||||||
|
|
||||||
|
New alias to #inject.
|
||||||
|
|
||||||
|
* Hash#eql?
|
||||||
|
* Hash#hash
|
||||||
|
* Hash#==
|
||||||
|
|
||||||
|
Handle recursive data properly.
|
||||||
|
|
||||||
|
* Hash#delete_if
|
||||||
|
* Hash#each
|
||||||
|
* Hash#each_key
|
||||||
|
* Hash#each_pair
|
||||||
|
* Hash#each_value
|
||||||
|
* Hash#reject!
|
||||||
|
* Hash#select
|
||||||
|
* ENV.delete_if
|
||||||
|
* ENV.each
|
||||||
|
* ENV.each_key
|
||||||
|
* ENV.each_pair
|
||||||
|
* ENV.each_value
|
||||||
|
* ENV.reject!
|
||||||
|
* ENV.select
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* GC.stress
|
||||||
|
* GC.stress=
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Integer#ord
|
||||||
|
* Integer#odd?
|
||||||
|
* Integer#even?
|
||||||
|
* Integer#pred
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Integer#downto
|
||||||
|
* Integer#times
|
||||||
|
* Integer#upto
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* IO#each
|
||||||
|
* IO#each_line
|
||||||
|
* IO#each_byte
|
||||||
|
* IO.foreach
|
||||||
|
* ARGF.each
|
||||||
|
* ARGF.each_line
|
||||||
|
* ARGF.each_byte
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* IO#bytes
|
||||||
|
* IO#chars
|
||||||
|
* IO#each_char
|
||||||
|
* IO#getbyte
|
||||||
|
* IO#lines
|
||||||
|
* IO#readbyte
|
||||||
|
* ARGF.bytes
|
||||||
|
* ARGF.chars
|
||||||
|
* ARGF.each_char
|
||||||
|
* ARGF.getbyte
|
||||||
|
* ARGF.lines
|
||||||
|
* ARGF.readbyte
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Method#name
|
||||||
|
* Method#owner
|
||||||
|
* Method#receiver
|
||||||
|
* UnboundMethod#name
|
||||||
|
* UnboundMethod#owner
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Module#class_exec
|
||||||
|
* Module#module_exec
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* Numeric#step
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* Object#instance_exec
|
||||||
|
* Object#tap
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* ObjectSpace.each_object
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* Process.exec implemented.
|
||||||
|
|
||||||
|
* Range#each
|
||||||
|
* Range#step
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* Regexp.union accepts an array of patterns.
|
||||||
|
|
||||||
|
* String#bytesize
|
||||||
|
|
||||||
|
New method, returning the size in bytes. (alias length and size)
|
||||||
|
|
||||||
|
* String#chars
|
||||||
|
* String#each_char
|
||||||
|
* String#partition
|
||||||
|
* String#rpartition
|
||||||
|
* String#start_with?
|
||||||
|
* String#end_with?
|
||||||
|
|
||||||
|
New methods. These are $KCODE aware unlike #index, #rindex and
|
||||||
|
#include?.
|
||||||
|
|
||||||
|
* String#each_byte
|
||||||
|
* String#each
|
||||||
|
* String#each_line
|
||||||
|
* String#gsub(pattern)
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* String#upto
|
||||||
|
|
||||||
|
An optional second argument is added to specify if the last value
|
||||||
|
should be included.
|
||||||
|
|
||||||
|
* StopIteration
|
||||||
|
|
||||||
|
New exception class that causes Kernel#loop to stop iteration when
|
||||||
|
raised.
|
||||||
|
|
||||||
|
* Struct#each
|
||||||
|
* Struct#each_pair
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* Symbol#to_proc
|
||||||
|
|
||||||
|
New method.
|
||||||
|
|
||||||
|
* __method__
|
||||||
|
|
||||||
|
New global function that returns the name of the current method as
|
||||||
|
a Symbol.
|
||||||
|
|
||||||
|
* enumerator
|
||||||
|
|
||||||
|
* Enumerator is now a built-in module. The #next and #rewind
|
||||||
|
methods are implemented using the "generator" library. Use with
|
||||||
|
care and be aware of the performance loss.
|
||||||
|
|
||||||
|
* ipaddr
|
||||||
|
|
||||||
|
* New methods
|
||||||
|
* IPAddr#<=>
|
||||||
|
* IPAddr#succ
|
||||||
|
|
||||||
|
IPAddr objects are now comparable and enumerable having these
|
||||||
|
methods. This also means that it is possible to have a Range
|
||||||
|
object between two IPAddr objects.
|
||||||
|
|
||||||
|
* IPAddr#to_range
|
||||||
|
|
||||||
|
A new method to create a Range object for the (network) address.
|
||||||
|
|
||||||
|
* Type coercion support
|
||||||
|
* IPAddr#&
|
||||||
|
* IPAddr#|
|
||||||
|
* IPAddr#==
|
||||||
|
* IPAddr#include?
|
||||||
|
|
||||||
|
These methods now accept a string or an integer instead of an
|
||||||
|
IPAddr object as the argument.
|
||||||
|
|
||||||
|
* net/smtp
|
||||||
|
|
||||||
|
* Support SSL/TLS.
|
||||||
|
|
||||||
|
* openssl
|
||||||
|
|
||||||
|
* New classes
|
||||||
|
* OpenSSL::PKey::EC
|
||||||
|
* OpenSSL::PKey::EC::Group
|
||||||
|
* OpenSSL::PKey::EC::Point
|
||||||
|
* OpenSSL::PKey::PKCS5
|
||||||
|
* OpenSSL::SSL::Session
|
||||||
|
|
||||||
|
* Documentation!
|
||||||
|
|
||||||
|
* Various new methods (see documentation).
|
||||||
|
|
||||||
|
* Remove redundant module namespace in Cipher, Digest, PKCS7, PKCS12.
|
||||||
|
Compatibility classes are provided which will be removed in Ruby 1.9.
|
||||||
|
|
||||||
|
* shellwords
|
||||||
|
|
||||||
|
* Add methods for escaping shell-unsafe characters:
|
||||||
|
* Shellwords.join
|
||||||
|
* Shellwords.escape
|
||||||
|
* Array#shelljoin
|
||||||
|
* String#shellescape
|
||||||
|
|
||||||
|
* Add shorthand methods:
|
||||||
|
* Shellwords.split (alias shellwords)
|
||||||
|
* String#shellsplit
|
||||||
|
|
||||||
|
* stringio
|
||||||
|
|
||||||
|
* StringIO#getbyte
|
||||||
|
* StringIO#readbyte
|
||||||
|
|
||||||
|
New methods. (aliases for compatibility with 1.9)
|
||||||
|
|
||||||
|
* StringIO#each_char
|
||||||
|
* StringIO#chars
|
||||||
|
|
||||||
|
New methods.
|
||||||
|
|
||||||
|
* StringIO#each
|
||||||
|
* StringIO#each_line
|
||||||
|
* StringIO#each_byte
|
||||||
|
|
||||||
|
Return an enumerator if no block is given.
|
||||||
|
|
||||||
|
* tempfile
|
||||||
|
|
||||||
|
* Tempfile.open and Tempfile.new now accept a suffix for the
|
||||||
|
temporary file to be created. To specify a suffix, pass an array
|
||||||
|
of [basename, suffix] as the first argument.
|
||||||
|
|
||||||
|
Tempfile.open(['image', 'jpg']) { |tempfile| ... }
|
||||||
|
|
||||||
|
* tmpdir
|
||||||
|
|
||||||
|
* New method:
|
||||||
|
|
||||||
|
* Dir.mktmpdir
|
||||||
|
|
||||||
|
* uri
|
||||||
|
|
||||||
|
* added LDAPS scheme.
|
||||||
|
* Change for RFC3986:
|
||||||
|
* FTP
|
||||||
|
* URI('ftp://example.com/foo').path #=> 'foo'
|
||||||
|
* URI('ftp://example.com/%2Ffoo').path #=> '/foo'
|
||||||
|
* URI::FTP.build([nil, 'example.com', nil, '/foo', 'i').to_s #=> 'ftp://example.com/%2Ffoo;type=i'
|
||||||
|
* URI merge
|
||||||
|
* URI('http://a/b/c/d;p?q').merge('?y') == URI('http://a/b/c/d;p?y')
|
||||||
|
* URI('http://a/b/c/d;p?q').merge('/./g') == URI('http://a/g')
|
||||||
|
* URI('http://a/b/c/d;p?q').merge('/../g') == URI('http://a/g')
|
||||||
|
* URI('http://a/b/c/d;p?q').merge('../../../g') == URI('http://a/g')
|
||||||
|
* URI('http://a/b/c/d;p?q').merge('../../../../g') == URI('http://a/g')
|
||||||
|
|
||||||
|
* rss
|
||||||
|
|
||||||
|
* 0.1.6 -> 0.2.4
|
||||||
|
|
||||||
|
* Fix image module URI
|
||||||
|
|
||||||
|
* Atom support
|
||||||
|
|
||||||
|
* ITunes module support
|
||||||
|
|
||||||
|
* Slash module support
|
||||||
|
|
||||||
|
* content:encoded with RSS 2.0 support
|
||||||
|
|
||||||
|
=== Interpreter Implementation
|
||||||
|
|
||||||
|
* passing a block to a Proc [experimental]
|
||||||
|
|
||||||
|
This implementation in current shape is known to be buggy/broken,
|
||||||
|
especially with nested block invocation. Take this as an
|
||||||
|
experimental feature.
|
||||||
|
|
||||||
|
* stack trace
|
||||||
|
|
||||||
|
On non-SystemStackError exception, full stack trace is shown.
|
||||||
|
|
||||||
|
=== Compatibility issues (excluding feature bug fixes)
|
||||||
|
|
||||||
|
* String#slice! had some unintentional bugs and they have been fixed
|
||||||
|
because either they disagreed with documentation or their respective
|
||||||
|
behavior of #slice. Unfortunately, this causes some
|
||||||
|
incompatibilities in the following (somewhat rare) cases.
|
||||||
|
|
||||||
|
* #slice! no longer expands the array when an out-of-boundary value
|
||||||
|
is given.
|
||||||
|
|
||||||
|
# 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! no longer raises an exception but returns nil when a
|
||||||
|
negative length or out-of-boundary negative position is given.
|
||||||
|
|
||||||
|
# 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 and String#oct no longer accept a sequence
|
||||||
|
of underscores (`__') as part of a number.
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
The old behavior was inconsistent with Ruby syntax and considered as
|
||||||
|
a bug.
|
||||||
|
|
||||||
|
* date
|
||||||
|
|
||||||
|
* Date.parse
|
||||||
|
|
||||||
|
'##.##.##' (where each '#' is a digit) is now taken as 'YY.MM.DD'
|
||||||
|
instead of 'MM.DD.YY'. While the change may confuse you, you can
|
||||||
|
always use Date.strptime() when you know what you are dealing
|
||||||
|
with.
|
||||||
|
|
||||||
|
* stringio
|
||||||
|
|
||||||
|
* StringIO#each_byte
|
||||||
|
|
||||||
|
The return value changed from nil to self. This is what the
|
||||||
|
document says and the same as each_line() does.
|
||||||
|
|
||||||
|
* tempfile
|
||||||
|
|
||||||
|
* The file name format has changed. No dots are included by default
|
||||||
|
in temporary file names any more. See above for how to specify a
|
||||||
|
suffix.
|
||||||
|
|
||||||
|
* uri
|
||||||
|
|
||||||
|
* See above for details.
|
||||||
|
|
||||||
|
== Changes since the 1.8.5 release
|
||||||
|
|
||||||
|
=== New platforms/build tools support
|
||||||
|
|
||||||
|
* IA64 HP-UX
|
||||||
|
|
||||||
|
* Visual C++ 8 SP1
|
||||||
|
|
||||||
|
* autoconf 2.6x
|
||||||
|
|
||||||
|
=== Global constants
|
||||||
|
|
||||||
|
* RUBY_PATCHLEVEL
|
||||||
|
|
||||||
|
New constant since 1.8.5-p1.
|
||||||
|
|
||||||
|
=== Library updates (outstanding ones only)
|
||||||
|
|
||||||
|
* builtin classes
|
||||||
|
|
||||||
|
* New method: Kernel#instance_variable_defined?
|
||||||
|
|
||||||
|
* New method: Module#class_variable_defined?
|
||||||
|
|
||||||
|
* New feature: Dir::glob() can now take an array of glob patterns.
|
||||||
|
|
||||||
|
* date
|
||||||
|
|
||||||
|
* Updated based on date2 4.0.3.
|
||||||
|
|
||||||
|
* digest
|
||||||
|
|
||||||
|
* New internal APIs for C and Ruby.
|
||||||
|
|
||||||
|
* Support for autoloading.
|
||||||
|
|
||||||
|
require 'digest'
|
||||||
|
|
||||||
|
# autoloads digest/md5
|
||||||
|
md = Digest::MD5.digest("string")
|
||||||
|
|
||||||
|
* New digest class methods: file
|
||||||
|
|
||||||
|
* New digest instance methods: clone, reset, new, inspect,
|
||||||
|
digest_length (alias size or length), block_length()
|
||||||
|
|
||||||
|
* New library: digest/bubblebabble
|
||||||
|
|
||||||
|
* New function: Digest(name)
|
||||||
|
|
||||||
|
* fileutils
|
||||||
|
|
||||||
|
* New option for FileUtils.cp_r(): :remove_destination
|
||||||
|
|
||||||
|
* nkf
|
||||||
|
|
||||||
|
* Updated based on nkf as of 2007-01-28.
|
||||||
|
|
||||||
|
* thread
|
||||||
|
|
||||||
|
* Replaced with much faster mutex implementation in C. The former
|
||||||
|
implementation, which is slow but considered to be stable, is
|
||||||
|
available with a configure option `--disable-fastthread'.
|
||||||
|
|
||||||
|
* tk
|
||||||
|
|
||||||
|
* Updated Tile extension support based on Tile 0.7.8.
|
||||||
|
|
||||||
|
* Support --without-X11 configure option for non-X11 versions of
|
||||||
|
Tcl/Tk (e.g. Tcl/Tk Aqua).
|
||||||
|
|
||||||
|
* New sample script: irbtkw.rbw -- IRB on Ruby/Tk. It has no trouble
|
||||||
|
about STDIN blocking on Windows.
|
||||||
|
|
||||||
|
* webrick
|
||||||
|
|
||||||
|
* New method: WEBrick::Cookie.parse_set_cookies()
|
||||||
|
|
||||||
|
=== Compatibility issues (excluding feature bug fixes)
|
||||||
|
|
||||||
|
* builtin classes
|
||||||
|
|
||||||
|
* String#intern now raises SecurityError when $SAFE level is greater
|
||||||
|
than zero.
|
||||||
|
|
||||||
|
* date
|
||||||
|
|
||||||
|
* Time#to_date and Time#to_datetime are added as private methods.
|
||||||
|
They cause name conflict error in ActiveSupport 1.4.1 and prior,
|
||||||
|
which comes with Rails 1.2.2 and prior. Updating ActiveSupport
|
||||||
|
and/or Rails to the latest versions fixes the problem.
|
||||||
|
|
||||||
|
* digest
|
||||||
|
|
||||||
|
* The constructor does no longer take an initial string to feed.
|
||||||
|
The following examples show how to migrate:
|
||||||
|
|
||||||
|
# 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")
|
||||||
|
|
||||||
|
* fileutils
|
||||||
|
|
||||||
|
* A minor implementation change breaks Rake <=0.7.1.
|
||||||
|
Updating Rake to 0.7.2 or higher fixes the problem.
|
||||||
|
|
||||||
|
* tk
|
||||||
|
|
||||||
|
* Tk::X_Scrollable (Y_Scrollable) is renamed to Tk::XScrollable
|
||||||
|
(YScrollable). Tk::X_Scrollable (Y_Scrollable) is still available,
|
||||||
|
but it is an alias name.
|
204
doc/NEWS-1.9.1
Normal file
204
doc/NEWS-1.9.1
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
= NEWS
|
||||||
|
|
||||||
|
This document is a list of user visible feature changes made between
|
||||||
|
releases except for bug fixes.
|
||||||
|
|
||||||
|
Note that each entry is kept so brief that no reason behind or
|
||||||
|
reference information is supplied with. For a full list of changes
|
||||||
|
with all sufficient information, see the ChangeLog file.
|
||||||
|
|
||||||
|
== Changes since the 1.8.7 release
|
||||||
|
|
||||||
|
=== Compatibility issues
|
||||||
|
|
||||||
|
* language core
|
||||||
|
|
||||||
|
* New syntax and semantics
|
||||||
|
o Block arguments are always local
|
||||||
|
o Block arguments
|
||||||
|
o New semantics for block arguments
|
||||||
|
o Block local variables
|
||||||
|
o Method used for splat arguments: #to_splat
|
||||||
|
o defined? and local variables
|
||||||
|
|
||||||
|
* builtin classes and objects
|
||||||
|
|
||||||
|
* Kernel and Object
|
||||||
|
o Kernel#require
|
||||||
|
* Class and Module
|
||||||
|
o Class variables behavior
|
||||||
|
o Module#attr is an alias of attr_reader
|
||||||
|
o Module#instance_methods, #private_instance_methods, #public_instance_methods
|
||||||
|
o Extra subclassing check when binding UnboundMethods
|
||||||
|
* Exceptions
|
||||||
|
o Equality of exceptions
|
||||||
|
o SystemStackError
|
||||||
|
o SecurityError
|
||||||
|
o Removed Exception#to_str [Ruby2]
|
||||||
|
|
||||||
|
* Array
|
||||||
|
o Array#nitems was removed (use count {|i| !i.nil?})
|
||||||
|
o Array#choice was removed (use sample)
|
||||||
|
o Array#[m,n] = nil places nil in the array.
|
||||||
|
* Enumerable and Enumerator
|
||||||
|
o Enumerable#map,collect_all called without a block returns
|
||||||
|
an enumerator.
|
||||||
|
* File and Dir operations
|
||||||
|
o #to_path in File.path, File.chmod, File.lchmod, File.chown, File.lchown, File.utime, File.unlink... [Ruby2]
|
||||||
|
o Dir.[], Dir.glob
|
||||||
|
o Dir.exist?
|
||||||
|
* String
|
||||||
|
o No longer an Enumerable
|
||||||
|
o ?c semantics
|
||||||
|
o "One-char-wide" semantics for String#[] and String#[]= [Ruby2]
|
||||||
|
o Encoding-awareness
|
||||||
|
* Hash
|
||||||
|
o Hash#to_s is equivalent to Hash#inspect
|
||||||
|
o Semantics for Hash#each and Hash#each_pair
|
||||||
|
o Hash#select returns a hash
|
||||||
|
o Hash#key is the new name for #index which has been deprecated.
|
||||||
|
o Most of the changes in Hash apply to hash like interfaces such as
|
||||||
|
ENV and *DBM.
|
||||||
|
* Integer
|
||||||
|
o Integer(nil) raises TypeError
|
||||||
|
* IO operations
|
||||||
|
o IO#getc
|
||||||
|
o Non-blocking IO
|
||||||
|
o Kernel#open takes "t" for newline conversion
|
||||||
|
o Kernel#open takes encoding specified
|
||||||
|
o IO#initialize now accepts an IO argument
|
||||||
|
o StringIO#readpartial
|
||||||
|
o IO.try_convert
|
||||||
|
o Limit input in IO#gets, IO#readline, IO#readlines, IO#each_line, IO#lines, IO.foreach, IO.readlines, StringIO#gets, StringIO#readline, StringIO#each, StringIO#readlines
|
||||||
|
o IO#ungetc, StringIO#ungetc
|
||||||
|
o IO#internal_encoding, IO#external_encoding, IO#set_encoding
|
||||||
|
o IO.pipe takes encoding option
|
||||||
|
* Time
|
||||||
|
o New format in Time#to_s
|
||||||
|
o Timezone information preserved on Marshal.dump/load
|
||||||
|
* Struct
|
||||||
|
o Struct#inspect
|
||||||
|
* Symbols: restriction on literal symbols
|
||||||
|
* $SAFE and bound methods
|
||||||
|
* Deprecation
|
||||||
|
o VERSION and friends
|
||||||
|
o Kernel.to_a
|
||||||
|
o Kernel#getc
|
||||||
|
o Object#type
|
||||||
|
o Hash#index
|
||||||
|
o ENV.index
|
||||||
|
o Symbol#to_int
|
||||||
|
o Removed Array and Hash #indices, #indexes
|
||||||
|
o libraries: base64, mailread, getopts, parsearg, soap, wsdl
|
||||||
|
|
||||||
|
* bundled libraries
|
||||||
|
|
||||||
|
* Readline
|
||||||
|
o If Readline uses libedit, Readline::HISTORY[0] returns the first of the history.
|
||||||
|
|
||||||
|
=== Language core changes
|
||||||
|
|
||||||
|
* New syntax and semantics
|
||||||
|
o New literal hash syntax
|
||||||
|
o New syntax for lambdas
|
||||||
|
o .() and calling Procs without #call/#[]
|
||||||
|
o Mandatory arguments after optional arguments allowed
|
||||||
|
o Multiple splats allowed
|
||||||
|
o Arguments to #[]
|
||||||
|
o printf-style formatted strings (%)
|
||||||
|
o Newlines allowed before ternary colon
|
||||||
|
|
||||||
|
=== Library updates
|
||||||
|
|
||||||
|
* Kernel and Object
|
||||||
|
o BasicObject
|
||||||
|
o Object#=~
|
||||||
|
o Kernel#instance_variable_defined?
|
||||||
|
o Kernel#define_singleton_method
|
||||||
|
o Kernel#singleton_methods, Kernel#methods
|
||||||
|
* Class and Module
|
||||||
|
o Module#const_defined?, #const_get and #method_defined?
|
||||||
|
o Module#class_variable_defined?
|
||||||
|
o #class_variable_{set,get}
|
||||||
|
o Class of singleton classes
|
||||||
|
* Binding#eval
|
||||||
|
* Blocks and Procs
|
||||||
|
o Arity of blocks without arguments
|
||||||
|
o proc is now a synonym of Proc.new
|
||||||
|
* Blocks and Procs
|
||||||
|
o Proc#yield
|
||||||
|
o Passing blocks to #[]
|
||||||
|
o Proc#lambda?
|
||||||
|
* Enumerable and Enumerator
|
||||||
|
o Enumerable#each_with_object [experimental]
|
||||||
|
o Enumerator#with_object
|
||||||
|
o Enumerator.new { ... }
|
||||||
|
* Regexp#match, String#match
|
||||||
|
o Regexp#match, String#match
|
||||||
|
* Encoding
|
||||||
|
* Encoding::Converter
|
||||||
|
* Fiber: coroutines/micro-threads
|
||||||
|
* Array
|
||||||
|
o Array#delete returns a deleted element rather than a given
|
||||||
|
object
|
||||||
|
o Array#to_s is equivalent to Array#inspect
|
||||||
|
o Array.try_convert
|
||||||
|
* Hash
|
||||||
|
o preserving item insertion order
|
||||||
|
o Hash#default_proc=
|
||||||
|
o Hash#_compare_by_identity and Hash#compare_by_identity?
|
||||||
|
o Hash.try_convert
|
||||||
|
* Numeric
|
||||||
|
o Numeric#upto, #downto, #times, #step
|
||||||
|
o Numeric#scalar?, Complex#scalar?
|
||||||
|
o Numeric#div
|
||||||
|
o Numeric#fdiv
|
||||||
|
* Range
|
||||||
|
o Range#cover?
|
||||||
|
o Range#include? iterates over elements and compares the
|
||||||
|
given value with each element unless the range is numeric.
|
||||||
|
Use Range#cover? for the old behavior, i.e. comparison
|
||||||
|
with boundary values.
|
||||||
|
o Range#min, Range#max
|
||||||
|
* Regexp
|
||||||
|
o Regexp#=== matches symbols
|
||||||
|
o Regexp.try_convert
|
||||||
|
* String
|
||||||
|
o String#clear
|
||||||
|
o String#ord
|
||||||
|
o String#getbyte, String#setbyte
|
||||||
|
o String#encoding
|
||||||
|
o String#force_encoding
|
||||||
|
o String#unpack with a block
|
||||||
|
o String#hash
|
||||||
|
o String.try_convert
|
||||||
|
o String.encoding, String#force_encoding, String#encode
|
||||||
|
* Symbol
|
||||||
|
o Zero-length symbols allowed
|
||||||
|
o Symbol#=== matches strings
|
||||||
|
o Symbol#intern
|
||||||
|
o Symbol#encoding
|
||||||
|
o Symbol methods similar to those in String
|
||||||
|
* Math
|
||||||
|
o Math#log and Math#log2
|
||||||
|
* File and Dir operations
|
||||||
|
o New methods
|
||||||
|
* Process
|
||||||
|
o Process.daemon
|
||||||
|
* Readline
|
||||||
|
o Readline.vi_editing_mode?
|
||||||
|
o Readline.emacs_editing_mode?
|
||||||
|
o Readline::HISTORY.clear
|
||||||
|
* Misc. new methods
|
||||||
|
o public_send
|
||||||
|
o GC.count
|
||||||
|
o ObjectSpace.count_objects
|
||||||
|
o Method#hash, Proc#hash
|
||||||
|
o __callee__
|
||||||
|
|
||||||
|
=== Implementation changes
|
||||||
|
|
||||||
|
* Memory Diet
|
||||||
|
* Object Compaction - Object, Array, String, Hash, Struct, Class, Module
|
||||||
|
* st_table compaction (inlining small tables)
|
||||||
|
* YARV
|
Loading…
Add table
Add a link
Reference in a new issue