diff options
author | kazu <kazu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-26 12:00:01 +0000 |
---|---|---|
committer | kazu <kazu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-26 12:00:01 +0000 |
commit | 948762808ea09298c3798f5b6ab0d4f8508fc257 (patch) | |
tree | df6593c6788d31064ea21d03492d3c012d6692e9 /doc | |
parent | af2670f1a445a62c4e14f74eebdd3a30816361ad (diff) | |
download | ruby-948762808ea09298c3798f5b6ab0d4f8508fc257.tar.gz |
Move from NEWS to doc/NEWS-2.4.0
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'doc')
-rw-r--r-- | doc/NEWS-2.4.0 | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/doc/NEWS-2.4.0 b/doc/NEWS-2.4.0 new file mode 100644 index 0000000000..1c0bc904e4 --- /dev/null +++ b/doc/NEWS-2.4.0 @@ -0,0 +1,397 @@ +# -*- 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] + +* Refinements is enabled at method by Symbol#to_proc. [Feature #9451] + +* Refinements is enabled with Kernel#send and BasicObject#__send__. + [Feature #11476] + +* Rescue modifier now applicable to method arguments. + [Feature #12686] + +* Toplevel return is now allowed. [Feature #4840] + +=== Core classes updates (outstanding ones only) + +* Array + + * Array#concat [Feature #12333] + Now takes multiple arguments. + + * 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#pack [Feature #12754] + Now takes optional argument `buffer:' to reuse already allocated buffer. + + * Array#sum [Feature #12217] + This is different from Enumerable#sum in that Array#sum doesn't depend on + the definition of each method. + +* Comparable + + * Comparable#clamp. [Feature #10594] + +* Dir + + * Dir.empty?. [Feature #10121] + +* Enumerable + + * Enumerable#chunk called without a block now return an Enumerator + [Feature #2172] + * Enumerable#sum [Feature #12217] + * Enumerable#uniq [Feature #11090] + +* Enumerator::Lazy + + * Enumerator::Lazy#chunk_while [GH-1186] + * Enumerator::Lazy#uniq [Feature #11090] + +* 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] + + * Float#round 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] + +* Hash + + * Hash#compact and Hash#compact! [Feature #11818] + * Hash#transform_values and Hash#transform_values! [Feature #12512] + +* Integer + + * Fixnum and Bignum are unified into Integer [Feature #12005] + + * Integer#ceil, Integer#floor, and Integer#truncate now take an optional + digits, as well as Integer#round. [Feature #12245] + + * Integer#digits for extracting columns of place-value notation [Feature #12447] + + * Integer#round 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] + +* IO + + * IO#gets, IO#readline, IO#each_line, IO#readlines, IO.foreach now takes + an optional keyword argument, chomp flag. [Feature #12553] + +* Kernel + + * Kernel#clone now takes an optional keyword argument, freeze flag. + [Feature #12300] + +* MatchData + + * MatchData#named_captures [Feature #11999] + * MatchData#values_at supports named captures [Feature #9179] + +* Module + + * Module#refine accepts a module as the argument now. [Feature #12534] + * Module.used_modules [Feature #7418] + +* Numeric + + * Numeric#finite?, Numeric#infinite? [Feature #12039] + +* Process + + * Support CLOCK_MONOTONIC_RAW_APPROX, CLOCK_UPTIME_RAW, and + CLOCK_UPTIME_RAW_APPROX which are introduced by macOS 10.12. + +* Rational + + * Rational#round 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] + +* Regexp + + * meta character \X matches Unicode 9.0 characters with some workarounds + for UTR #51 Unicode Emoji, Version 4.0 emoji zwj sequences. + + * Regexp#match? [Feature #8110] + This returns bool and doesn't save backref. + + * Update Onigmo 6.0.0. + +* Regexp/String: Updated Unicode version from 8.0.0 to 9.0.0 [Feature #12513] + +* RubyVM::Env + + * RubyVM::Env was removed. + +* String + + * String#casecmp? [Feature #12786] + + * String#concat, String#prepend [Feature #12333] + Now takes multiple arguments. + + * String#each_line, String#lines now takes an optional keyword argument, + chomp flag. [Feature #12553] + + * String#match? [Feature #12898] + + * String#unpack1 [Feature #12752] + + * String#upcase, String#downcase, String#capitalize, String#swapcase 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 String#downcase for details. [Feature #10085] + + * String.new(capacity: size) [Feature #12024] + +* StringIO + + * StringIO#gets, StringIO#readline, StringIO#each_line, StringIO#readlines now takes + an optional keyword argument, chomp flag. [Feature #12553] + +* Symbol + + * Symbol#casecmp? [Feature #12786] + + * Symbol#match now returns MatchData. [Bug #11991] + + * Symbol#match? [Feature #12898] + + * Symbol#upcase, Symbol#downcase, Symbol#capitalize, and Symbol#swapcase now + work for all of Unicode. See the documentation of String#downcase + for details. [Feature #10085] + +* Thread + + * Thread#report_on_exception and Thread.report_on_exception + [Feature #6647] + +* TracePoint + + * TracePoint#callee_id [Feature #12747] + +* Warning + + * New module named Warning 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. + [Feature #12299] + +=== Stdlib updates (outstanding ones only) + +* CGI + + * Don't allow , as a separator [Bug #12791] + +* CSV + + * Add a liberal_parsing option. [Feature #11839] + +* IPAddr + + * IPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails. + [Bug #12799] + +* IRB + + * Binding#irb: Start a REPL session like `binding.pry` at r56624. + +* Logger + + * Allow specifying logger parameters in constructor such + as level, progname, datetime_format, formatter. [Feature #12224] + * Add shift_period_suffix option. [Feature #10772] + +* Net::HTTP + + * New method: Net::HTTP.post [Feature #12375] + +* Net::FTP + + * Support TLS (RFC 4217). + * Support hash style options for Net::FTP.new. + * Add a new optional argument pathname to Net::FTP#status. + Contributed by soleboxy. [GH-1478] [Feature #12965] + +* OpenSSL + + * Includes Ruby/OpenSSL 2.0. OpenSSL has been extracted as a Gem and is + maintained at a separate repository now: https://github.com/ruby/openssl. + It still remains as a 'default gem'. [Feature #9612] + Refer to ext/openssl/History.md for the full release note. + +* optparse + + * Add an into option. [Feature #11191] + +* pathname + + * New method: Pathname#empty? [Feature #12596] + +* Readline + + * Readline.quoting_detection_proc and Readline.quoting_detection_proc= + [Feature #12659] + +* REXML + + * REXML::Element#[]: If String or Symbol is specified, attribute + value is returned. Otherwise, Nth child is returned. This is + backward compatible change. + +* set + + * New methods: Set#compare_by_identity and Set#compare_by_identity?. + [Feature #12210] + +* WEBrick + + * Don't allow , as a separator [Bug #12791] + +=== 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, 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 == Integer 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. + +* 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. + +* TRUE / FALSE / NIL + These constants are now obsoleted. [Feature #12574] + Use true / false / nil resp. instead. + +=== Stdlib compatibility issues (excluding feature bug fixes) + +* DateTime + + * DateTime#to_time now preserves timezone. [Bug #12189] + +* PSych + + * Update Psych 2.2.2 + +* RDoc + + * Update RDoc 5.0.0 + +* RubyGems + + * Update RubyGems 2.6.8 + +* shellwords + + * Shellwords.shellwords (shellsplit) treats the backslash as escape + character only when followed by one of the following characters: + $ ` " \ <newline> + [Bug #10055] + +* Time + + * Time#to_time now preserves timezone. [Bug #12271] + +* 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. + +* Tk + + * Tk is removed from stdlib. [Feature #8539] + https://github.com/ruby/tk is the new upstream. + +* XMLRPC + + * XMLRPC is removed from stdlib, and bundled as gem. [Feature #12160][ruby-core:74239] + https://github.com/ruby/xmlrpc is the new upstream. + +* Zlib + + * Zlib.gzip and Zlib.gunzip [Feature #13020] + +=== 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. + +* rb_gc_adjust_memory_usage() [Feature #12690] + +=== 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)`. + +* Thread deadlock detection now shows their backtrace and dependency. [Feature #8214] + +* st_table (st.c) internal data structure is improved. [Feature #12142] + +* Rational is extensively optimized. [Feature #12484] + +=== Miscellaneous changes + +* 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](https://git-scm.com/book/ch5-2.html). + [Feature #12283] |