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@63048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			572 lines
		
	
	
	
		
			16 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			572 lines
		
	
	
	
		
			16 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
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Array#append  [Feature #12746]
 | 
						|
    * Array#prepend  [Feature #12746]
 | 
						|
 | 
						|
* Data
 | 
						|
 | 
						|
  * Is deprecated. It was a base class for C extensions, and it's not
 | 
						|
    necessary to expose in Ruby level. [Feature #3072]
 | 
						|
 | 
						|
* Exception
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Exception#full_message to retrieve a String expression of an exception,
 | 
						|
      formatted in the same way in which Ruby prints out an uncaught exception.
 | 
						|
      [Feature #14141] [experimental]
 | 
						|
 | 
						|
* Dir
 | 
						|
 | 
						|
  * Dir.glob provides new optional keyword argument, :base.
 | 
						|
    [Feature #13056]
 | 
						|
  * Dir.chdir (without block arg), Dir.open, Dir.new, Dir.mkdir, Dir.rmdir,
 | 
						|
    Dir.empty? releases GVL
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Dir.children  [Feature #11302]
 | 
						|
    * Dir.each_child  [Feature #11302]
 | 
						|
 | 
						|
* Enumerable
 | 
						|
 | 
						|
  * Enumerable#{any?,all?,none?,one?} accept a pattern argument [Feature #11286]
 | 
						|
 | 
						|
* File
 | 
						|
 | 
						|
  * File.open accepts :newline option to imply text mode.  [Bug #13350]
 | 
						|
  * File#path 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]
 | 
						|
  * File::Stat#{atime,mtime,ctime} support fractional second timestamps on
 | 
						|
    Windows 8 and later  [Feature #13726]
 | 
						|
  * File::Stat#ino and File.indentical? support ReFS 128bit ino on Windows 8.1
 | 
						|
    and later  [Feature #13731]
 | 
						|
  * File.readable?, File.readable_real?, File.writable?, File.writable_real?,
 | 
						|
    File.executable?, File.executable_real?, File.mkfifo, File.readlink,
 | 
						|
    File.truncate, File#truncate, File.chmod, File.lchmod, File.chown,
 | 
						|
    File.lchown, File.unlink, File.utime, File.lstat release GVL
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * File.lutime  [Feature #4052]
 | 
						|
 | 
						|
* Hash
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Hash#transform_keys  [Feature #13583]
 | 
						|
    * Hash#transform_keys!  [Feature #13583]
 | 
						|
    * Hash#slice  [Feature #8499]
 | 
						|
 | 
						|
* IO
 | 
						|
 | 
						|
  * IO.copy_stream tries copy offload with copy_file_range(2) [Feature #13867]
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * IO#pread  [Feature #4532]
 | 
						|
    * IO#pwrite  [Feature #4532]
 | 
						|
    * IO#write accepts multiple arguments  [Feature #9323]
 | 
						|
 | 
						|
* IOError
 | 
						|
 | 
						|
  * IO#close might raise an error with message "stream closed",
 | 
						|
    but it is refined to "stream closed in another thread". The new message
 | 
						|
    is more clear for user.
 | 
						|
    [Bug #13405]
 | 
						|
 | 
						|
* Integer
 | 
						|
 | 
						|
  * Integer#{round,floor,ceil,truncate} always return an Integer.
 | 
						|
    [Bug #13420]
 | 
						|
  * Integer#pow accepts modulo argument for calculating modular
 | 
						|
    exponentiation.  [Feature #12508] [Feature #11003]
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Integer#allbits?, Integer#anybits?, Integer#nobits? [Feature #12753]
 | 
						|
    * Integer.sqrt  [Feature #13219]
 | 
						|
 | 
						|
* Kernel
 | 
						|
 | 
						|
  * Kernel#yield_self   [Feature #6721]
 | 
						|
  * Kernel#pp  [Feature #14123]
 | 
						|
  * Kernel#warn(..., uplevel:n)  [Feature #12882]
 | 
						|
 | 
						|
* Method
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Method#=== that invokes Method#call, as same as Proc#=== [Feature #14142]
 | 
						|
 | 
						|
* Module
 | 
						|
 | 
						|
  * Module#{attr,attr_accessor,attr_reader,attr_writer} become public [Feature #14132]
 | 
						|
  * Module#{define_method,alias_method,undef_method,remove_method} become public [Feature #14133]
 | 
						|
 | 
						|
* Numeric
 | 
						|
 | 
						|
  * Numeric#step no longer hides errors from coerce method when
 | 
						|
    given a step value which cannot be compared with #> to 0.
 | 
						|
    [Feature #7688]
 | 
						|
  * Numerical comparison operators (<,<=,>=,>) no longer hide exceptions
 | 
						|
    from #coerce method internally. Return nil in #coerce if the coercion is
 | 
						|
    impossible.  [Feature #7688]
 | 
						|
 | 
						|
* Process
 | 
						|
 | 
						|
  * Precision of Process.times is improved if getrusage(2) exists. [Feature #11952]
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * Process.last_status as an alias of $? [Feature #14043]
 | 
						|
 | 
						|
* Range
 | 
						|
  * Range#initialize no longer hides exceptions when comparing begin and
 | 
						|
    end with #<=> and raise a "bad value for range" ArgumentError
 | 
						|
    but instead lets the exception from the #<=> call go through.
 | 
						|
    [Feature #7688]
 | 
						|
 | 
						|
* Regexp
 | 
						|
 | 
						|
  * Update to Onigmo 6.1.3-669ac9997619954c298da971fcfacccf36909d05.
 | 
						|
 | 
						|
    * Support absence operator https://github.com/k-takata/Onigmo/issues/82
 | 
						|
 | 
						|
  * Support new 5 emoji-related Unicode character properties
 | 
						|
 | 
						|
* RubyVM::InstructionSequence
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * RubyVM::InstructionSequence#each_child
 | 
						|
    * RubyVM::InstructionSequence#trace_points
 | 
						|
 | 
						|
* 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?} return nil for non-string arguments
 | 
						|
    instead of raising a TypeError. [Bug #13312]
 | 
						|
  * String#start_with? accepts a regexp [Feature #13712]
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * String#delete_prefix, String#delete_prefix! [Feature #12694]
 | 
						|
    * String#delete_suffix, String#delete_suffix! [Feature #13665]
 | 
						|
    * String#each_grapheme_cluster and String#grapheme_clusters to
 | 
						|
      enumerate grapheme clusters [Feature #13780]
 | 
						|
    * String#undump to unescape String#dump'ed string [Feature #12275]
 | 
						|
 | 
						|
* Struct
 | 
						|
 | 
						|
  * Struct.new takes `keyword_init: true` option to initialize members
 | 
						|
    with keyword arguments. [Feature #11925]
 | 
						|
 | 
						|
* Regexp/String: Update Unicode version from 9.0.0 to 10.0.0 [Feature #13685]
 | 
						|
 | 
						|
* Thread
 | 
						|
 | 
						|
  * Description set by Thread#name= is now visible on Windows 10.
 | 
						|
 | 
						|
  * New method:
 | 
						|
    * Thread#fetch  [Feature #13009]
 | 
						|
 | 
						|
  * The default of Thread.report_on_exception is now true,
 | 
						|
    showing unhandled exceptions terminating threads on $stderr.
 | 
						|
    [Feature #14143]
 | 
						|
 | 
						|
* Time
 | 
						|
 | 
						|
  * Time.at receives 3rd argument which specifies the unit of 2nd argument.
 | 
						|
    [Feature #13919]
 | 
						|
 | 
						|
* KeyError
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * KeyError#receiver [Feature #12063]
 | 
						|
    * KeyError#key      [Feature #12063]
 | 
						|
 | 
						|
* FrozenError
 | 
						|
 | 
						|
  * New exception class. [Feature #13224]
 | 
						|
 | 
						|
=== Stdlib updates (outstanding ones only)
 | 
						|
 | 
						|
* BigDecimal
 | 
						|
 | 
						|
  * Update to BigDecimal 1.3.4
 | 
						|
 | 
						|
  * The following features are added:
 | 
						|
 | 
						|
    * BigDecimal::VERSION
 | 
						|
 | 
						|
  * The following features have been deprecated,
 | 
						|
    and are planned to be removed in the version 1.4.0:
 | 
						|
 | 
						|
    * BigDecimal.new
 | 
						|
 | 
						|
    * BigDecimal.ver
 | 
						|
 | 
						|
  * BigDecimal#clone and #dup now do not make a new instance,
 | 
						|
    but returns the receiver itself.
 | 
						|
 | 
						|
* Coverage
 | 
						|
 | 
						|
  * Support branch coverage and method coverage measurement. [Feature #13901]
 | 
						|
    Branch coverage tells you which branches are executed, and which not.
 | 
						|
    Method coverage tells you which methods are invoked, and which not.
 | 
						|
    By running a test suite with this new feature, you can know which branches
 | 
						|
    and methods are executed by a test, and evaluate total coverage of a test
 | 
						|
    suite more strictly.
 | 
						|
 | 
						|
    You can specify the measuring target by an option to `Coverage.start`:
 | 
						|
 | 
						|
        Coverage.start(lines: true, branches: true, methods: true)
 | 
						|
 | 
						|
    After some Ruby files are loaded, you can use `Coverage.result` to get
 | 
						|
    the coverage result:
 | 
						|
 | 
						|
        Coverage.result
 | 
						|
        #=> { "/path/to/file.rb"=>
 | 
						|
        #     { :lines => [1, 2, 0, nil, ...],
 | 
						|
        #       :branches =>
 | 
						|
        #         { [:if, 0, 2, 1, 6, 4] =>
 | 
						|
        #             { [:then, 1, 3, 2, 3, 8] => 0,
 | 
						|
        #               [:else, 2, 5, 2, 5, 8] => 2
 | 
						|
        #             }
 | 
						|
        #         },
 | 
						|
        #       :methods => {
 | 
						|
        #          [Object, :foo, 1, 0, 7, 3] => 2
 | 
						|
        #       }
 | 
						|
        #     }
 | 
						|
        #   }
 | 
						|
 | 
						|
    The result type of line coverage is not changed; it is just an array that
 | 
						|
    contains numbers, which means the count that each line was executed,
 | 
						|
    or `nil`s, which means that the line is not relevant.
 | 
						|
 | 
						|
    The result type of branch coverage is:
 | 
						|
 | 
						|
        { (jump base) => { (jump target) => (counter) } }
 | 
						|
 | 
						|
    where jump base and targets have the format
 | 
						|
 | 
						|
        [type, unique-id, start lineno, start column, end lineno, end column]
 | 
						|
 | 
						|
    For example, `[:if, 0, 2, 1, 6, 4]` reads an `if` statement that ranges from
 | 
						|
    line 2 and column 1, to line 6 and column 4.  `[:then, 1, 3, 2, 3, 8]` reads
 | 
						|
    a `then` clause that ranges from line 3 and column 2, to line 3 and column 8.
 | 
						|
    Note that lineno starts from 1, and that columnno starts from 0.  So, the
 | 
						|
    above example shows a branch from the `if` to the `then` was never executed,
 | 
						|
    and a branch from the `if` to the `else` was executed twice.
 | 
						|
 | 
						|
    The result type of method coverage is:
 | 
						|
 | 
						|
        { (method key) => (counter) }
 | 
						|
 | 
						|
    where method key has the format
 | 
						|
 | 
						|
        [class, method-name, start lineno, start column, end lineno, end column]
 | 
						|
 | 
						|
    For example, `[Object, :foo, 1, 0, 7, 3]` reads `Object#foo` that ranges from
 | 
						|
    line 1 and column 0, to line 7 and column 3.  The above example shows this
 | 
						|
    `Object#foo` was invoked twice.
 | 
						|
 | 
						|
    Note: To keep compatibility, passing no option to `Coverage.start` will measure
 | 
						|
    only line coverage, and `Coverage.result` will return the old format:
 | 
						|
 | 
						|
        Coverage.result
 | 
						|
        #=> { "/path/to/file.rb"=> [1, 2, 0, nil, ...] }
 | 
						|
 | 
						|
* 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]
 | 
						|
 | 
						|
  * Default template file encoding is changed from ASCII-8BIT to UTF-8 in erb
 | 
						|
    command. [Bug #14095]
 | 
						|
 | 
						|
  * 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
 | 
						|
 | 
						|
  * IPAddr no longer accepts invalid address mask. [Bug #13399]
 | 
						|
  * IPAddr#{ipv4_compat,ipv4_compat?} are marked for deprecation. [Bug #13769]
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * IPAddr#prefix
 | 
						|
    * IPAddr#loopback?
 | 
						|
    * IPAddr#private? [Feature #11666]
 | 
						|
    * IPAddr#link_local? [Feature #10912]
 | 
						|
 | 
						|
* IRB
 | 
						|
 | 
						|
  * Print backtrace and error message in reverse order [Feature #8661] [experimental]
 | 
						|
  * `binding.irb` automatically requires irb and runs [Bug #13099] [experimental]
 | 
						|
  * `binding.irb` on its start shows source around the line where it was called
 | 
						|
    [Feature #14124]
 | 
						|
 | 
						|
* Matrix
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Matrix.combine and Matrix#combine [Feature #10903]
 | 
						|
    * Matrix#{hadamard_product,entrywise_product}
 | 
						|
 | 
						|
* Net::HTTP
 | 
						|
 | 
						|
  * Net::HTTP.new supports no_proxy parameter [Feature #11195]
 | 
						|
  * Net::HTTP#{min_version,max_version} [Feature #9450]
 | 
						|
  * Add more HTTP status classes
 | 
						|
  * Net::HTTP::STATUS_CODES is added as HTTP Status Code Repository [Misc #12935]
 | 
						|
  * Net::HTTP#{proxy_user,proxy_pass} reflect http_proxy environment variable
 | 
						|
    if the system's environment variable is multiuser safe. [Bug #12921]
 | 
						|
 | 
						|
* open-uri
 | 
						|
  * URI.open method defined as an alias to open-uri's Kernel.open.
 | 
						|
    open-uri's Kernel.open will be deprecated in future.
 | 
						|
 | 
						|
* OpenSSL
 | 
						|
 | 
						|
  * Updated Ruby/OpenSSL from version 2.0 to 2.1. Changes are noted in
 | 
						|
    "Version 2.1.0" section in ext/openssl/History.md.
 | 
						|
 | 
						|
* Pathname
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * Pathname#glob [Feature #7360]
 | 
						|
 | 
						|
* Psych
 | 
						|
 | 
						|
  * Update to Psych 3.0.2.
 | 
						|
 | 
						|
    * Convert fallback option to a keyword argument
 | 
						|
      https://github.com/ruby/psych/pull/342
 | 
						|
    * Add :symbolize_names option to Psych.load, Psych.safe_load like JSON.parse
 | 
						|
      https://github.com/ruby/psych/pull/333, https://github.com/ruby/psych/pull/337
 | 
						|
    * Add Psych::Handler#event_location
 | 
						|
      https://github.com/ruby/psych/pull/326
 | 
						|
    * Make frozen string literal = true
 | 
						|
      https://github.com/ruby/psych/pull/320
 | 
						|
    * Preserve time zone offset when deserializing times
 | 
						|
      https://github.com/ruby/psych/pull/316
 | 
						|
    * Remove deprecated method aliases for syck gem
 | 
						|
      https://github.com/ruby/psych/pull/312
 | 
						|
 | 
						|
* RbConfig
 | 
						|
 | 
						|
  * RbConfig::LIMITS is added to provide the limits of C types.
 | 
						|
    This is available when rbconfig/sizeof is loaded.
 | 
						|
 | 
						|
* Ripper
 | 
						|
 | 
						|
  * Ripper::EXPR_BEG and so on for Ripper#state.
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * Ripper#state to tell the state of scanner. [Feature #13686]
 | 
						|
 | 
						|
* RDoc
 | 
						|
 | 
						|
  * Update to RDoc 6.0.1.
 | 
						|
 | 
						|
    * Replace IRB based lexer with Ripper.
 | 
						|
      * https://github.com/ruby/rdoc/pull/512
 | 
						|
      * This much improves the speed of generating documents.
 | 
						|
      * It also facilitates supporting new syntax in the future.
 | 
						|
    * Support many new syntaxes of Ruby from the past few years.
 | 
						|
    * Use "frozen_string_literal: true".
 | 
						|
      Performance survey: https://gist.github.com/aycabta/abdfaa75ea8a6877eeb734e942e73800
 | 
						|
    * Support did_you_mean.
 | 
						|
 | 
						|
* Rubygems
 | 
						|
 | 
						|
  * Update to Rubygems 2.7.3.
 | 
						|
    * http://blog.rubygems.org/2017/11/28/2.7.3-released.html
 | 
						|
    * http://blog.rubygems.org/2017/11/08/2.7.2-released.html
 | 
						|
    * http://blog.rubygems.org/2017/11/03/2.7.1-released.html
 | 
						|
    * http://blog.rubygems.org/2017/11/01/2.7.0-released.html
 | 
						|
    * http://blog.rubygems.org/2017/10/09/2.6.14-released.html
 | 
						|
    * http://blog.rubygems.org/2017/08/27/2.6.13-released.html
 | 
						|
 | 
						|
* SecureRandom
 | 
						|
 | 
						|
  * New method:
 | 
						|
 | 
						|
    * SecureRandom.alphanumeric
 | 
						|
 | 
						|
* Set
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * Set#to_s as alias to #inspect [Feature #13676]
 | 
						|
    * Set#=== as alias to #include? [Feature #13801]
 | 
						|
    * Set#reset [Feature #6589]
 | 
						|
 | 
						|
* StringIO
 | 
						|
 | 
						|
  * StringIO#write accepts multiple arguments
 | 
						|
 | 
						|
* StringScanner
 | 
						|
 | 
						|
  * New methods:
 | 
						|
 | 
						|
    * StringScanner#size, StringScanner#captures, StringScanner#values_at  [Feature #836]
 | 
						|
 | 
						|
* URI
 | 
						|
 | 
						|
  * Relative path operations no longer collapse consecutive slashes to a single slash. [Bug #8352]
 | 
						|
 | 
						|
* WEBrick
 | 
						|
 | 
						|
  * Add Server Name Indication (SNI) support [Feature #13729]
 | 
						|
  * support Proc objects as body responses [Feature #855]
 | 
						|
  * released as a RubyGem [Feature #13173]
 | 
						|
  * avoid unintended behavior from Kernel#open [Misc #14216]
 | 
						|
 | 
						|
* Zlib
 | 
						|
 | 
						|
  * Zlib::GzipWriter#write accepts multiple arguments
 | 
						|
 | 
						|
=== Compatibility issues (excluding feature bug fixes)
 | 
						|
 | 
						|
* Socket
 | 
						|
 | 
						|
  * BasicSocket#read_nonblock and BasicSocket#write_nonblock no
 | 
						|
    longer set the O_NONBLOCK file description flag as side effect
 | 
						|
    (on Linux only) [Feature #13362]
 | 
						|
 | 
						|
* Random
 | 
						|
 | 
						|
  * Random.raw_seed renamed to become Random.urandom.  It is now
 | 
						|
    applicable to non-seeding purposes due to [Bug #9569].
 | 
						|
 | 
						|
* Socket
 | 
						|
 | 
						|
  * 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)
 | 
						|
 | 
						|
* Gemification
 | 
						|
 | 
						|
  * Promote following standard libraries to default gems.
 | 
						|
    * cmath
 | 
						|
    * csv
 | 
						|
    * date
 | 
						|
    * dbm
 | 
						|
    * etc
 | 
						|
    * fcntl
 | 
						|
    * fiddle
 | 
						|
    * fileutils
 | 
						|
    * gdbm
 | 
						|
    * ipaddr
 | 
						|
    * scanf
 | 
						|
    * sdbm
 | 
						|
    * stringio
 | 
						|
    * strscan
 | 
						|
    * webrick
 | 
						|
    * zlib
 | 
						|
 | 
						|
* Logger
 | 
						|
 | 
						|
  * Logger.new("| command") had been working to open a command
 | 
						|
    unintentionally. It was prohibited, and now Logger#initialize
 | 
						|
    treats a String argument only as a filename, as its specification.
 | 
						|
    [Bug #14212]
 | 
						|
 | 
						|
* Net::HTTP
 | 
						|
 | 
						|
  * Net::HTTP#start now passes :ENV to p_addr by default. [Bug #13351]
 | 
						|
    To avoid this, pass nil explicitly.
 | 
						|
 | 
						|
* mathn.rb
 | 
						|
 | 
						|
  * Removed from stdlib. [Feature #10169]
 | 
						|
 | 
						|
* Rubygems
 | 
						|
 | 
						|
  * Removed "ubygems.rb" file from stdlib. It's needless since Ruby 1.9.
 | 
						|
 | 
						|
=== C API updates
 | 
						|
 | 
						|
=== Supported platform changes
 | 
						|
 | 
						|
* Drop support of 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]
 | 
						|
 | 
						|
* Dynamic instrumentation for TracePoint hooks instead of using "trace"
 | 
						|
  instruction to avoid overhead [Feature #14104]
 | 
						|
 | 
						|
* ERB now generates code from a template twice as fast as Ruby 2.4
 | 
						|
 | 
						|
=== Miscellaneous changes
 | 
						|
 | 
						|
* Print backtrace and error message in reverse order if $stderr is unchanged and a tty.
 | 
						|
  [Feature #8661] [experimental]
 | 
						|
 | 
						|
* Print error message in bold/underlined text if $stderr is unchanged and a tty.
 | 
						|
  [Feature #14140] [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]
 |