mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[DOC] Add doc/NEWS-2.6.0 [ci skip]
fix previous commit miss git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66559 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
848a53d2b5
commit
d16509f1f0
1 changed files with 664 additions and 0 deletions
664
doc/NEWS-2.6.0
Normal file
664
doc/NEWS-2.6.0
Normal file
|
@ -0,0 +1,664 @@
|
|||
# -*- rdoc -*-
|
||||
|
||||
= NEWS for Ruby 2.6.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.5.0 release
|
||||
|
||||
=== Language changes
|
||||
|
||||
* <code>$SAFE</code> now is a process global state and can be set to 0 again. [Feature #14250]
|
||||
|
||||
* Refinements take place at block passing. [Feature #14223]
|
||||
|
||||
* Refinements take place at Kernel#public_send. [Feature #15326]
|
||||
|
||||
* Refinements take place at Kernel#respond_to?. [Feature #15327]
|
||||
|
||||
* +else+ without +rescue+ now causes a syntax error. [EXPERIMENTAL] [Feature #14606]
|
||||
|
||||
* Constant names may start with a non-ASCII capital letter. [Feature #13770]
|
||||
|
||||
* Endless ranges are introduced. You can use a Range that has no end,
|
||||
like <code>(0..)</code> (or similarly <code>(0...)</code>). [Feature #12912]
|
||||
|
||||
The following shows typical use cases:
|
||||
|
||||
ary[1..] # identical to ary[1..-1]
|
||||
(1...).each {|index| block } # infinite loop from index 1
|
||||
ary.zip(1..) {|elem, index| block } # ary.each.with_index(1) { }
|
||||
|
||||
* Non-Symbol keys in a keyword arguments hash cause an exception.
|
||||
|
||||
* The "shadowing outer local variable" warning is removed. [Feature #12490]
|
||||
|
||||
You can now write the following without warning:
|
||||
|
||||
user = users.find {|user| cond(user) }
|
||||
|
||||
* Print +cause+ of the exception if the exception is not caught and printed
|
||||
its backtraces and error message. [Feature #8257]
|
||||
|
||||
* The flip-flop syntax is deprecated. [Feature #5400]
|
||||
|
||||
=== Core classes updates (outstanding ones only)
|
||||
|
||||
[Array]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Array#union and Array#difference instance methods. [Feature #14097]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* Array#to_h now accepts a block that maps elements to new key/value pairs. [Feature #15143]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Array#filter is a new alias for Array#select. [Feature #13784]
|
||||
* Array#filter! is a new alias for Array#select!. [Feature #13784]
|
||||
|
||||
[Binding]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Binding#source_location. [Feature #14230]
|
||||
|
||||
This method returns the source location of the binding, a 2-element
|
||||
array of <code>__FILE__</code> and <code>__LINE__</code>.
|
||||
Traditionally, the same information could be retrieved by
|
||||
<code>eval("[__FILE__, __LINE__]", binding)</code>, but we are
|
||||
planning to change this behavior so that Kernel#eval ignores
|
||||
binding's source location [Bug #4352]. So, users should use this
|
||||
newly-introduced method instead of Kernel#eval.
|
||||
|
||||
[Dir]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Dir#each_child and Dir#children instance methods. [Feature #13969]
|
||||
|
||||
[Enumerable]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Enumerable#chain returns an enumerator object that iterates over the
|
||||
elements of the receiver and then those of each argument
|
||||
in sequence. [Feature #15144]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* Enumerable#to_h now accepts a block that maps elements to new key/value pairs. [Feature #15143]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Enumerable#filter is a new alias for Enumerable#select. [Feature #13784]
|
||||
|
||||
[Enumerator::ArithmeticSequence]
|
||||
|
||||
* This is a new class to represent a generator of an arithmetic sequence,
|
||||
that is a number sequence defined by a common difference. It can be used
|
||||
for representing what is similar to Python's slice. You can get an
|
||||
instance of this class from Numeric#step and Range#step.
|
||||
|
||||
[Enumerator::Chain]
|
||||
|
||||
* This is a new class to represent a chain of enumerables that works as a
|
||||
single enumerator, generated by such methods as Enumerable#chain and
|
||||
Enumerator#+.
|
||||
|
||||
[Enumerator::Lazy]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Enumerator::Lazy#filter is a new alias for
|
||||
Enumerator::Lazy#select. [Feature #13784]
|
||||
|
||||
[Enumerator]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Enumerator#+ returns an enumerator object that iterates over the
|
||||
elements of the receiver and then those of the other operand. [Feature #15144]
|
||||
|
||||
[ENV]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* ENV.to_h now accepts a block that maps names and values to new keys and values. [Feature #15143]
|
||||
|
||||
[Exception]
|
||||
|
||||
[New options]
|
||||
|
||||
* Exception#full_message takes +:highlight+ and +:order+
|
||||
options. [Bug #14324]
|
||||
|
||||
[Hash]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* Hash#merge, Hash#merge!, and Hash#update now accept multiple
|
||||
arguments. [Feature #15111]
|
||||
|
||||
* Hash#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Hash#filter is a new alias for Hash#select. [Feature #13784]
|
||||
|
||||
* Hash#filter! is a new alias for Hash#select!. [Feature #13784]
|
||||
|
||||
[IO]
|
||||
|
||||
[New options]
|
||||
|
||||
* Added new mode character <code>'x'</code> to open files for exclusive
|
||||
access. [Feature #11258]
|
||||
|
||||
[Kernel]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Kernel#then is a new alias for Kernel#yield_self. [Feature #14594]
|
||||
|
||||
[New options]
|
||||
|
||||
* Kernel#Complex, Kernel#Float, Kernel#Integer, and
|
||||
Kernel#Rational take an +:exception+ option to specify the way of
|
||||
error handling. [Feature #12732]
|
||||
|
||||
* Kernel#system takes an +:exception+ option to raise an exception
|
||||
on failure. [Feature #14386]
|
||||
|
||||
[Incompatible changes]
|
||||
|
||||
* Kernel#system and Kernel#exec do not close non-standard file descriptors
|
||||
(the default of the +:close_others+ option is changed to +false+,
|
||||
but we still set the +FD_CLOEXEC+ flag on descriptors we
|
||||
create). [Misc #14907]
|
||||
|
||||
[KeyError]
|
||||
|
||||
[New options]
|
||||
|
||||
* KeyError.new accepts +:receiver+ and +:key+ options to set receiver and
|
||||
key in Ruby code. [Feature #14313]
|
||||
|
||||
[Method]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Method#<< and Method#>> for Proc composition. [Feature #6284]
|
||||
|
||||
[Module]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* Module#method_defined?, Module#private_method_defined?, and
|
||||
Module#protected_method_defined? now accept the second
|
||||
parameter as optional. If it is +true+ (the default value), it checks
|
||||
ancestor modules/classes, or checks only the class itself. [Feature #14944]
|
||||
|
||||
[NameError]
|
||||
|
||||
[New options]
|
||||
|
||||
* NameError.new accepts a +:receiver+ option to set receiver in Ruby
|
||||
code. [Feature #14313]
|
||||
|
||||
[NilClass]
|
||||
|
||||
[New methods]
|
||||
|
||||
* NilClass#=~ is added for compatibility. [Feature #15231]
|
||||
|
||||
[NoMethodError]
|
||||
|
||||
[New options]
|
||||
|
||||
* NoMethodError.new accepts a +:receiver+ option to set receiver in Ruby
|
||||
code. [Feature #14313]
|
||||
|
||||
[Numeric]
|
||||
|
||||
[Incompatible changes]
|
||||
|
||||
* Numeric#step now returns an instance of the Enumerator::ArithmeticSequence
|
||||
class rather than one of the Enumerator class.
|
||||
|
||||
[OpenStruct]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* OpenStruct#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143]
|
||||
|
||||
[Proc]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Proc#<< and Proc#>> for Proc composition. [Feature #6284]
|
||||
|
||||
[Incompatible changes]
|
||||
|
||||
* Proc#call doesn't change <code>$SAFE</code> any more. [Feature #14250]
|
||||
|
||||
[Random]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Random.bytes. [Feature #4938]
|
||||
|
||||
[Range]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Added Range#% instance method. [Feature #14697]
|
||||
|
||||
[Incompatible changes]
|
||||
|
||||
* Range#=== now uses the +#cover?+ instead of the +#include?+ method. [Feature #14575]
|
||||
* Range#cover? now accepts a Range object. [Feature #14473]
|
||||
* Range#step now returns an instance of the Enumerator::ArithmeticSequence
|
||||
class rather than one of the Enumerator class.
|
||||
|
||||
[Regexp/String]
|
||||
|
||||
* Update Unicode version from 10.0.0 to 11.0.0. [Feature #14802]
|
||||
|
||||
This includes a rewrite of the grapheme cluster (/\X/) algorithm
|
||||
and special-casing for Georgian MTAVRULI on String#downcase.
|
||||
|
||||
* Update Emoji version from 5.0 to 11.0.0 [Feature #14802]
|
||||
|
||||
[RubyVM::AbstractSyntaxTree]
|
||||
|
||||
[New methods]
|
||||
|
||||
* RubyVM::AbstractSyntaxTree.parse parses a given string and returns AST
|
||||
nodes. [experimental]
|
||||
|
||||
* RubyVM::AbstractSyntaxTree.parse_file parses a given file and returns AST
|
||||
nodes. [experimental]
|
||||
|
||||
* RubyVM::AbstractSyntaxTree.of returns AST nodes of the given proc or method.
|
||||
[experimental]
|
||||
|
||||
[RubyVM]
|
||||
|
||||
[New methods]
|
||||
|
||||
* RubyVM.resolve_feature_path identifies the file that will be loaded by
|
||||
"require(feature)". [experimental] [Feature #15230]
|
||||
|
||||
[String]
|
||||
|
||||
* String#crypt is now deprecated. [Feature #14915]
|
||||
|
||||
[New features]
|
||||
|
||||
* String#split yields each substring to the block if given. [Feature #4780]
|
||||
|
||||
[Struct]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* Struct#to_h now accepts a block that maps keys and values to new keys and values. [Feature #15143]
|
||||
|
||||
[Aliased method]
|
||||
|
||||
* Struct#filter is a new alias for Struct#select. [Feature #13784]
|
||||
|
||||
[Time]
|
||||
|
||||
[New features]
|
||||
|
||||
* Time.new and Time#getlocal accept a timezone object as well as
|
||||
a UTC offset string. Time#+, Time#-, and Time#succ also preserve
|
||||
the timezone. [Feature #14850]
|
||||
|
||||
[TracePoint]
|
||||
|
||||
[New features]
|
||||
|
||||
* "script_compiled" event is supported. [Feature #15287]
|
||||
|
||||
[New methods]
|
||||
|
||||
* TracePoint#parameters [Feature #14694]
|
||||
|
||||
* TracePoint#instruction_sequence [Feature #15287]
|
||||
|
||||
* TracePoint#eval_script [Feature #15287]
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* TracePoint#enable accepts new keywords "target:" and "target_line:".
|
||||
[Feature #15289]
|
||||
|
||||
=== Stdlib updates (outstanding ones only)
|
||||
|
||||
[BigDecimal]
|
||||
|
||||
Update to version 1.4.0. This version includes several compatibility
|
||||
issues, see Compatibility issues section below for details.
|
||||
|
||||
[Modified methods]
|
||||
|
||||
* BigDecimal() accepts the new keyword "exception:" similar to Float().
|
||||
|
||||
[Note for the differences among recent versions]
|
||||
|
||||
You should want to know the differences among recent versions of bigdecimal.
|
||||
Please select the suitable version of bigdecimal according to the following
|
||||
information.
|
||||
|
||||
* 1.3.5 has BigDecimal.new without "exception:" keyword. You can see the
|
||||
deprecation warning of BigDecimal.new when you specify "-w" option.
|
||||
BigDecimal(), BigDecimal.new, and Object#to_d methods are the same.
|
||||
|
||||
* 1.4.0 has BigDecimal.new with "exception:" keyword. You always see the
|
||||
deprecation warning of BigDecimal.new. Object#to_d method is different
|
||||
from BigDecimal() and BigDecimal.new.
|
||||
|
||||
* 2.0.0 will be released soon after releasing Ruby 2.6.0. This version
|
||||
will not have the BigDecimal.new method.
|
||||
|
||||
[Bundler]
|
||||
|
||||
* Add Bundler to Standard Library. [Feature #12733]
|
||||
|
||||
* Use 1.17.2, the latest stable version.
|
||||
|
||||
[Coverage]
|
||||
|
||||
A oneshot_lines mode is added. [Feature #15022]
|
||||
|
||||
This mode checks "whether each line was executed at least once or not",
|
||||
instead of "how many times each line was executed".
|
||||
A hook for each line is fired at most once, and after it is fired
|
||||
the hook flag is removed, i.e., it runs with zero overhead.
|
||||
|
||||
[New options]
|
||||
|
||||
* Add +:oneshot_lines+ keyword argument to Coverage.start.
|
||||
|
||||
* Add +:stop+ and +:clear+ keyword arguments to Coverage.result.
|
||||
If +clear+ is true, it clears the counters to zero.
|
||||
If +stop+ is true, it disables coverage measurement.
|
||||
|
||||
[New methods]
|
||||
|
||||
* Coverage.line_stub, which is a simple helper function that
|
||||
creates the "stub" of line coverage from a given source code.
|
||||
|
||||
[CSV]
|
||||
|
||||
* Upgrade to 3.0.2. This includes performance improvements especially
|
||||
for writing. Writing is about 2 times faster.
|
||||
See https://github.com/ruby/csv/blob/master/NEWS.md.
|
||||
|
||||
[ERB]
|
||||
|
||||
[New options]
|
||||
|
||||
* Add +:trim_mode+ and +:eoutvar+ keyword arguments to ERB.new.
|
||||
Now non-keyword arguments other than the first one are softly deprecated
|
||||
and will be removed when Ruby 2.5 becomes EOL. [Feature #14256]
|
||||
|
||||
* erb command's <tt>-S</tt> option is deprecated, and will be removed
|
||||
in the next version.
|
||||
|
||||
[FileUtils]
|
||||
|
||||
[New methods]
|
||||
|
||||
* FileUtils#cp_lr. [Feature #4189]
|
||||
|
||||
[Matrix]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Matrix#antisymmetric?, Matrix#skew_symmetric?
|
||||
|
||||
* Matrix#map!, Matrix#collect! [Feature #14151]
|
||||
|
||||
* Matrix#[]=
|
||||
|
||||
* Vector#map!, Vector#collect!
|
||||
|
||||
* Vector#[]=
|
||||
|
||||
[Net]
|
||||
|
||||
[New options]
|
||||
|
||||
* Add +:write_timeout+ keyword argument to Net::HTTP.new. [Feature #13396]
|
||||
|
||||
[New methods]
|
||||
|
||||
* Add Net::HTTP#write_timeout and Net::HTTP#write_timeout=. [Feature #13396]
|
||||
|
||||
[New constant]
|
||||
|
||||
* Add Net::HTTPClientException to deprecate Net::HTTPServerException,
|
||||
whose name is misleading. [Bug #14688]
|
||||
|
||||
[NKF]
|
||||
|
||||
* Upgrade to nkf v2.1.5
|
||||
|
||||
[Psych]
|
||||
|
||||
* Upgrade to Psych 3.1.0
|
||||
|
||||
[RDoc]
|
||||
|
||||
* Become about 2 times faster.
|
||||
|
||||
* Use SOURCE_DATE_EPOCH to generate files.
|
||||
|
||||
* Fix method line number that slipped off.
|
||||
|
||||
* Enable <code>--width</code>, <code>--exclude</code>,
|
||||
and <code>--line-numbers</code> that were ignored.
|
||||
|
||||
* Add support for blockquote by ">>>" in default markup notation.
|
||||
|
||||
* Add support for "Raises" lines in TomDoc notation.
|
||||
|
||||
* Fix syntax error output.
|
||||
|
||||
* Fix many parsing bugs.
|
||||
|
||||
[REXML]
|
||||
|
||||
* Upgrade to REXML 3.1.9.
|
||||
See https://github.com/ruby/rexml/blob/master/NEWS.md.
|
||||
|
||||
[Improved some XPath implementations]
|
||||
|
||||
* <code>concat()</code> function: Stringify all arguments before concatenating.
|
||||
|
||||
* <code>string()</code> function: Support context node.
|
||||
|
||||
* <code>string()</code> function: Support processing instruction node.
|
||||
|
||||
* Support <code>"*:#{ELEMENT_NAME}"</code> syntax in XPath 2.0.
|
||||
|
||||
[Fixed some XPath implementations]
|
||||
|
||||
* <code>"//#{ELEMENT_NAME}[#{POSITION}]"</code> case
|
||||
|
||||
* <code>string()</code> function: Fix <code>function(document)</code>
|
||||
returns nodes that are out of root elements.
|
||||
|
||||
* <code>"/ #{ELEMENT_NAME} "</code> case
|
||||
|
||||
* <code>"/ #{ELEMENT_NAME} [ #{PREDICATE} ]"</code> case
|
||||
|
||||
* <code>"/ #{AXIS}::#{ELEMENT_NAME}"</code> case
|
||||
|
||||
* <code>"#{N}-#{M}"</code> case: One or more white spaces were required
|
||||
before <code>"-"</code>
|
||||
|
||||
* <code>"/child::node()"</code> case
|
||||
|
||||
* <code>"#{FUNCTION}()/#{PATH}"</code> case
|
||||
|
||||
* <code>"@#{ATTRIBUTE}/parent::"</code> case
|
||||
|
||||
* <code>"name(#{NODE_SET})"</code> case
|
||||
|
||||
[RSS]
|
||||
|
||||
[New options]
|
||||
|
||||
* RSS::Parser.parse now accepts options as Hash. +:validate+ ,
|
||||
+:ignore_unknown_element+ , +:parser_class+ options are available.
|
||||
|
||||
[RubyGems]
|
||||
|
||||
* Upgrade to RubyGems 3.0.1
|
||||
|
||||
* https://blog.rubygems.org/2018/12/19/3.0.0-released.html
|
||||
|
||||
* https://blog.rubygems.org/2018/12/23/3.0.1-released.html
|
||||
|
||||
[Set]
|
||||
|
||||
[Aliased methods]
|
||||
|
||||
* Set#filter! is a new alias for Set#select!. [Feature #13784]
|
||||
|
||||
[URI]
|
||||
|
||||
[New constant]
|
||||
|
||||
* Add URI::File to handle the file URI scheme. [Feature #14035]
|
||||
|
||||
=== Compatibility issues (excluding feature bug fixes)
|
||||
|
||||
[Dir]
|
||||
|
||||
* Dir.glob with <code>'\0'</code>-separated pattern list will be deprecated,
|
||||
and is now warned. [Feature #14643]
|
||||
|
||||
[File]
|
||||
|
||||
* File.read, File.binread, File.write, File.binwrite, File.foreach, and
|
||||
File.readlines do not invoke external commands even if the path starts
|
||||
with the pipe character <code>'|'</code>. [Feature #14245]
|
||||
|
||||
[Object]
|
||||
|
||||
* Object#=~ is deprecated. [Feature #15231]
|
||||
|
||||
=== Stdlib compatibility issues (excluding feature bug fixes)
|
||||
|
||||
* These standard libraries have been promoted to default gems.
|
||||
|
||||
* e2mmap
|
||||
* forwardable
|
||||
* irb
|
||||
* logger
|
||||
* matrix
|
||||
* mutex_m
|
||||
* ostruct
|
||||
* prime
|
||||
* rexml
|
||||
* rss
|
||||
* shell
|
||||
* sync
|
||||
* thwait
|
||||
* tracer
|
||||
|
||||
[BigDecimal]
|
||||
|
||||
* The following methods are removed.
|
||||
|
||||
* BigDecimal.allocate
|
||||
* BigDecimal.ver
|
||||
|
||||
* Every BigDecimal object is frozen. [Feature #13984]
|
||||
|
||||
* BigDecimal() parses the given string similar to Float().
|
||||
|
||||
* String#to_d parses the receiver string similar to String#to_f.
|
||||
|
||||
* BigDecimal.new will be removed in version 2.0.
|
||||
|
||||
[Pathname]
|
||||
|
||||
* Pathname#read, Pathname#binread, Pathname#write, Pathname#binwrite,
|
||||
Pathname#each_line and Pathname#readlines do not invoke external
|
||||
commands even if the path starts with the pipe character <code>'|'</code>.
|
||||
This follows [Feature #14245].
|
||||
|
||||
=== C API updates
|
||||
|
||||
=== Implementation improvements
|
||||
|
||||
* Speedup Proc#call because we don't need to care about <code>$SAFE</code>
|
||||
any more. [Feature #14318]
|
||||
|
||||
With +lc_fizzbuzz+ benchmark which uses Proc#call many times we can
|
||||
measure x1.4 improvements. [Bug #10212]
|
||||
|
||||
* Speedup block.call where +block+ is passed block parameter. [Feature #14330]
|
||||
|
||||
Ruby 2.5 improves block passing performance. [Feature #14045]
|
||||
|
||||
Additionally, Ruby 2.6 improves the performance of passed block calling.
|
||||
|
||||
* Introduce an initial implementation of a JIT (Just-in-time) compiler. [Feature #14235] [experimental]
|
||||
|
||||
* <tt>--jit</tt> command line option is added to enable JIT. <tt>--jit-verbose=1</tt>
|
||||
is good for inspection. See <tt>ruby --help</tt> for others.
|
||||
* To generate machine code, this JIT compiler uses the C compiler used for building
|
||||
the interpreter. Currently GCC, Clang, and Microsoft Visual C++ are supported for it.
|
||||
* <tt>--disable-mjit-support</tt> option is added to configure. This is added for JIT debugging,
|
||||
but if you get an error on building a header file for JIT, you can use this option to skip
|
||||
building it as a workaround.
|
||||
* rb_waitpid reimplemented on Unix-like platforms to maintain
|
||||
compatibility with processes created for JIT [Bug #14867]
|
||||
|
||||
* VM generator script renewal; makes the generated VM more optimized. [GH-1779]
|
||||
|
||||
* Thread cache enabled for pthreads platforms (for Thread.new and
|
||||
Thread.start). [Feature #14757]
|
||||
|
||||
* timer thread is eliminated for platforms with POSIX timers. [Misc #14937]
|
||||
|
||||
* Transient Heap (theap) is supported. [Bug #14858] [Feature #14989]
|
||||
|
||||
theap is a managed heap for short-living memory objects. For example,
|
||||
making a small and short-living Hash object is x2 faster. With rdoc benchmark,
|
||||
we measured 6-7% performance improvement.
|
||||
|
||||
* Native implementations (arm32, arm64, ppc64le, win32, win64, x86, amd64) of
|
||||
coroutines to improve performance of Fiber significantly. [Feature #14739]
|
||||
|
||||
=== Miscellaneous changes
|
||||
|
||||
* On macOS, shared libraries no longer include a full version number of Ruby
|
||||
in their names. This eliminates the burden of each teeny upgrade on the
|
||||
platform that users need to rebuild every extension library.
|
||||
|
||||
[Before]
|
||||
* libruby.2.6.0.dylib
|
||||
* libruby.2.6.dylib -> libruby.2.6.0.dylib
|
||||
* libruby.dylib -> libruby.2.6.0.dylib
|
||||
|
||||
[After]
|
||||
* libruby.2.6.dylib
|
||||
* libruby.dylib -> libruby.2.6.dylib
|
||||
|
||||
* Extracted misc/*.el files to https://github.com/ruby/elisp
|
Loading…
Reference in a new issue