mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			272 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
	
		
			8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
# -*- rdoc -*-
 | 
						|
 | 
						|
= NEWS for Ruby 2.5.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 or Redmine
 | 
						|
(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>)
 | 
						|
 | 
						|
== Changes since the 2.4.0 release
 | 
						|
 | 
						|
=== Language changes
 | 
						|
 | 
						|
* Top-level constant look-up is removed.  [Feature #11547]
 | 
						|
 | 
						|
* rescue/else/ensure are allowed inside do/end blocks.  [Feature #12906]
 | 
						|
 | 
						|
* refinements take place in string interpolations.  [Feature #13812]
 | 
						|
 | 
						|
=== Core classes updates (outstanding ones only)
 | 
						|
 | 
						|
* Array
 | 
						|
 | 
						|
  * Array#append  [Feature #12746]
 | 
						|
  * Array#prepend  [Feature #12746]
 | 
						|
 | 
						|
* Dir
 | 
						|
 | 
						|
  * Dir.glob provides new optional keyword argument, :base.
 | 
						|
    [Feature #13056]
 | 
						|
  * Dir.children  [Feature #11302]
 | 
						|
  * Dir.each_child  [Feature #11302]
 | 
						|
 | 
						|
* File
 | 
						|
 | 
						|
  * :newline option to File.open implies text mode now.  [Bug #13350]
 | 
						|
  * File#path now raises an IOError for files opened with
 | 
						|
    File::Constants::TMPFILE option. [Feature #13568]
 | 
						|
  * File.stat, File.exist?, and other rb_stat()-using methods release GVL
 | 
						|
    [Bug #13941]
 | 
						|
  * File.rename releases GVL [Feature #13951]
 | 
						|
 | 
						|
* Hash
 | 
						|
 | 
						|
  * Hash#transform_keys  [Feature #13583]
 | 
						|
  * Hash#transform_keys!  [Feature #13583]
 | 
						|
  * Hash#slice  [Feature #8499]
 | 
						|
 | 
						|
* IO
 | 
						|
 | 
						|
  * IO#pread  [Feature #4532]
 | 
						|
  * IO#pwrite  [Feature #4532]
 | 
						|
  * IO#copy_stream tries copy offload with copy_file_range(2) [Feature #13867]
 | 
						|
  * IO#write accepts multiple arguments  [Feature #9323]
 | 
						|
 | 
						|
* IOError
 | 
						|
 | 
						|
  * exception message "stream closed" is changed  [Bug #13405]
 | 
						|
 | 
						|
* Integer
 | 
						|
 | 
						|
  * Integer.sqrt  [Feature #13219]
 | 
						|
  * Integer#step does no longer rescue exceptions when given
 | 
						|
    a step value which cannot be compared with #> to 0. [Feature #7688]
 | 
						|
  * Integer#{round,floor,ceil,truncate} now always return an Integer.
 | 
						|
    [Bug #13420]
 | 
						|
 | 
						|
* Kernel
 | 
						|
 | 
						|
  * Kernel#yield_self  [Feature #6721]
 | 
						|
 | 
						|
* Net::HTTP
 | 
						|
 | 
						|
  * Net::HTTP.new supports no_proxy parameter [Feature #11195]
 | 
						|
  * Net::HTTP#min_version/max_version [Feature #9450]
 | 
						|
 | 
						|
* Numeric
 | 
						|
 | 
						|
  * Numerical comparison operators (<,<=,>=,>) no longer rescue exceptions
 | 
						|
    of #coerce. Return nil in #coerce if the coercion is impossible.
 | 
						|
    [Feature #7688]
 | 
						|
 | 
						|
* Process
 | 
						|
 | 
						|
  * Precision of Process.times is improved if getrusage(2) exists. [Feature #11952]
 | 
						|
 | 
						|
* Range
 | 
						|
  * Range#initialize no longer rescue exceptions when comparing begin and
 | 
						|
    end with #<=> and raise a "bad value for range" ArgumentError
 | 
						|
    but instead let the exception from the #<=> call go through.
 | 
						|
    [Feature #7688]
 | 
						|
 | 
						|
* Regexp
 | 
						|
  * Update to Onigmo 6.1.1.
 | 
						|
    * Support absent operator https://github.com/k-takata/Onigmo/issues/82
 | 
						|
 | 
						|
* String
 | 
						|
 | 
						|
  * String#-@ deduplicates unfrozen strings.  Already-frozen
 | 
						|
    strings remain unchanged for compatibility.  [Feature #13077]
 | 
						|
  * -"literal" (String#-@) optimized to return the same object
 | 
						|
    (same as "literal".freeze in Ruby 2.1+) [Feature #13295]
 | 
						|
  * String#{casecmp,casecmp?} now return nil for non-string arguments
 | 
						|
    instead of raising a TypeError. [Bug #13312]
 | 
						|
  * String#delete_prefix is added to remove prefix [Feature #12694]
 | 
						|
  * String#delete_prefix! is added to remove prefix destructively [Feature #12694]
 | 
						|
  * String#delete_suffix is added to remove suffix [Feature #13665]
 | 
						|
  * String#delete_suffix! is added to remove suffix destructively [Feature #13665]
 | 
						|
  * String#each_grapheme_cluster and String#grapheme_clusters is added to
 | 
						|
    enumerate grapheme clusters [Feature #13780]
 | 
						|
  * String#start_with? supports regexp [Feature #13712]
 | 
						|
 | 
						|
* Regexp/String: Updated Unicode version from 9.0.0 to 10.0.0 [Feature #13685]
 | 
						|
 | 
						|
* Thread
 | 
						|
 | 
						|
  * Thread#fetch  [Feature #13009]
 | 
						|
 | 
						|
  * Description set by Thread#name= is now visible on Windows 10.
 | 
						|
 | 
						|
* Time
 | 
						|
 | 
						|
  * Time#at receives 3rd argument which specifies the unit of 2nd argument.
 | 
						|
    [Feature #13919]
 | 
						|
 | 
						|
* KeyError
 | 
						|
 | 
						|
  * KeyError#receiver [Feature #12063]
 | 
						|
  * KeyError#key      [Feature #12063]
 | 
						|
 | 
						|
=== Stdlib updates (outstanding ones only)
 | 
						|
 | 
						|
* Bundler
 | 
						|
 | 
						|
  * Add Bundler to Standard Library. [Feature #12733]
 | 
						|
 | 
						|
* DRb
 | 
						|
  * ACL::ACLEntry.new no longer suppresses IPAddr::InvalidPrefixError.
 | 
						|
 | 
						|
* ERB
 | 
						|
  * Add ERB#result_with_hash to render a template with local variables passed
 | 
						|
    with a Hash object. [Feature #8631]
 | 
						|
 | 
						|
  * Carriage returns are changed to be trimmed properly if trim_mode is specified
 | 
						|
    and used. Duplicated newlines will be removed on Windows. [Bug #5339] [Bug #11464]
 | 
						|
 | 
						|
* IPAddr
 | 
						|
  * New methods are added:
 | 
						|
    * IPAddr#prefix
 | 
						|
    * IPAddr#loopback?
 | 
						|
    * IPAddr#private? [Feature #11666]
 | 
						|
    * IPAddr#link_local? [Feature #10912]
 | 
						|
  * IPAddr now rejects invalid address mask. [Bug #13399]
 | 
						|
  * IPAddr#ipv4_compat and #ipv4_compat? are deprecated. [Bug #13769]
 | 
						|
 | 
						|
* Net::HTTP
 | 
						|
  * Add more HTTP status classes
 | 
						|
 | 
						|
  * Net::HTTP::STATUS_CODES is added as HTTP Status Code Repository [Misc #12935]
 | 
						|
 | 
						|
  * Net::HTTP#proxy_user and Net::HTTP#proxy_pass now reflects http_proxy
 | 
						|
    environment variable if the system's environment variable is multiuser
 | 
						|
    safe. [Bug #12921]
 | 
						|
 | 
						|
* Pathname
 | 
						|
  * New method:
 | 
						|
    * Pathname#glob [Feature #7360]
 | 
						|
 | 
						|
* RbConfig
 | 
						|
  * New constants:
 | 
						|
    * RbConfig::LIMITS is added to provide the limits of C types.
 | 
						|
      This is available when rbconfig/sizeof is required.
 | 
						|
 | 
						|
* Ripper
 | 
						|
  * New method:
 | 
						|
    * Ripper#state is added to tell the state of scanner. [Feature #13686]
 | 
						|
 | 
						|
  * New constants:
 | 
						|
    * Ripper::EXPR_BEG and so on for Ripper#state.
 | 
						|
 | 
						|
* RDoc
 | 
						|
 | 
						|
  * Update RDoc 6.0.0.beta3.
 | 
						|
    * Replaced IRB based lexer with Ripper. It much improves the speed of generating document.
 | 
						|
    * https://github.com/ruby/rdoc/pull/512
 | 
						|
 | 
						|
* Rubygems
 | 
						|
 | 
						|
  * Update Rubygems 2.7.0.
 | 
						|
    * http://blog.rubygems.org/2017/11/01/2.7.0-released.html
 | 
						|
    * http://blog.rubygems.org/2017/08/27/2.6.13-released.html
 | 
						|
    * http://blog.rubygems.org/2017/10/09/unsafe-object-deserialization-vulnerability.html
 | 
						|
 | 
						|
* SecureRandom
 | 
						|
  * New methods:
 | 
						|
    * SecureRandom.alphanumeric
 | 
						|
 | 
						|
* Set
 | 
						|
  * Add Set#to_s as alias to #inspect [Feature #13676]
 | 
						|
  * Add Set#=== as alias to #include? [Feature #13801]
 | 
						|
  * Add Set#reset [Feature #6589]
 | 
						|
 | 
						|
* StringIO
 | 
						|
  * StringIO#write accepts multiple arguments
 | 
						|
 | 
						|
* WEBrick
 | 
						|
 | 
						|
  * Add Server Name Indication (SNI) support [Feature #13729]
 | 
						|
 | 
						|
* Zlib
 | 
						|
  * Zlib::GzipWriter#write accepts multiple arguments
 | 
						|
 | 
						|
=== Compatibility issues (excluding feature bug fixes)
 | 
						|
 | 
						|
* BasicSocket#read_nonblock and BasicSocket#write_nonblock no
 | 
						|
  longer sets the O_NONBLOCK file description flag as side effect
 | 
						|
  (on Linux only) [Feature #13362]
 | 
						|
 | 
						|
* Net::HTTP
 | 
						|
  * Net::HTTP#start now pass :ENV to p_addr by default. [Bug #13351]
 | 
						|
    To avoid this, pass nil explicitly.
 | 
						|
 | 
						|
* Random.raw_seed renamed to become Random.urandom.  It is now
 | 
						|
  applicable to non-seeding purposes due to [Bug #9569].
 | 
						|
 | 
						|
* Socket::Ifaddr#vhid is added [Feature #13803]
 | 
						|
 | 
						|
* ConditionVariable, Queue and SizedQueue reimplemented for speed.
 | 
						|
  They no longer subclass Struct. [Feature #13552]
 | 
						|
 | 
						|
=== Stdlib compatibility issues (excluding feature bug fixes)
 | 
						|
 | 
						|
* mathn.rb
 | 
						|
  Removed from stdlib. [Feature #10169]
 | 
						|
 | 
						|
* Rubygems
 | 
						|
  * Removed "ubygems.rb" file from stdlib. It's needless after the Ruby 1.9.
 | 
						|
 | 
						|
=== C API updates
 | 
						|
 | 
						|
=== Supported platform changes
 | 
						|
 | 
						|
* Drop to support NaCl platform
 | 
						|
  * https://bugs.chromium.org/p/chromium/issues/detail?id=239656#c160
 | 
						|
 | 
						|
=== Implementation improvements
 | 
						|
 | 
						|
* (This might not be a "user visible feature change" but) Hash class's
 | 
						|
  hash function is now SipHash13. [Feature #13017]
 | 
						|
 | 
						|
* SecureRandom now prefers OS-provided sources than OpenSSL. [Bug #9569]
 | 
						|
 | 
						|
* Mutex rewritten to be smaller and faster [Feature #13517]
 | 
						|
 | 
						|
* Performance of block passing using block parameters is improved by
 | 
						|
  lazy Proc allocation [Feature #14045]
 | 
						|
 | 
						|
=== Miscellaneous changes
 | 
						|
 | 
						|
* Print backtrace and error message in reverse order if STDERR is unchanged and a tty.
 | 
						|
  [Feature #8661] [experimental]
 | 
						|
 | 
						|
* configure option --with-ext now mandates its arguments.  So for
 | 
						|
  instance if you run ./configure --with-ext=openssl,+ then the
 | 
						|
  openssl library is guaranteed compiled, otherwise the build fails
 | 
						|
  abnormally.
 | 
						|
 | 
						|
  Note however to always add the ",+" at the end of the argument.
 | 
						|
  Otherwise nothing but openssl are built.  [Feature #13302]
 |