mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
bfabd91231
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
147 lines
4.3 KiB
Text
147 lines
4.3 KiB
Text
# -*- rdoc -*-
|
|
|
|
= NEWS for Ruby 2.4.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.3.0 release
|
|
|
|
=== Language changes
|
|
|
|
* Multiple assignment in conditional expression is now allowed.
|
|
[Feature #10617]
|
|
|
|
=== Core classes updates (outstanding ones only)
|
|
|
|
* Array
|
|
|
|
* Array#max and Array#min. [Feature #12172]
|
|
This may cause a tiny incompatibility: if you redefine
|
|
Enumerable#max and call max to an Array, your redefinition will be
|
|
now ignored. You should also redefine Array#max.
|
|
|
|
* Array#sum [Feature #12217]
|
|
This is different from Enumerable#sum in that Array#sum doesn't depend on
|
|
the definition of each method.
|
|
|
|
* Dir
|
|
|
|
* Dir.empty?. [Feature #10121]
|
|
|
|
* Enumerable
|
|
|
|
* Enumerable#sum [Feature #12217]
|
|
|
|
* File
|
|
|
|
* File.empty?. [Feature #9969]
|
|
|
|
* Float
|
|
|
|
* Float#ceil, Float#floor, and Float#truncate now take an optional
|
|
digits, as well as Float#round. [Feature #12245]
|
|
|
|
* Integer
|
|
|
|
* Integer#ceil, Integer#floor, and Integer#truncate now take an optional
|
|
digits, as well as Integer#round. [Feature #12245]
|
|
|
|
* Fixnum and Bignum are unified into Integer [Feature #12005]
|
|
|
|
* Regexp
|
|
|
|
* Regexp#match? [Feature #8110]
|
|
This returns bool and doesn't save backref.
|
|
|
|
* String
|
|
|
|
* String.new(capacity: size) [Feature #12024]
|
|
|
|
* Symbol
|
|
|
|
* Symbol#match now returns MatchData. [Bug #11991]
|
|
|
|
* MatchData
|
|
|
|
* MatchData#named_captures [Feature #11999]
|
|
* MatchData#values_at supports named captures [Feature #9179]
|
|
|
|
=== Stdlib updates (outstanding ones only)
|
|
|
|
* CSV
|
|
|
|
* Add a liberal_parsing option. [Feature #11839]
|
|
|
|
* Logger
|
|
|
|
* Allow specifying logger parameters in constructor such
|
|
as level, progname, datetime_format, formatter. [Feature #12224]
|
|
* Add shift_period_suffix option. [Feature #10772]
|
|
|
|
* optparse
|
|
|
|
* Add an into option. [Feature #11191]
|
|
|
|
=== Compatibility issues (excluding feature bug fixes)
|
|
|
|
* Array#sum and Enumerable#sum are implemented. [Feature #12217]
|
|
Ruby itself has no compatibility problem because Ruby didn'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's sum method should be mostly compatible but it is impossible to
|
|
be perfectly compatible with all of them.
|
|
|
|
* Fixnum and Bignum are unified into Integer [Feature #12005]
|
|
Fixnum class and Bignum class is removed.
|
|
Integer class is changed from abstract class to concrete class.
|
|
For example, 0 is an instance of Integer: 0.class returns Integer.
|
|
The constants Fixnum and Bignum is bound to Integer.
|
|
So obj.kind_of?(Fixnum) works as obj.kind_of?(Integer).
|
|
At C-level, rb_cFixnum and rb_cBignum is same as rb_cInteger.
|
|
So, class based dispatch, such as klass == rb_cFixnum and
|
|
klass == rb_cBignum, should be changed to FIXNUM_P(obj) and
|
|
RB_TYPE_P(obj, T_BIGNUM).
|
|
|
|
=== Stdlib compatibility issues (excluding feature bug fixes)
|
|
|
|
* Time
|
|
|
|
* Time#to_time now preserves timezone. [Bug #12271]
|
|
|
|
* DateTime
|
|
|
|
* DateTime#to_time now preserves timezone. [Bug #12189]
|
|
|
|
* thread
|
|
|
|
* 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.
|
|
|
|
=== C API updates
|
|
|
|
* 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.
|
|
|
|
=== Supported platform changes
|
|
|
|
* FreeBSD < 4 is no longer supported
|
|
|
|
=== Implementation improvements
|
|
|
|
* 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 <= 0x100, and Array#max 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)`.
|