HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Ruby27-x64/share/doc/ruby/html/NEWS-2_4_0.html
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">

<title>NEWS-2.4.0 - RDoc Documentation</title>

<script type="text/javascript">
  var rdoc_rel_prefix = "./";
  var index_rel_prefix = "./";
</script>

<script src="./js/navigation.js" defer></script>
<script src="./js/search.js" defer></script>
<script src="./js/search_index.js" defer></script>
<script src="./js/searcher.js" defer></script>
<script src="./js/darkfish.js" defer></script>

<link href="./css/fonts.css" rel="stylesheet">
<link href="./css/rdoc.css" rel="stylesheet">




<body id="top" role="document" class="file">
<nav role="navigation">
  <div id="project-navigation">
    <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="./index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="./table_of_contents.html#pages">Pages</a>
    <a href="./table_of_contents.html#classes">Classes</a>
    <a href="./table_of_contents.html#methods">Methods</a>
  </div>
</div>

    <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

  </div>

  
<div class="nav-section">
  <h3>Table of Contents</h3>

  <ul class="link-list" role="directory">
    <li><a href="#label-NEWS+for+Ruby+2.4.0">NEWS for Ruby 2.4.0</a>
    <li><a href="#label-Changes+since+the+2.3.0+release">Changes since the 2.3.0 release</a>
    <li><a href="#label-Language+changes">Language changes</a>
    <li><a href="#label-Core+classes+updates+-28outstanding+ones+only-29">Core classes updates (outstanding ones only)</a>
    <li><a href="#label-Stdlib+updates+-28outstanding+ones+only-29">Stdlib updates (outstanding ones only)</a>
    <li><a href="#label-Compatibility+issues+-28excluding+feature+bug+fixes-29">Compatibility issues (excluding feature bug fixes)</a>
    <li><a href="#label-Stdlib+compatibility+issues+-28excluding+feature+bug+fixes-29">Stdlib compatibility issues (excluding feature bug fixes)</a>
    <li><a href="#label-C+API+updates">C API updates</a>
    <li><a href="#label-Supported+platform+changes">Supported platform changes</a>
    <li><a href="#label-Implementation+improvements">Implementation improvements</a>
    <li><a href="#label-Miscellaneous+changes">Miscellaneous changes</a>
  </ul>
</div>


  <div id="project-metadata">
    <div id="fileindex-section" class="nav-section">
  <h3>Pages</h3>

  <ul class="link-list">
  
    <li><a href="./CONTRIBUTING_md.html">CONTRIBUTING</a>
  
    <li><a href="./COPYING.html">COPYING</a>
  
    <li><a href="./COPYING_ja.html">COPYING.ja</a>
  
    <li><a href="./LEGAL.html">LEGAL</a>
  
    <li><a href="./NEWS.html">NEWS</a>
  
    <li><a href="./NEWS-1_8_7.html">NEWS-1.8.7</a>
  
    <li><a href="./NEWS-1_9_1.html">NEWS-1.9.1</a>
  
    <li><a href="./NEWS-1_9_2.html">NEWS-1.9.2</a>
  
    <li><a href="./NEWS-1_9_3.html">NEWS-1.9.3</a>
  
    <li><a href="./NEWS-2_0_0.html">NEWS-2.0.0</a>
  
    <li><a href="./NEWS-2_1_0.html">NEWS-2.1.0</a>
  
    <li><a href="./NEWS-2_2_0.html">NEWS-2.2.0</a>
  
    <li><a href="./NEWS-2_3_0.html">NEWS-2.3.0</a>
  
    <li><a href="./NEWS-2_4_0.html">NEWS-2.4.0</a>
  
    <li><a href="./NEWS-2_5_0.html">NEWS-2.5.0</a>
  
    <li><a href="./NEWS-2_6_0.html">NEWS-2.6.0</a>
  
    <li><a href="./README_ja_md.html">README.ja</a>
  
    <li><a href="./README_md.html">README</a>
  
    <li><a href="./bug_triaging_rdoc.html">bug_triaging</a>
  
    <li><a href="./contributing_rdoc.html">contributing</a>
  
    <li><a href="./contributors_rdoc.html">contributors</a>
  
    <li><a href="./dtrace_probes_rdoc.html">dtrace_probes</a>
  
    <li><a href="./extension_ja_rdoc.html">extension.ja</a>
  
    <li><a href="./extension_rdoc.html">extension</a>
  
    <li><a href="./globals_rdoc.html">globals</a>
  
    <li><a href="./keywords_rdoc.html">keywords</a>
  
    <li><a href="./lib/racc/pre-setup.html">pre-setup</a>
  
    <li><a href="./lib/racc/rdoc/grammar_en_rdoc.html">grammar.en</a>
  
    <li><a href="./maintainers_rdoc.html">maintainers</a>
  
    <li><a href="./marshal_rdoc.html">marshal</a>
  
    <li><a href="./regexp_rdoc.html">regexp</a>
  
    <li><a href="./security_rdoc.html">security</a>
  
    <li><a href="./signals_rdoc.html">signals</a>
  
    <li><a href="./standard_library_rdoc.html">standard_library</a>
  
    <li><a href="./syntax_rdoc.html">syntax</a>
  
    <li><a href="./syntax/assignment_rdoc.html">assignment</a>
  
    <li><a href="./syntax/calling_methods_rdoc.html">calling_methods</a>
  
    <li><a href="./syntax/comments_rdoc.html">comments</a>
  
    <li><a href="./syntax/control_expressions_rdoc.html">control_expressions</a>
  
    <li><a href="./syntax/exceptions_rdoc.html">exceptions</a>
  
    <li><a href="./syntax/literals_rdoc.html">literals</a>
  
    <li><a href="./syntax/methods_rdoc.html">methods</a>
  
    <li><a href="./syntax/miscellaneous_rdoc.html">miscellaneous</a>
  
    <li><a href="./syntax/modules_and_classes_rdoc.html">modules_and_classes</a>
  
    <li><a href="./syntax/precedence_rdoc.html">precedence</a>
  
    <li><a href="./syntax/refinements_rdoc.html">refinements</a>
  
    <li><a href="./win32/README_win32.html">README.win32</a>
  
  </ul>
</div>

  </div>
</nav>

<main role="main" aria-label="Page NEWS-2.4.0">

<h1 id="label-NEWS+for+Ruby+2.4.0"><a href="NEWS.html">NEWS</a> for Ruby 2.4.0<span><a href="#label-NEWS+for+Ruby+2.4.0">&para;</a> <a href="#top">&uarr;</a></span></h1>

<p>This document is a list of user visible feature changes made between releases except for bug fixes.</p>

<p>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. <code>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</code>)</p>

<h2 id="label-Changes+since+the+2.3.0+release">Changes since the 2.3.0 release<span><a href="#label-Changes+since+the+2.3.0+release">&para;</a> <a href="#top">&uarr;</a></span></h2>

<h3 id="label-Language+changes">Language changes<span><a href="#label-Language+changes">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p>Multiple assignment in conditional expression is now allowed.</p>
<dl class="rdoc-list label-list"><dt>Feature #10617
<dd></dd></dl>
</li><li>
<p>Refinements is enabled at method by <a href="Symbol.html#method-i-to_proc"><code>Symbol#to_proc</code></a>.  [Feature #9451]</p>
</li><li>
<p>Refinements is enabled with Kernel#send and BasicObject#__send__.</p>
<dl class="rdoc-list label-list"><dt>Feature #11476
<dd></dd></dl>
</li><li>
<p>Rescue modifier now applicable to method arguments.</p>
<dl class="rdoc-list label-list"><dt>Feature #12686
<dd></dd></dl>
</li><li>
<p>Toplevel return is now allowed.  [Feature #4840]</p>
</li></ul>

<h3 id="label-Core+classes+updates+-28outstanding+ones+only-29">Core classes updates (outstanding ones only)<span><a href="#label-Core+classes+updates+-28outstanding+ones+only-29">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p><a href="Array.html"><code>Array</code></a></p>
<ul><li>
<p><a href="Array.html#method-i-concat"><code>Array#concat</code></a> [Feature #12333] Now takes multiple arguments.</p>
</li><li>
<p><a href="Array.html#method-i-max"><code>Array#max</code></a> and <a href="Array.html#method-i-min"><code>Array#min</code></a>.  [Feature #12172] This may cause a tiny incompatibility: if you redefine <a href="Enumerable.html#method-i-max"><code>Enumerable#max</code></a> and call max to an <a href="Array.html"><code>Array</code></a>, your redefinition will be now ignored.  You should also redefine <a href="Array.html#method-i-max"><code>Array#max</code></a>.</p>
</li><li>
<p><a href="Array.html#method-i-pack"><code>Array#pack</code></a> [Feature #12754] Now takes optional argument `buffer:&#39; to reuse already allocated buffer.</p>
</li><li>
<p><a href="Array.html#method-i-sum"><code>Array#sum</code></a>  [Feature #12217] This is different from <a href="Enumerable.html#method-i-sum"><code>Enumerable#sum</code></a> in that <a href="Array.html#method-i-sum"><code>Array#sum</code></a> doesn&#39;t depend on the definition of each method.</p>
</li></ul>
</li><li>
<p><a href="Comparable.html"><code>Comparable</code></a></p>
<ul><li>
<p><a href="Comparable.html#method-i-clamp"><code>Comparable#clamp</code></a>.  [Feature #10594]</p>
</li></ul>
</li><li>
<p><a href="Dir.html"><code>Dir</code></a></p>
<ul><li>
<p><a href="Dir.html#method-c-empty-3F"><code>Dir.empty?</code></a>.  [Feature #10121]</p>
</li></ul>
</li><li>
<p><a href="Enumerable.html"><code>Enumerable</code></a></p>
<ul><li>
<p><a href="Enumerable.html#method-i-chunk"><code>Enumerable#chunk</code></a> called without a block now return an <a href="Enumerator.html"><code>Enumerator</code></a></p>
<dl class="rdoc-list label-list"><dt>Feature #2172
<dd></dd></dl>
</li><li>
<p><a href="Enumerable.html#method-i-sum"><code>Enumerable#sum</code></a>  [Feature #12217]</p>
</li><li>
<p><a href="Enumerable.html#method-i-uniq"><code>Enumerable#uniq</code></a>  [Feature #11090]</p>
</li></ul>
</li><li>
<p><a href="Enumerator/Lazy.html"><code>Enumerator::Lazy</code></a></p>
<ul><li>
<p><a href="Enumerator/Lazy.html#method-i-chunk_while"><code>Enumerator::Lazy#chunk_while</code></a>  [GH-1186]</p>
</li><li>
<p><a href="Enumerator/Lazy.html#method-i-uniq"><code>Enumerator::Lazy#uniq</code></a>  [Feature #11090]</p>
</li></ul>
</li><li>
<p><a href="File.html"><code>File</code></a></p>
<ul><li>
<p><a href="File.html#method-c-empty-3F"><code>File.empty?</code></a>.  [Feature #9969]</p>
</li></ul>
</li><li>
<p><a href="Float.html"><code>Float</code></a></p>
<ul><li>
<p><a href="Float.html#method-i-ceil"><code>Float#ceil</code></a>, <a href="Float.html#method-i-floor"><code>Float#floor</code></a>, and <a href="Float.html#method-i-truncate"><code>Float#truncate</code></a> now take an optional digits, as well as <a href="Float.html#method-i-round"><code>Float#round</code></a>.  [Feature #12245]</p>
</li><li>
<p><a href="Float.html#method-i-round"><code>Float#round</code></a> now takes an optional keyword argument, half option, and the default behavior is round-up.  [Bug #12548] [Bug #12958] half option can be one of :even, :up, and :down.  [Feature #12953]</p>
</li></ul>
</li><li>
<p><a href="Hash.html"><code>Hash</code></a></p>
<ul><li>
<p><a href="Hash.html#method-i-compact"><code>Hash#compact</code></a> and <a href="Hash.html#method-i-compact-21"><code>Hash#compact!</code></a>  [Feature #11818]</p>
</li><li>
<p><a href="Hash.html#method-i-transform_values"><code>Hash#transform_values</code></a> and <a href="Hash.html#method-i-transform_values-21"><code>Hash#transform_values!</code></a>  [Feature #12512]</p>
</li></ul>
</li><li>
<p><a href="Integer.html"><code>Integer</code></a></p>
<ul><li>
<p>Fixnum and Bignum are unified into <a href="Integer.html"><code>Integer</code></a>  [Feature #12005]</p>
</li><li>
<p><a href="Integer.html#method-i-ceil"><code>Integer#ceil</code></a>, <a href="Integer.html#method-i-floor"><code>Integer#floor</code></a>, and <a href="Integer.html#method-i-truncate"><code>Integer#truncate</code></a> now take an optional digits, as well as <a href="Integer.html#method-i-round"><code>Integer#round</code></a>.  [Feature #12245]</p>
</li><li>
<p><a href="Integer.html#method-i-digits"><code>Integer#digits</code></a> for extracting columns of place-value notation [Feature #12447]</p>
</li><li>
<p><a href="Integer.html#method-i-round"><code>Integer#round</code></a> now takes an optional keyword argument, half option, and the default behavior is round-up now.  [Bug #12548] [Bug #12958] half option can be one of :even, :up, and :down.  [Feature #12953]</p>
</li></ul>
</li><li>
<p><a href="IO.html"><code>IO</code></a></p>
<ul><li>
<p><a href="IO.html#method-i-gets"><code>IO#gets</code></a>, <a href="IO.html#method-i-readline"><code>IO#readline</code></a>, <a href="IO.html#method-i-each_line"><code>IO#each_line</code></a>, <a href="IO.html#method-i-readlines"><code>IO#readlines</code></a>, <a href="IO.html#method-c-foreach"><code>IO.foreach</code></a> now takes an optional keyword argument, chomp flag.  [Feature #12553]</p>
</li></ul>
</li><li>
<p><a href="Kernel.html"><code>Kernel</code></a></p>
<ul><li>
<p>Kernel#clone now takes an optional keyword argument, freeze flag.</p>
<dl class="rdoc-list label-list"><dt>Feature #12300
<dd></dd></dl>
</li></ul>
</li><li>
<p><a href="MatchData.html"><code>MatchData</code></a></p>
<ul><li>
<p><a href="MatchData.html#method-i-named_captures"><code>MatchData#named_captures</code></a> [Feature #11999]</p>
</li><li>
<p><a href="MatchData.html#method-i-values_at"><code>MatchData#values_at</code></a> supports named captures [Feature #9179]</p>
</li></ul>
</li><li>
<p><a href="Module.html"><code>Module</code></a></p>
<ul><li>
<p><a href="Module.html#method-i-refine"><code>Module#refine</code></a> accepts a module as the argument now. [Feature #12534]</p>
</li><li>
<p><a href="Module.html#method-c-used_modules"><code>Module.used_modules</code></a> [Feature #7418]</p>
</li></ul>
</li><li>
<p><a href="Numeric.html"><code>Numeric</code></a></p>
<ul><li>
<p><a href="Numeric.html#method-i-finite-3F"><code>Numeric#finite?</code></a>, <a href="Numeric.html#method-i-infinite-3F"><code>Numeric#infinite?</code></a> [Feature #12039]</p>
</li></ul>
</li><li>
<p><a href="Process.html"><code>Process</code></a></p>
<ul><li>
<p>Support CLOCK_MONOTONIC_RAW_APPROX, CLOCK_UPTIME_RAW, and CLOCK_UPTIME_RAW_APPROX which are introduced by macOS 10.12.</p>
</li></ul>
</li><li>
<p><a href="Rational.html"><code>Rational</code></a></p>
<ul><li>
<p><a href="Rational.html#method-i-round"><code>Rational#round</code></a> now takes an optional keyword argument, half option, and the default behavior is round-up now.  [Bug #12548] [Bug #12958] half option can be one of :even, :up, and :down.  [Feature #12953]</p>
</li></ul>
</li><li>
<p><a href="Regexp.html"><code>Regexp</code></a></p>
<ul><li>
<p>meta character X matches Unicode 9.0 characters with some workarounds for UTR #51 Unicode Emoji, Version 4.0 emoji zwj sequences.</p>
</li><li>
<p><a href="Regexp.html#method-i-match-3F"><code>Regexp#match?</code></a> [Feature #8110] This returns bool and doesn&#39;t save backref.</p>
</li><li>
<p>Update to Onigmo 6.0.0.</p>
</li></ul>
</li><li>
<p>Regexp/String: Update Unicode version from 8.0.0 to 9.0.0 [Feature #12513]</p>
</li><li>
<p>RubyVM::Env</p>
<ul><li>
<p>RubyVM::Env was removed.</p>
</li></ul>
</li><li>
<p><a href="String.html"><code>String</code></a></p>
<ul><li>
<p><a href="String.html#method-i-casecmp-3F"><code>String#casecmp?</code></a> [Feature #12786]</p>
</li><li>
<p><a href="String.html#method-i-concat"><code>String#concat</code></a>, <a href="String.html#method-i-prepend"><code>String#prepend</code></a> [Feature #12333] Now takes multiple arguments.</p>
</li><li>
<p><a href="String.html#method-i-each_line"><code>String#each_line</code></a>, <a href="String.html#method-i-lines"><code>String#lines</code></a> now takes an optional keyword argument, chomp flag.  [Feature #12553]</p>
</li><li>
<p><a href="String.html#method-i-match-3F"><code>String#match?</code></a> [Feature #12898]</p>
</li><li>
<p><a href="String.html#method-i-unpack1"><code>String#unpack1</code></a> [Feature #12752]</p>
</li><li>
<p><a href="String.html#method-i-upcase"><code>String#upcase</code></a>, <a href="String.html#method-i-downcase"><code>String#downcase</code></a>, <a href="String.html#method-i-capitalize"><code>String#capitalize</code></a>, <a href="String.html#method-i-swapcase"><code>String#swapcase</code></a> and their bang variants work for all of Unicode, and are no longer limited to ASCII. Supported encodings are UTF-8, UTF-16BE/LE, UTF-32BE/LE, and ISO-8859-1~16. Variations are available with options. See the documentation of <a href="String.html#method-i-downcase"><code>String#downcase</code></a> for details. [Feature #10085]</p>
</li><li>
<p><a href="String.html#method-c-new"><code>String.new</code></a>(capacity: size) [Feature #12024]</p>
</li></ul>
</li><li>
<p><a href="StringIO.html"><code>StringIO</code></a></p>
<ul><li>
<p><a href="StringIO.html#method-i-gets"><code>StringIO#gets</code></a>, <a href="IO/generic_readable.html#method-i-readline"><code>StringIO#readline</code></a>, <a href="StringIO.html#method-i-each_line"><code>StringIO#each_line</code></a>, <a href="StringIO.html#method-i-readlines"><code>StringIO#readlines</code></a> now takes an optional keyword argument, chomp flag.  [Feature #12553]</p>
</li></ul>
</li><li>
<p><a href="Symbol.html"><code>Symbol</code></a></p>
<ul><li>
<p><a href="Symbol.html#method-i-casecmp-3F"><code>Symbol#casecmp?</code></a> [Feature #12786]</p>
</li><li>
<p><a href="Symbol.html#method-i-match"><code>Symbol#match</code></a> now returns <a href="MatchData.html"><code>MatchData</code></a>.  [Bug #11991]</p>
</li><li>
<p><a href="Symbol.html#method-i-match-3F"><code>Symbol#match?</code></a> [Feature #12898]</p>
</li><li>
<p><a href="Symbol.html#method-i-upcase"><code>Symbol#upcase</code></a>, <a href="Symbol.html#method-i-downcase"><code>Symbol#downcase</code></a>, <a href="Symbol.html#method-i-capitalize"><code>Symbol#capitalize</code></a>, and <a href="Symbol.html#method-i-swapcase"><code>Symbol#swapcase</code></a> now work for all of Unicode. See the documentation of <a href="String.html#method-i-downcase"><code>String#downcase</code></a> for details. [Feature #10085]</p>
</li></ul>
</li><li>
<p><a href="Thread.html"><code>Thread</code></a></p>
<ul><li>
<p><a href="Thread.html#method-i-report_on_exception"><code>Thread#report_on_exception</code></a> and <a href="Thread.html#method-c-report_on_exception"><code>Thread.report_on_exception</code></a></p>
<dl class="rdoc-list label-list"><dt>Feature #6647
<dd></dd></dl>
</li></ul>
</li><li>
<p><a href="TracePoint.html"><code>TracePoint</code></a></p>
<ul><li>
<p><a href="TracePoint.html#method-i-callee_id"><code>TracePoint#callee_id</code></a> [Feature #12747]</p>
</li></ul>
</li><li>
<p><a href="Warning.html"><code>Warning</code></a></p>
<ul><li>
<p>New module named <a href="Warning.html"><code>Warning</code></a> is introduced.  By default it has only one singleton method, named warn.  This makes it possible for 3rd-party libraries to control the way warnings are handled.</p>
<dl class="rdoc-list label-list"><dt>Feature #12299
<dd></dd></dl>
</li></ul>
</li></ul>

<h3 id="label-Stdlib+updates+-28outstanding+ones+only-29">Stdlib updates (outstanding ones only)<span><a href="#label-Stdlib+updates+-28outstanding+ones+only-29">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p><a href="CGI.html"><code>CGI</code></a></p>
<ul><li>
<p>Don&#39;t allow , as a separator [Bug #12791]</p>
</li></ul>
</li><li>
<p><a href="CSV.html"><code>CSV</code></a></p>
<ul><li>
<p>Add a liberal_parsing option. [Feature #11839]</p>
</li></ul>
</li><li>
<p><a href="IPAddr.html"><code>IPAddr</code></a></p>
<ul><li>
<p>IPAddr#== and IPAddr#&lt;=&gt; no longer raise an exception if coercion fails.</p>
<dl class="rdoc-list label-list"><dt>Bug #12799
<dd></dd></dl>
</li></ul>
</li><li>
<p>IRB</p>
<ul><li>
<p><a href="Binding.html#method-i-irb"><code>Binding#irb</code></a>: Start a REPL session like `binding.pry` at r56624.</p>
</li></ul>
</li><li>
<p><a href="Logger.html"><code>Logger</code></a></p>
<ul><li>
<p>Allow specifying logger parameters in constructor such as level, progname, datetime_format, formatter. [Feature #12224]</p>
</li><li>
<p>Add shift_period_suffix option. [Feature #10772]</p>
</li></ul>
</li><li>
<p><a href="Net/HTTP.html"><code>Net::HTTP</code></a></p>
<ul><li>
<p>New method: <a href="Net/HTTP.html#method-c-post"><code>Net::HTTP.post</code></a> [Feature #12375]</p>
</li></ul>
</li><li>
<p><a href="Net/FTP.html"><code>Net::FTP</code></a></p>
<ul><li>
<p>Support TLS (RFC 4217).</p>
</li><li>
<p>Support hash style options for <a href="Net/FTP.html#method-c-new"><code>Net::FTP.new</code></a>.</p>
</li><li>
<p>Add a new optional argument pathname to <a href="Net/FTP.html#method-i-status"><code>Net::FTP#status</code></a>. Contributed by soleboxy. [GH-1478] [Feature #12965]</p>
</li></ul>
</li><li>
<p><a href="OpenSSL.html"><code>OpenSSL</code></a></p>
<ul><li>
<p>Includes Ruby/OpenSSL 2.0. <a href="OpenSSL.html"><code>OpenSSL</code></a> has been extracted as a Gem and is maintained at a separate repository now: <a href="https://github.com/ruby/openssl">github.com/ruby/openssl</a>. It still remains as a &#39;default gem&#39;.  [Feature #9612] Refer to ext/openssl/History.md for the full release note.</p>
</li></ul>
</li><li>
<p>optparse</p>
<ul><li>
<p>Add an into option. [Feature #11191]</p>
</li></ul>
</li><li>
<p>pathname</p>
<ul><li>
<p>New method: <a href="Pathname.html#method-i-empty-3F"><code>Pathname#empty?</code></a> [Feature #12596]</p>
</li></ul>
</li><li>
<p><a href="Readline.html"><code>Readline</code></a></p>
<ul><li>
<p><a href="Readline.html#method-c-quoting_detection_proc"><code>Readline.quoting_detection_proc</code></a> and <a href="Readline.html#method-c-quoting_detection_proc-3D"><code>Readline.quoting_detection_proc=</code></a></p>
<dl class="rdoc-list label-list"><dt>Feature #12659
<dd></dd></dl>
</li></ul>
</li><li>
<p><a href="REXML.html"><code>REXML</code></a></p>
<ul><li>
<p><a href="REXML/Element.html#method-i-5B-5D"><code>REXML::Element#[]</code></a>: If <a href="String.html"><code>String</code></a> or <a href="Symbol.html"><code>Symbol</code></a> is specified, attribute value is returned. Otherwise, Nth child is returned. This is backward compatible change.</p>
</li></ul>
</li><li>
<p>set</p>
<ul><li>
<p>New methods: <a href="Set.html#method-i-compare_by_identity"><code>Set#compare_by_identity</code></a> and <a href="Set.html#method-i-compare_by_identity-3F"><code>Set#compare_by_identity?</code></a>.</p>
<dl class="rdoc-list label-list"><dt>Feature #12210
<dd></dd></dl>
</li></ul>
</li><li>
<p><a href="WEBrick.html"><code>WEBrick</code></a></p>
<ul><li>
<p>Don&#39;t allow , as a separator [Bug #12791]</p>
</li></ul>
</li></ul>

<h3 id="label-Compatibility+issues+-28excluding+feature+bug+fixes-29">Compatibility issues (excluding feature bug fixes)<span><a href="#label-Compatibility+issues+-28excluding+feature+bug+fixes-29">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p><a href="Array.html#method-i-sum"><code>Array#sum</code></a> and <a href="Enumerable.html#method-i-sum"><code>Enumerable#sum</code></a> are implemented.  [Feature #12217] Ruby itself has no compatibility problem because Ruby didn&#39;t have sum method for arrays before Ruby 2.4. However many third party gems, activesupport, facets, simple_stats, etc, defines sum method.  These implementations are mostly compatible but there are subtle differences. Ruby&#39;s sum method should be mostly compatible but it is impossible to be perfectly compatible with all of them.</p>
</li><li>
<p>Fixnum and Bignum are unified into <a href="Integer.html"><code>Integer</code></a>  [Feature #12005] Fixnum class and Bignum class is removed. <a href="Integer.html"><code>Integer</code></a> class is changed from abstract class to concrete class. For example, 0 is an instance of Integer: 0.class returns <a href="Integer.html"><code>Integer</code></a>. The constants Fixnum and Bignum is bound to <a href="Integer.html"><code>Integer</code></a>. So obj.kind_of?(Fixnum) works as obj.kind_of?(<a href="Integer.html"><code>Integer</code></a>). At C-level, Fixnum object and Bignum object should be distinguished by FIXNUM_P(obj) and RB_TYPE_P(obj, T_BIGNUM). RUBY_INTEGER_UNIFICATION can be used to detect this feature at C-level. 0.class == <a href="Integer.html"><code>Integer</code></a> can be used to detect this feature at Ruby-level. The C-level constants, rb_cFixnum and rb_cBignum, are removed. They can cause compilation failure.</p>
</li><li>
<p>String/Symbol#upcase/downcase/swapcase/capitalize(!) now work for all of Unicode, not only for ASCII. [Feature #10085] No change is needed if the data is in ASCII anyway or if the limitation to ASCII was only tolerated while waiting for a more extensive implementation. A change (using the :ascii option) is needed in cases where Unicode data is processed, but the operation has to be limited to ASCII only. A good example of this are internationalized domain names.</p>
</li><li>
<p>TRUE / FALSE / NIL These constants are now obsoleted. [Feature #12574] Use true / false / nil resp. instead.</p>
</li></ul>

<h3 id="label-Stdlib+compatibility+issues+-28excluding+feature+bug+fixes-29">Stdlib compatibility issues (excluding feature bug fixes)<span><a href="#label-Stdlib+compatibility+issues+-28excluding+feature+bug+fixes-29">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p><a href="DateTime.html"><code>DateTime</code></a></p>
<ul><li>
<p><a href="DateTime.html#method-i-to_time"><code>DateTime#to_time</code></a> now preserves timezone.  [Bug #12189]</p>
</li></ul>
</li><li>
<p><a href="Psych.html"><code>Psych</code></a></p>
<ul><li>
<p>Update to <a href="Psych.html"><code>Psych</code></a> 2.2.2</p>
</li></ul>
</li><li>
<p><a href="RDoc.html"><code>RDoc</code></a></p>
<ul><li>
<p>Update to <a href="RDoc.html"><code>RDoc</code></a> 5.0.0</p>
</li></ul>
</li><li>
<p>RubyGems</p>
<ul><li>
<p>Update to RubyGems 2.6.8</p>
</li></ul>
</li><li>
<p>shellwords</p>
<ul><li>
<p><a href="Shellwords.html#method-c-shellwords"><code>Shellwords.shellwords</code></a> (shellsplit) treats the backslash as escape character only when followed by one of the following characters: $ ` “ \ &lt;newline&gt;</p>
<dl class="rdoc-list label-list"><dt>Bug #10055
<dd></dd></dl>
</li></ul>
</li><li>
<p><a href="Time.html"><code>Time</code></a></p>
<ul><li>
<p><a href="Time.html#method-i-to_time"><code>Time#to_time</code></a> now preserves timezone.  [Bug #12271]</p>
</li></ul>
</li><li>
<p>thread</p>
<ul><li>
<p>the extension library is removed.  Till 2.0 it was a pure ruby script “thread.rb”, which has precedence over “thread.so”, and has been provided in $LOADED_FEATURES since 2.1.</p>
</li></ul>
</li><li>
<p>Tk</p>
<ul><li>
<p>Tk is removed from stdlib.  [Feature #8539] <a href="https://github.com/ruby/tk">github.com/ruby/tk</a> is the new upstream.</p>
</li></ul>
</li><li>
<p>XMLRPC</p>
<ul><li>
<p>XMLRPC is removed from stdlib, and bundled as gem. [Feature #<a href="ruby-core:74239">12160]</a> <a href="https://github.com/ruby/xmlrpc">github.com/ruby/xmlrpc</a> is the new upstream.</p>
</li></ul>
</li><li>
<p><a href="Zlib.html"><code>Zlib</code></a></p>
<ul><li>
<p><a href="Zlib.html#method-c-gzip"><code>Zlib.gzip</code></a> and <a href="Zlib.html#method-c-gunzip"><code>Zlib.gunzip</code></a> [Feature #13020]</p>
</li></ul>
</li></ul>

<h3 id="label-C+API+updates">C API updates<span><a href="#label-C+API+updates">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p>ruby_show_version() will no longer exits the process, if RUBY_SHOW_COPYRIGHT_TO_DIE is set to 0.  This will be the default in the future.</p>
</li><li>
<p>rb_gc_adjust_memory_usage() [Feature #12690]</p>
</li></ul>

<h3 id="label-Supported+platform+changes">Supported platform changes<span><a href="#label-Supported+platform+changes">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p>FreeBSD &lt; 4 is no longer supported</p>
</li></ul>

<h3 id="label-Implementation+improvements">Implementation improvements<span><a href="#label-Implementation+improvements">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p>In some condition, `[x, y].max` and `[x, y].min` are optimized so that a temporal array is not created.  The concrete condition is an implementation detail: currently, the array literal must have no splat, must have at least one expression but literal, the length must be &lt;= 0x100, and <a href="Array.html#method-i-max"><code>Array#max</code></a> and min must not be redefined.  It will work in most casual and real-life use case where it is written with intent to `Math.max(x, y)`.</p>
</li><li>
<p><a href="Thread.html"><code>Thread</code></a> deadlock detection now shows their backtrace and dependency. [Feature #8214]</p>
</li><li>
<p>st_table (st.c) internal data structure is improved. [Feature #12142]</p>
</li><li>
<p><a href="Rational.html"><code>Rational</code></a> is extensively optimized. [Feature #12484]</p>
</li></ul>

<h3 id="label-Miscellaneous+changes">Miscellaneous changes<span><a href="#label-Miscellaneous+changes">&para;</a> <a href="#top">&uarr;</a></span></h3>
<ul><li>
<p>ChangeLog is removed from the repository. It is generated from commit messages in Subversion by `make dist`. Also note that now people should follow Git style commit message. The template is written at [Short (50 chars or less) summary of changes](<a href="https://git-scm.com/book/ch5-2.html">git-scm.com/book/ch5-2.html</a>).</p>
<dl class="rdoc-list label-list"><dt>Feature #12283
<dd></dd></dl>
</li></ul>

</main>



<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.1.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>