mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			529 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			529 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # -*- rdoc -*-
 | |
| 
 | |
| = NEWS for Ruby 2.0.0
 | |
| 
 | |
| 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.3 release
 | |
| 
 | |
| === Language changes
 | |
| 
 | |
| * Added keyword arguments.
 | |
| 
 | |
| * Added %i and %I for symbol list creation (similar to %w and %W).
 | |
| 
 | |
| * Default source encoding is changed to UTF-8. (was US-ASCII)
 | |
| 
 | |
| * No warning for unused variables starting with '_'
 | |
| 
 | |
| === Core classes updates (outstanding ones only)
 | |
| 
 | |
| * ARGF
 | |
|   * added method:
 | |
|     * added ARGF#codepoints and ARGF#each_codepoint, like the corresponding
 | |
|       methods for IO.
 | |
| 
 | |
| * Array
 | |
|   * added method:
 | |
|     * added Array#bsearch for binary search.
 | |
|   * incompatible changes:
 | |
|     * random parameter of Array#shuffle! and Array#sample now
 | |
|       will be called with one argument, maximum value.
 | |
|     * when given Range arguments, Array#values_at now returns nil for each
 | |
|       value that is out-of-range.
 | |
| 
 | |
| * Enumerable
 | |
|   * added method:
 | |
|     * added Enumerable#lazy method for lazy enumeration.
 | |
| 
 | |
| * Enumerator
 | |
|   * added method:
 | |
|     * added Enumerator#size for lazy size evaluation.
 | |
|   * extended method:
 | |
|     * Enumerator.new accept an argument for lazy size evaluation.
 | |
|   * new class Enumerator::Lazy for lazy enumeration
 | |
| 
 | |
| * ENV
 | |
|   * aliased method:
 | |
|     * ENV.to_h is a new alias for ENV.to_hash
 | |
| 
 | |
| * Fiber
 | |
|   * incompatible changes:
 | |
|     * Fiber#resume cannot resume a fiber which invokes "Fiber#transfer".
 | |
| 
 | |
| * File
 | |
|   * extended method:
 | |
|     * File.fnmatch? now expands braces in the pattern if
 | |
|       File::FNM_EXTGLOB option is given.
 | |
| 
 | |
| * GC
 | |
|   * improvements:
 | |
|     * introduced the bitmap marking which suppresses to copy a memory page
 | |
|       with Copy-on-Write.
 | |
|     * introduced the non-recursive marking which avoids unexpected stack overflow.
 | |
| 
 | |
| * GC::Profiler
 | |
|   * added method:
 | |
|     * added GC::Profiler.raw_data which returns raw profile data for GC.
 | |
| 
 | |
| * Hash
 | |
|   * added method:
 | |
|     * added Hash#to_h as explicit conversion method, like Array#to_a.
 | |
|   * extended method:
 | |
|     * Hash#default_proc= can be passed nil to clear the default proc.
 | |
| 
 | |
| * IO
 | |
|   * deprecated methods:
 | |
|     * IO#lines, #bytes, #chars and #codepoints are deprecated.
 | |
| 
 | |
| * Kernel
 | |
|   * added method:
 | |
|     * added Kernel#Hash conversion method like Array() or Float().
 | |
|     * added Kernel#__dir__ which returns the absolute path of the
 | |
|       directory of the file from which this method is called.
 | |
|     * added Kernel#caller_locations which returns an array of
 | |
|       frame information objects.
 | |
|   * extended method:
 | |
|     * Kernel#warn accepts multiple args in like puts.
 | |
|     * Kernel#caller accepts second optional argument `n' which specify
 | |
|       required caller size.
 | |
|     * Kernel#to_enum and enum_for accept a block for lazy size evaluation.
 | |
|   * incompatible changes:
 | |
|     * system() and exec() close non-standard file descriptors
 | |
|       (The default of :close_others option is changed to true by default.)
 | |
|     * respond_to? against a protected method now returns false unless
 | |
|       the second argument is true.
 | |
|     * __callee__ has returned to the original behavior, and now
 | |
|       returns the called name but not the original name in an
 | |
|       aliased method.
 | |
|     * Kernel#inspect does not call #to_s anymore
 | |
|       (it used to call redefined #to_s).
 | |
| 
 | |
| * LoadError
 | |
|   * added method:
 | |
|     * added LoadError#path method to return the file name that could not be
 | |
|       loaded.
 | |
| 
 | |
| * Module
 | |
|   * added method:
 | |
|     * added Module#prepend which is similar to Module#include,
 | |
|       however a method in the prepended module overrides the
 | |
|       corresponding method in the prepending module.
 | |
|     * added Module.prepended and Module.prepend_features, similar
 | |
|       to included and append_features.
 | |
|     * added Module#refine, which extends a class or module locally. [experimental]
 | |
|   * extended method:
 | |
|     * Module#define_method accepts a UnboundMethod from a Module.
 | |
|     * Module#const_get accepts a qualified constant string, e.g.
 | |
|       Object.const_get("Foo::Bar::Baz")
 | |
| 
 | |
| * Mutex
 | |
|   * added method:
 | |
|     * added Mutex#owned? which returns the mutex is held by current
 | |
|       thread or not. [experimental]
 | |
|   * incompatible changes:
 | |
|     * Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize
 | |
|       and Mutex#sleep are no longer allowed to be used from trap handler
 | |
|       and raise a ThreadError in such case.
 | |
|     * Mutex#sleep may spurious wakeup. Check after wakeup.
 | |
| 
 | |
| * NilClass
 | |
|   * added method:
 | |
|     * added nil.to_h which returns {}
 | |
| 
 | |
| * ObjectSpace::WeakMap
 | |
|   * new low level class to hold weak references to objects.
 | |
| 
 | |
| * Proc
 | |
|   * incompatible change:
 | |
|     * removed Proc#== and #eql? so two procs are == only when they are
 | |
|       the same object.
 | |
| 
 | |
| * Process
 | |
|   * added method:
 | |
|     * added getsid for getting session id (unix only).
 | |
| 
 | |
| * Range
 | |
|   * added method:
 | |
|     * added Range#size for lazy size evaluation.
 | |
|     * added Range#bsearch for binary search.
 | |
| 
 | |
| * RubyVM (MRI specific)
 | |
|   * added RubyVM::InstructionSequence.of to get the instruction sequence
 | |
|     from a method or a block.
 | |
|   * added RubyVM::InstructionSequence#path, #absolute_path, #label,
 | |
|     #base_label and #first_lineno to retrieve information from where
 | |
|     the instruction sequence was defined.
 | |
|   * added Environment variables to specify stack usage:
 | |
|     * RUBY_THREAD_VM_STACK_SIZE: vm stack size used at thread creation.
 | |
|       default: 128KB (32bit CPU) or 256KB (64bit CPU).
 | |
|     * RUBY_THREAD_MACHINE_STACK_SIZE: machine stack size used at thread
 | |
|       creation. default: 512KB or 1024KB.
 | |
|     * RUBY_FIBER_VM_STACK_SIZE: vm stack size used at fiber creation.
 | |
|       default: 64KB or 128KB.
 | |
|     * RUBY_FIBER_MACHINE_STACK_SIZE: machine stack size used at fiber
 | |
|       creation. default: 256KB or 512KB.
 | |
|     These variables are checked only at launched time.
 | |
|   * added constant DEFAULT_PARAMS to get above default parameters.
 | |
| 
 | |
| * Signal
 | |
|   * added method:
 | |
|     * added Signal.signame which returns signal name
 | |
| 
 | |
|   * incompatible changes:
 | |
|     * Signal.trap raises ArgumentError when :SEGV, :BUS, :ILL, :FPE, :VTALRM
 | |
|       are specified.
 | |
| 
 | |
| * String
 | |
|   * added method:
 | |
|     * added String#b returning a copied string whose encoding is ASCII-8BIT.
 | |
|   * change return value:
 | |
|     * String#lines now returns an array instead of an enumerator.
 | |
|     * String#chars now returns an array instead of an enumerator.
 | |
|     * String#codepoints now returns an array instead of an enumerator.
 | |
|     * String#bytes now returns an array instead of an enumerator.
 | |
| 
 | |
| * Struct
 | |
|   * added method:
 | |
|     * added Struct#to_h returning values with keys corresponding to the
 | |
|       instance variable names.
 | |
| 
 | |
| * Thread
 | |
|   * added method:
 | |
|     * added Thread#thread_variable_get for getting thread local variables
 | |
|       (these are different than Fiber local variables).
 | |
|     * added Thread#thread_variable_set for setting thread local variables.
 | |
|     * added Thread#thread_variables for getting a list of the thread local
 | |
|       variable keys.
 | |
|     * added Thread#thread_variable? for testing to see if a particular thread
 | |
|       variable has been set.
 | |
|     * added Thread.handle_interrupt as well as instance and singleton methods
 | |
|       pending_interrupt? for asynchronous handling of exceptions
 | |
|     * added Thread#backtrace_locations which returns similar information of
 | |
|       Kernel#caller_locations.
 | |
|   * new class Thread::Backtrace::Location to hold backtrace location
 | |
|     information. These are returned by Thread#backtrace_locations and
 | |
|     Kernel#caller_locations.
 | |
|   * incompatible changes:
 | |
|     * Thread#join and Thread#value now raises a ThreadError if target thread
 | |
|       is the current or main thread.
 | |
| 
 | |
| * Time
 | |
|   * change return value:
 | |
|     * Time#to_s now returns US-ASCII encoding instead of BINARY.
 | |
| 
 | |
| * TracePoint
 | |
|   * new class. This class is replacement of set_trace_func.
 | |
|     Easy to use and efficient implementation.
 | |
| 
 | |
| * toplevel
 | |
|   * added method:
 | |
|     * added main.define_method which defines a global function.
 | |
|     * added main.using, which imports refinements into the current file or
 | |
|       eval string. [experimental]
 | |
| 
 | |
| === Core classes compatibility issues (excluding feature bug fixes)
 | |
| 
 | |
| * Array#values_at
 | |
| 
 | |
|   See above.
 | |
| 
 | |
| * String#lines
 | |
| * String#chars
 | |
| * String#codepoints
 | |
| * String#bytes
 | |
| 
 | |
|   These methods no longer return an Enumerator, although passing a
 | |
|   block is still supported for backwards compatibility.
 | |
| 
 | |
|   Code like str.lines.with_index(1) { |line, lineno| ... } no longer
 | |
|   works because str.lines returns an array.  Replace lines with
 | |
|   each_line in such cases.
 | |
| 
 | |
| * IO#lines
 | |
| * IO#chars
 | |
| * IO#codepoints
 | |
| * IO#bytes
 | |
| * ARGF#lines
 | |
| * ARGF#chars
 | |
| * ARGF#bytes
 | |
| * StringIO#lines
 | |
| * StringIO#chars
 | |
| * StringIO#codepoints
 | |
| * StringIO#bytes
 | |
| * Zlib::GzipReader#lines
 | |
| * Zlib::GzipReader#bytes
 | |
| 
 | |
|   These methods are deprecated in favor of each_line, each_byte,
 | |
|   each_char and each_codepoint.
 | |
| 
 | |
| * Proc#==
 | |
| * Proc#eql?
 | |
| 
 | |
|   These methods were removed. Two procs are == only when they are
 | |
|   the same object.
 | |
| 
 | |
| * Fixnum
 | |
| * Bignum
 | |
| * Float
 | |
| 
 | |
|   Fixnums, Bignums and Floats are frozen.
 | |
| 
 | |
| * Signal.trap
 | |
| 
 | |
|   See above.
 | |
| 
 | |
| * Merge Onigmo.
 | |
|   https://github.com/k-takata/Onigmo
 | |
| 
 | |
| * The :close_others option is true by default for system() and exec().
 | |
|   Also, the close-on-exec flag is set by default for all new file descriptors.
 | |
|   This means file descriptors doesn't inherit to spawned process unless
 | |
|   explicitly requested such as system(..., fd=>fd).
 | |
| 
 | |
| * Kernel#respond_to? against a protected method now returns false
 | |
|   unless the second argument is true.
 | |
| 
 | |
| * Kernel#respond_to_missing?
 | |
| * Kernel#initialize_clone
 | |
| * Kernel#initialize_dup
 | |
| 
 | |
|   These methods are now private.
 | |
| 
 | |
| * Thread#join, Thread#value
 | |
| 
 | |
|   See above.
 | |
| 
 | |
| * Mutex#lock, Mutex#unlock, Mutex#try_lock, Mutex#synchronize and Mutex#sleep
 | |
| 
 | |
|   See above.
 | |
| 
 | |
| === Stdlib updates (outstanding ones only)
 | |
| 
 | |
| * cgi
 | |
|   * Add HTML5 tag maker.
 | |
|   * CGI#header has been renamed to CGI#http_header and
 | |
|     aliased to CGI#header.
 | |
|   * When HTML5 tagmaker called, overwrite CGI#header,
 | |
|     CGI#header function is to create a <header> element.
 | |
| 
 | |
| * CSV
 | |
|   * Removed CSV::dump and CSV::load to protect users from dangerous
 | |
|     serialization vulnerability
 | |
| 
 | |
| * iconv
 | |
|   * Iconv has been removed. Use String#encode instead.
 | |
| 
 | |
| * io/console
 | |
|   * new methods:
 | |
|     * added IO#cooked which sets the terminal to cooked mode within the given block.
 | |
|     * added IO#cooked! which sets the terminal to cooked.
 | |
|   * extended method:
 | |
|     * IO#raw, IO#raw!, and IO#getch accept keyword arguments, :min and :time.
 | |
| 
 | |
| * io/wait
 | |
|   * new features:
 | |
|     * added IO#wait_writable method.
 | |
|     * added IO#wait_readable method as alias of IO#wait.
 | |
| 
 | |
| * json
 | |
|   * updated to 1.7.7.
 | |
| 
 | |
| * net/http
 | |
|   * new features:
 | |
|     * Proxies are now automatically detected from the http_proxy environment
 | |
|       variable.  See Net::HTTP::new for details.
 | |
|     * gzip and deflate compression are now requested for all requests by
 | |
|       default.  See Net::HTTP for details.
 | |
|     * SSL sessions are now reused across connections for a single instance.
 | |
|       This speeds up connection by using a previously negotiated session.
 | |
|     * Requests may be created from a URI which sets the request_uri and host
 | |
|       header of the request (but does not change the host connected to).
 | |
|     * Responses contain the URI requested which allows easier implementation of
 | |
|       redirect following.
 | |
|   * new methods:
 | |
|     * Net::HTTP#local_host
 | |
|     * Net::HTTP#local_host=
 | |
|     * Net::HTTP#local_port
 | |
|     * Net::HTTP#local_port=
 | |
|   * extended method:
 | |
|     * Net::HTTP#connect uses local_host and local_port if specified.
 | |
| 
 | |
| * net/imap
 | |
|   * new methods:
 | |
|     * Net::IMAP.default_port
 | |
|     * Net::IMAP.default_imap_port
 | |
|     * Net::IMAP.default_tls_port
 | |
|     * Net::IMAP.default_ssl_port
 | |
|     * Net::IMAP.default_imaps_port
 | |
| 
 | |
| * objspace
 | |
|   * new method:
 | |
|     * ObjectSpace.reachable_objects_from(obj)
 | |
| 
 | |
| * openssl
 | |
|   * Consistently raise an error when trying to encode nil values. All instances
 | |
|     of OpenSSL::ASN1::Primitive now raise TypeError when calling to_der on an
 | |
|     instance whose value is nil. All instances of OpenSSL::ASN1::Constructive
 | |
|     raise NoMethodError in the same case. Constructing such values is still
 | |
|     permitted.
 | |
|   * TLS 1.1 & 1.2 support by setting OpenSSL::SSL::SSLContext#ssl_version to
 | |
|     :TLSv1_2, :TLSv1_2_server, :TLSv1_2_client or :TLSv1_1, :TLSv1_1_server
 | |
|     :TLSv1_1_client. The version being effectively used can be queried
 | |
|     with OpenSSL::SSL#ssl_version. Furthermore, it is also possible to
 | |
|     blacklist the new TLS versions with OpenSSL::SSL:OP_NO_TLSv1_1 and
 | |
|     OpenSSL::SSL::OP_NO_TLSv1_2.
 | |
|   * Added OpenSSL::SSL::SSLContext#renegotiation_cb. A user-defined callback
 | |
|     may be set which gets called whenever a new handshake is negotiated. This
 | |
|     also allows to programmatically decline (client) renegotiation attempts.
 | |
|   * Support for "0/n" splitting of records as BEAST mitigation via
 | |
|     OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS.
 | |
|   * The default options for OpenSSL::SSL::SSLContext have changed to
 | |
|     OpenSSL::SSL::OP_ALL & ~OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS
 | |
|     instead of OpenSSL::SSL::OP_ALL only. This enables the countermeasure for
 | |
|     the BEAST attack by default.
 | |
|   * OpenSSL requires passwords for decrypting PEM-encoded files to be at least
 | |
|     four characters long. This led to awkward situations where an export with
 | |
|     a password with fewer than four characters was possible, but accessing the
 | |
|     file afterwards failed. OpenSSL::PKey::RSA, OpenSSL::PKey::DSA and
 | |
|     OpenSSL::PKey::EC therefore now enforce the same check when exporting a
 | |
|     private key to PEM with a password - it has to be at least four characters
 | |
|     long.
 | |
|   * SSL/TLS support for the Next Protocol Negotiation extension. Supported
 | |
|     with OpenSSL 1.0.1 and higher.
 | |
|   * OpenSSL::OPENSSL_FIPS allows client applications to detect whether OpenSSL
 | |
|     is FIPS-enabled. OpenSSL.fips_mode= allows turning on and off FIPS mode
 | |
|     manually in order to adapt to situations where FIPS mode would be an
 | |
|     explicit requirement.
 | |
|   * Authenticated Encryption with Associated Data (AEAD) is supported via
 | |
|     Cipher#auth_data= and Cipher#auth_tag/Cipher#auth_tag=.
 | |
|     Currently (OpenSSL 1.0.1c), only GCM mode is supported.
 | |
| 
 | |
| * ostruct
 | |
|   * new methods:
 | |
|     * OpenStruct#[], []=
 | |
|     * OpenStruct#each_pair
 | |
|     * OpenStruct#eql?
 | |
|     * OpenStruct#hash
 | |
|     * OpenStruct#to_h converts the struct to a hash.
 | |
|   * extended method:
 | |
|     * OpenStruct.new also accepts an OpenStruct / Struct.
 | |
| 
 | |
| * pathname
 | |
|   * extended method:
 | |
|     * Pathname#find returns an enumerator if no block is given.
 | |
| 
 | |
| * rake
 | |
|   * rake has been updated to version 0.9.5.
 | |
| 
 | |
|     This version is backwards-compatible with previous rake versions and
 | |
|     contains many bug fixes.
 | |
| 
 | |
|     See
 | |
|     http://rake.rubyforge.org/doc/release_notes/rake-0_9_5_rdoc.html for a list
 | |
|     of changes in rake 0.9.3, 0.9.4 and 0.9.5.
 | |
| 
 | |
| * RDoc
 | |
|   * RDoc has been updated to version 4.0
 | |
| 
 | |
|     This version is largely backwards-compatible with previous rdoc versions.
 | |
|     The most notable change is an update to the ri data format (ri data must
 | |
|     be regenerated for gems shared across rdoc versions).  Further API changes
 | |
|     are internal and won't affect most users.
 | |
| 
 | |
|     Notable changes include:
 | |
| 
 | |
|     * Page support for ri.  Try `ri ruby:` for a list of pages in ruby or
 | |
|       `ri ruby:syntax/literals` for the syntax documentation for literals.
 | |
| 
 | |
|       This also works for gems such as `ri rspec:README` for the rspec gem's
 | |
|       README file.
 | |
|     * Markdown support.  See ri RDoc::Markdown for details.
 | |
| 
 | |
|     See https://github.com/rdoc/rdoc/blob/master/History.rdoc for a full list
 | |
|     of changes in rdoc 4.0.
 | |
| 
 | |
| * resolv
 | |
|   * new methods:
 | |
|     * Resolv::DNS#timeouts=
 | |
|     * Resolv::DNS::Config#timeouts=
 | |
| 
 | |
| * rexml
 | |
|   * REXML::Document#write supports Hash arguments.
 | |
|   * REXML::Document#write supports new :encoding option. It changes
 | |
|     XML document encoding. Without :encoding option, encoding in
 | |
|     XML declaration is used for XML document encoding.
 | |
| 
 | |
| * RubyGems
 | |
|   * Updated to 2.0.0
 | |
| 
 | |
|     RubyGems 2.0.0 features the following improvements:
 | |
| 
 | |
|     * Improved support for default gems shipping with ruby 2.0.0+
 | |
|     * A gem can have arbitrary metadata through Gem::Specification#metadata
 | |
|     * `gem search` now defaults to --remote and is anchored like gem list.
 | |
|     * Added --document to replace --rdoc and --ri.  Use --no-document to
 | |
|       disable documentation, --document=rdoc to only generate rdoc.
 | |
|     * Only ri-format documentation is generated by default.
 | |
|     * `gem server` uses RDoc::Servlet from RDoc 4.0 to generate HTML
 | |
|       documentation.
 | |
| 
 | |
|     For an expanded list of updates and bug fixes see:
 | |
|     https://github.com/rubygems/rubygems/blob/master/History.txt
 | |
| 
 | |
| * shellwords
 | |
|   * Shellwords#shellescape now stringifies the given object using to_s.
 | |
|   * Shellwords#shelljoin accepts non-string objects in the given
 | |
|     array, each of which is stringified using to_s.
 | |
| 
 | |
| * stringio
 | |
|   * deprecated methods:
 | |
|     * StringIO#lines, #bytes, #chars and #codepoints are deprecated.
 | |
| 
 | |
| * syslog
 | |
|   * Added Syslog::Logger which provides a Logger API atop Syslog.
 | |
|   * Syslog::Priority, Syslog::Level, Syslog::Option and Syslog::Macros
 | |
|     are introduced for easy detection of available constants on a
 | |
|     running system.
 | |
| 
 | |
| * tmpdir
 | |
|   * incompatible changes:
 | |
|     * Dir.mktmpdir uses FileUtils.remove_entry instead of
 | |
|       FileUtils.remove_entry_secure.  This means that applications should not
 | |
|       change the permission of the created temporary directory to make
 | |
|       writable from other users.
 | |
| 
 | |
| * yaml
 | |
|   * Syck has been removed.  YAML now completely depends on libyaml being
 | |
|     installed.
 | |
|   * libyaml is now bundled with ruby, for cases where the library is not
 | |
|     installed locally.
 | |
| 
 | |
| * zlib
 | |
|   * Added streaming support for Zlib::Inflate and Zlib::Deflate.  This allows
 | |
|     processing of a stream without the use of large amounts of memory.
 | |
|   * Added support for the new deflate strategies Zlib::RLE and Zlib::FIXED.
 | |
|   * Zlib streams are now processed without the GVL.  This allows gzip, zlib and
 | |
|     deflate streams to be processed in parallel.
 | |
|   * deprecated methods:
 | |
|     * Zlib::GzipReader#lines and #bytes are deprecated.
 | |
| 
 | |
| === Stdlib compatibility issues (excluding feature bug fixes)
 | |
| 
 | |
| * OpenStruct new methods can conflict with custom attributes named
 | |
|   "each_pair", "eql?", "hash" or "to_h".
 | |
| 
 | |
| * Dir.mktmpdir in lib/tmpdir.rb
 | |
| 
 | |
|   See above.
 | |
| 
 | |
| === C API updates
 | |
| 
 | |
| * NUM2SHORT() and NUM2USHORT() added. They are similar to NUM2INT, but short.
 | |
| 
 | |
| * rb_newobj_of() and NEWOBJ_OF() added. They create a new object of a given class.
 | 
