mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 60d6d93b28
			
		
	
	
		60d6d93b28
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28182 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			475 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			475 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # -*- rd -*-
 | |
| = 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.9.1 release
 | |
| === Library updates (outstanding ones only)
 | |
| 
 | |
| * builtin classes
 | |
| 
 | |
|   * Array
 | |
|     * new method:
 | |
|       * Array#keep_if
 | |
|       * Array#repeated_combination
 | |
|       * Array#repeated_permutation
 | |
|       * Array#rotate
 | |
|       * Array#rotate!
 | |
|       * Array#select!
 | |
|       * Array#sort_by!
 | |
| 
 | |
|     * extended methods:
 | |
|       * Array#{uniq,uniq!,product} can take a block.
 | |
| 
 | |
|   * Complex
 | |
|     * new methods:
 | |
|       * Complex#rationalize
 | |
| 
 | |
|   * Dir
 | |
|     * new method:
 | |
|       * Dir.home
 | |
| 
 | |
|   * Encoding
 | |
|     * new encodings:
 | |
|       * Big5
 | |
|       * Big5-UAO
 | |
|       * ISO-2022-JP-KDDI
 | |
|       * SJIS-DoCoMo
 | |
|       * SJIS-KDDI
 | |
|       * SJIS-SoftBank
 | |
|       * UTF8-DoCoMo
 | |
|       * UTF8-KDDI
 | |
|       * UTF8-SoftBank
 | |
| 
 | |
|     * new method:
 | |
|       * ascii_compatible?
 | |
| 
 | |
|   * Enumerable
 | |
|     * New methods:
 | |
|       * Enumerable#chunk
 | |
|       * Enumerable#collect_concat
 | |
|       * Enumerable#each_entry
 | |
|       * Enumerable#flat_map
 | |
|       * Enumerable#slice_before
 | |
| 
 | |
|   * Enumerator
 | |
|     * new methods:
 | |
|       * Enumerator#peek
 | |
|       * Enumerator#next_values
 | |
|       * Enumerator#peek_values
 | |
|       * Enumerator#feed
 | |
|       * StopIteration#result
 | |
| 
 | |
|     * extended methods:
 | |
|       * #with_index accepts an optional argument that specifies the
 | |
|         index number to start with, defaulted to 0.
 | |
| 
 | |
|     * incompatible changes:
 | |
|       * #rewind now calls the "rewind" method of the enclosed object
 | |
|         if defined.
 | |
|       * #next doesn't clear the position at end.
 | |
| 
 | |
|   * ENV
 | |
|     * Uses locale's encoding
 | |
|     * ENV.[]= raises Errno::{EINVAL,ENOMEM} etc. on failure.
 | |
|     * new methods:
 | |
|       * ENV.keep_if
 | |
|       * ENV.select!
 | |
| 
 | |
|   * Float
 | |
|     * new constants:
 | |
|       * Float::INFINITY
 | |
|       * Float::NAN
 | |
|     * new methods:
 | |
|       * Float#rationalize
 | |
| 
 | |
|   * File
 | |
|     * new methods:
 | |
|       * File.realpath
 | |
|       * File.realdirpath
 | |
| 
 | |
|   * GC::Profiler
 | |
|     * new method:
 | |
|       * GC::Profiler.total_time
 | |
| 
 | |
|   * Hash
 | |
|     * new methods:
 | |
|       * Hash#keep_if
 | |
|       * Hash#select!
 | |
| 
 | |
|   * IO
 | |
|     * new method:
 | |
|       * IO#autoclose=
 | |
|       * IO#autoclose?
 | |
|       * IO#fdatasync
 | |
|       * IO#codepoints
 | |
|       * IO#each_codepoint
 | |
| 
 | |
|     * extended methods:
 | |
|       * IO.pipe can take a block.
 | |
| 
 | |
|     * new modules:
 | |
|       * IO::WaitReadable
 | |
|       * IO::WaitWritable
 | |
|         They are used to extend non-blocking exceptions.
 | |
| 
 | |
|   * Integer
 | |
|     * new methods:
 | |
|       * Integer#rationalize
 | |
| 
 | |
|   * Kernel
 | |
|     * new method:
 | |
|       * Kernel#respond_to_missing?
 | |
|       * Kernel#singleton_class
 | |
| 
 | |
|   * MatchData
 | |
|     * New method:
 | |
|       * MatchData#==
 | |
| 
 | |
|   * NilClass
 | |
|     * new methods:
 | |
|       * NilClass#rationalize
 | |
| 
 | |
|   * Object
 | |
|     * extended methods:
 | |
|       * Float() supports hexadecimal floating point format.
 | |
|       * printf() supports %a/%A format.
 | |
| 
 | |
|   * Proc
 | |
|     * extended method:
 | |
|       * Proc#source_location returns location even if receiver is a method
 | |
|         defined by attr_reader / attr_writer / attr_accessor.
 | |
| 
 | |
|   * Process
 | |
|     * extended methods:
 | |
|       * Process.spawn accepts [:child, FD] for a redirect target.
 | |
| 
 | |
|   * Random (new class to generate pseudo-random numbers)
 | |
| 
 | |
|   * Rational
 | |
|     * new methods:
 | |
|       * Rational#rationalize
 | |
| 
 | |
|   * String
 | |
|     * extended methods:
 | |
|       * string[regexp, name] is supported for named capture.
 | |
| 
 | |
|   * Thread
 | |
|     * new methods:
 | |
|       * Thread#add_trace_func
 | |
|       * Thread#set_trace_func
 | |
| 
 | |
|   * Time
 | |
|     * extended feature:
 | |
|       * time_t restriction is removed to represent before 1901 and after 2038.
 | |
|         Proleptic Gregorian calendar is used for old dates.
 | |
|       * Time.new have optional arguments to specify date with time offset.
 | |
|       * Time#getlocal, Time#localtime have optional time offset argument.
 | |
| 
 | |
|     * new method:
 | |
|       * Time#to_r
 | |
|       * Time#subsec
 | |
|       * Time#round
 | |
| 
 | |
|     * incompatible changes:
 | |
|       * The year argument of Time.{utc,gm,local,mktime} is now interpreted as
 | |
|         the value itself.  For example, Time.utc(99) means the year 99 AD,
 | |
|         not 1999 AD.
 | |
| 
 | |
|   * Kernel
 | |
|     * new method:
 | |
|       * Kernel#require_relative
 | |
| 
 | |
|     * extended methods:
 | |
|       * respond_to? can be used to detect methods not implemented.
 | |
|         For example, Process.respond_to?(:fork) returns false on Windows.
 | |
| 
 | |
| * digest
 | |
|   * new methods:
 | |
|     * Digest::Class.base64digest
 | |
|     * Digest::Instance#base64digest
 | |
|     * Digest::Instance#base64digest!
 | |
| 
 | |
|   * Digest::HMAC (digest/hmac) has been marked as deprecated because
 | |
|     it was unintentional for the experimental library to be included
 | |
|     in the final release of 1.9.1.  Please use OpenSSL::HMAC instead.
 | |
| 
 | |
| * rss
 | |
| 
 | |
|   * 0.2.4 -> 0.2.7.
 | |
| 
 | |
|   * RSS::Maker.make
 | |
|     * raise an exception not returns nil for invalid feed making.
 | |
|     * requires block.
 | |
| 
 | |
|   * RSS::Maker.[]
 | |
|     * new method to return maker class.
 | |
| 
 | |
|   * RSS::Maker.supported?(version)
 | |
|     * new method to check whether given version is supported.
 | |
| 
 | |
|   * RSS::Maker: item.guid.permanent_link?
 | |
|     * new alias of item.guid.isPermaLink
 | |
|   * RSS::Maker: item.guid.permanent_link=
 | |
|     * new alias of item.guid.isPermaLink=
 | |
| 
 | |
| * JSON
 | |
|   * Update to JSON 1.1.9
 | |
| 
 | |
| * REXML
 | |
| 
 | |
|   * REXML::Document.entity_expansion_limit=
 | |
| 
 | |
|     New method to set the entity expansion limit. By default the limit is
 | |
|     set to 10000.  See the following URL for details.
 | |
| 
 | |
|     http://www.ruby-lang.org/en/news/2008/08/23/dos-vulnerability-in-rexml/
 | |
| 
 | |
| * RDoc
 | |
| 
 | |
|   * Updated to RDoc 2.5.8
 | |
| 
 | |
| * RubyGems
 | |
| 
 | |
|   * Updated to RubyGems 1.3.7
 | |
| 
 | |
| * logger
 | |
| 
 | |
|   * imported upstream version (logger/1.2.7)
 | |
|     * do not raise an exception even if log writing failed.
 | |
|     * do not raise ShiftingError if an aged file already exists.
 | |
|       (no ShiftingError will be raised from 1.2.7, just warn() instead)
 | |
| 
 | |
| * matrix
 | |
|   * API change to adhere strictly to mathematical definitions:
 | |
|     * Matrices must now be rectangular.
 | |
|     * trace, regular?, singular? are defined only for square matrices
 | |
|     * support for empty matrices
 | |
|     * all integer matrices now have the right determinant (also an integer)
 | |
| 
 | |
|   * Matrix and Vector include Enumerable.
 | |
| 
 | |
|   * new methods:
 | |
|     * Matrix.build
 | |
|     * Matrix.empty
 | |
|     * Matrix#conj
 | |
|     * Matrix#conjugate
 | |
|     * Matrix#each
 | |
|     * Matrix#each_with_index
 | |
|     * Matrix#empty?
 | |
|     * Matrix#imag
 | |
|     * Matrix#imaginary
 | |
|     * Matrix#real
 | |
|     * Matrix#real?
 | |
|     * Matrix#rect
 | |
|     * Matrix#rectangular
 | |
| 
 | |
| * net/http
 | |
|   * merged net/https.
 | |
| 
 | |
| * open3
 | |
|   * new methods:
 | |
|     * Open3.popen2
 | |
|     * Open3.popen2e
 | |
|     * Open3.capture3
 | |
|     * Open3.capture2
 | |
|     * Open3.capture2e
 | |
|     * Open3.pipeline_rw
 | |
|     * Open3.pipeline_r
 | |
|     * Open3.pipeline_w
 | |
|     * Open3.pipeline_start
 | |
|     * Open3.pipeline
 | |
| 
 | |
| * pty
 | |
|   * new method:
 | |
|     * PTY.open
 | |
| 
 | |
| * openssl
 | |
|   * new methods:
 | |
|     * OpenSSL::Buffering#read_nonblock
 | |
|     * OpenSSL::Buffering#write_nonblock
 | |
|     * OpenSSL::SSL::SSLSocket#connect_nonblock
 | |
|     * OpenSSL::SSL::SSLSocket#accept_nonblock
 | |
| 
 | |
| * scanf
 | |
|   * support %a/%A format.
 | |
| 
 | |
| 
 | |
| * socket
 | |
| 
 | |
|   * incompatible changes:
 | |
|     * Socket#{recvfrom,recvfrom_nonblock,accept,accept_nonblock,sysaccept}
 | |
|       returns a sender address as Addrinfo object instead of a binary sockaddr string.
 | |
|       Addrinfo#to_s returns the old binary sockaddr string.
 | |
|     * BasicSocket#getsockopt returns Socket::Option object instead of a binary string.
 | |
|       Socket::Option#to_s returns the old binary string.
 | |
|     * Socket.do_not_reverse_lookup is turned on by default now.
 | |
| 
 | |
|   * new class:
 | |
|     * Addrinfo
 | |
|     * Socket::Option
 | |
|     * Socket::AncillaryData
 | |
| 
 | |
|   * new methods:
 | |
|     * Socket.ip_address_list
 | |
|     * Socket.tcp
 | |
|     * Socket.tcp_server_loop
 | |
|     * Socket.tcp_server_sockets
 | |
|     * Socket.udp_server_sockets
 | |
|     * Socket.udp_server_loop_on
 | |
|     * Socket.udp_server_loop
 | |
|     * Socket.unix
 | |
|     * Socket.unix_server_loop
 | |
|     * Socket.unix_server_socket
 | |
|     * Socket.accept_loop
 | |
|     * Socket#ipv6only!
 | |
|     * BasicSocket#local_address
 | |
|     * BasicSocket#remote_address
 | |
|     * BasicSocket#connect_address
 | |
|     * BasicSocket#sendmsg
 | |
|     * BasicSocket#sendmsg_nonblock
 | |
|     * BasicSocket#recvmsg
 | |
|     * BasicSocket#recvmsg_nonblock
 | |
|     * BasicSocket#getpeereid
 | |
| 
 | |
|   * extended methods:
 | |
|     * Socket.new's 3rd argument is optional now.
 | |
|     * Socket.pair's 3rd argument is optional now.
 | |
|     * Socket.pair and UNIXSocket.pair can take a block.
 | |
|     * BasicSocket#send, UDPSocket#send, Socket.getnameinfo, Socket#bind, and
 | |
|       Socket#{connect,connect_nonblock} accepts an Addrinfo object as sockaddr.
 | |
|     * BasicSocket#getsockopt accepts a Socket::Option object.
 | |
|     * Socket.getaddrinfo and IPSocket#{addr,peeraddr} accept an optional
 | |
|       argument to turn reverse lookup on/off.
 | |
| 
 | |
|     * constant names can be accepted as well as constant values.
 | |
|       i.e. Socket.new(:PF_INET, :SOCK_STREAM, 0)
 | |
|       The constant names can be specified without the prefix.
 | |
|       i.e. Socket.new(:INET, :STREAM, 0)
 | |
|       * protocol/address family
 | |
|       * socket type
 | |
|       * socket option protocol level
 | |
|       * socket option name
 | |
|       * shutdown's argument
 | |
| 
 | |
| * pathname
 | |
|   * new methods:
 | |
|     * Pathname#binread
 | |
|     * Pathname#realdirpath
 | |
|     * Pathname#each_child
 | |
| 
 | |
|   * extended methods:
 | |
|     * Pathname#realpath and Pathname#realdirpath takes optional basedir
 | |
|       argument.
 | |
| 
 | |
| * Readline
 | |
|   * new methods:
 | |
|     * Readline.set_screen_size
 | |
|     * Readline.get_screen_size
 | |
| 
 | |
|   * extended methods:
 | |
|     * Readline.completion_proc= accepts nil.
 | |
|       nil means to use default completion proc.
 | |
| 
 | |
| * set
 | |
|   * new methods:
 | |
|     * Set#keep_if
 | |
|     * Set#select!
 | |
| 
 | |
| * time
 | |
|   * incompatible changes:
 | |
|     * Time.parse raises ArgumentError when no date information.
 | |
| 
 | |
| * thread
 | |
|   * extended method:
 | |
|     * ConditionVariable#wait takes timeout argument.
 | |
| 
 | |
| * securerandom
 | |
|   * new methods:
 | |
|     * SecureRandom.urlsafe_base64
 | |
| 
 | |
| * URI
 | |
|   * new methods:
 | |
|     * URI.encode_www_form
 | |
|     * URI.decode_www_form
 | |
|     * URI.encode_www_form_component
 | |
|     * URI.decode_www_form_component
 | |
|   * Obsoleted methods:
 | |
|     * URI.decode
 | |
|     * URI.encode
 | |
|     * URI.escape
 | |
|     * URI.unescape
 | |
| 
 | |
| * etc
 | |
|   * new methods:
 | |
|     * Etc::Passwd.each
 | |
|     * Etc::Group.each
 | |
| 
 | |
| * zlib
 | |
|   * new methods:
 | |
|     * Zlib::GzipFile#path
 | |
| 
 | |
| * rbconfig
 | |
|   * new methods:
 | |
|     * RbConfig.ruby
 | |
| 
 | |
| * io/console
 | |
|   * new methods:
 | |
|     * IO#noecho {|io| }
 | |
|     * IO#echo=
 | |
|     * IO#echo?
 | |
|     * IO#raw {|io| }
 | |
|     * IO#raw!
 | |
|     * IO#getch
 | |
|     * IO#winsize
 | |
|     * IO.console
 | |
| 
 | |
| === Language changes
 | |
| 
 | |
| * Regexp properties (\p{}) names now ignore underscores, spaces, and case, so
 | |
|   \p{ol chiki} is the same as \p{Ol_Chiki}
 | |
| * Regexps now support Unicode 5.2 (new characters and scripts)
 | |
| * \d, \s, and \w are now ASCII only; use POSIX bracket classes and \p{} for
 | |
|   Unicode semantics
 | |
| * $: no longer includes the current directory, use require_relative
 | |
| * Symbol with an invalid encoding is forbidden to exist.
 | |
| 
 | |
| === Compilation options
 | |
| 
 | |
| * --program-prefix and --program-suffix no longer act on the shared object
 | |
|   names nor paths to libraries.
 | |
| 
 | |
|   use --with-rubylibprefix='${libruby}/${RUBY_INSTALL_NAME}' and
 | |
|   --with-soname='${RUBY_INSTALL_NAME}' for the same result as Ruby 1.9.1.
 | |
| 
 | |
| * --with-arch is added for universal binary, instead of
 | |
|   --enable-fat-binary option.
 | |
| 
 | |
| === Compatibility issues (excluding feature bug fixes)
 | |
| 
 | |
|   * Enumerator#rewind
 | |
|   * Socket#recvfrom
 | |
|   * Socket#recvfrom_nonblock
 | |
|   * Socket#accept
 | |
|   * Socket#accept_nonblock
 | |
|   * Socket#sysaccept
 | |
|   * BasicSocket#getsockopt
 | |
|   * Time.utc
 | |
|   * Time.gm
 | |
|   * Time.local
 | |
|   * Time.mktime
 | |
|   * Time.parse
 | |
|   * --program-prefix and --program-suffix
 | |
|   * --enable-fat-binary
 | |
|   * $:
 | |
| 
 | |
|     See above.
 | |
| 
 | |
|   * Digest::HMAC
 | |
| 
 | |
|     Deprecated.  See above.
 |