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…
Reference in a new issue