U:RDoc::TopLevel[ iI" NEWS:ETcRDoc::Parser::Simpleo:RDoc::Markup::Document: @parts[(S:RDoc::Markup::Heading: leveli: textI"NEWS for Ruby 2.4.0;To:RDoc::Markup::BlankLineo:RDoc::Markup::Paragraph;[I"JThis document is a list of user visible feature changes made between ;TI"#releases except for bug fixes.;T@ o; ;[ I"DNote that each entry is kept so brief that no reason behind or ;TI"Ireference information is supplied with. For a full list of changes ;TI"Hwith all sufficient information, see the ChangeLog file or Redmine ;TI"M(e.g. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER);T@ S; ; i; I"$Changes since the 2.3.0 release;T@ S; ; i; I"Language changes;T@ o:RDoc::Markup::List: @type: BULLET: @items[ o:RDoc::Markup::ListItem: @label0;[o; ;[I"BMultiple assignment in conditional expression is now allowed.;To;;: LABEL;[o;;[I"Feature #10617;T;[@ o;;0;[o; ;[I"IRefinements is enabled at method by Symbol#to_proc. [Feature #9451];T@ o;;0;[o; ;[I"FRefinements is enabled with Kernel#send and BasicObject#__send__.;To;;;;[o;;[I"Feature #11476;T;[@ o;;0;[o; ;[I"8Rescue modifier now applicable to method arguments.;To;;;;[o;;[I"Feature #12686;T;[@ o;;0;[o; ;[I"5Toplevel return is now allowed. [Feature #4840];T@ S; ; i; I"1Core classes updates (outstanding ones only);T@ o;;;;[o;;0;[o; ;[I" Array;T@ o;;;;[ o;;0;[o; ;[I"#Array#concat [Feature #12333] ;TI""Now takes multiple arguments.;T@ o;;0;[o; ;[ I"0Array#max and Array#min. [Feature #12172] ;TI"Thread#report_on_exception and Thread.report_on_exception;To;;;;[o;;[I"Feature #6647;T;[@ o;;0;[o; ;[I"TracePoint;T@ o;;;;[o;;0;[o; ;[I"*TracePoint#callee_id [Feature #12747];T@ o;;0;[o; ;[I" Warning;T@ o;;;;[o;;0;[o; ;[I"ENew module named Warning is introduced. By default it has only ;TI"Cone singleton method, named warn. This makes it possible for ;TI"A3rd-party libraries to control the way warnings are handled.;To;;;;[o;;[I"Feature #12299;T;[@ S; ; i; I"+Stdlib updates (outstanding ones only);T@ o;;;;[o;;0;[o; ;[I"CGI;T@ o;;;;[o;;0;[o; ;[I".Don't allow , as a separator [Bug #12791];T@ o;;0;[o; ;[I"CSV;T@ o;;;;[o;;0;[o; ;[I"3Add a liberal_parsing option. [Feature #11839];T@ o;;0;[o; ;[I" IPAddr;T@ o;;;;[o;;0;[o; ;[I"MIPAddr#== and IPAddr#<=> no longer raise an exception if coercion fails.;To;;;;[o;;[I"Bug #12799;T;[@ o;;0;[o; ;[I"IRB;T@ o;;;;[o;;0;[o; ;[I"DBinding#irb: Start a REPL session like `binding.pry` at r56624.;T@ o;;0;[o; ;[I" Logger;T@ o;;;;[o;;0;[o; ;[I"Add a new optional argument pathname to Net::FTP#status. ;TI"8Contributed by soleboxy. [GH-1478] [Feature #12965];T@ o;;0;[o; ;[I" OpenSSL;T@ o;;;;[o;;0;[o; ;[ I"KIncludes Ruby/OpenSSL 2.0. OpenSSL has been extracted as a Gem and is ;TI"Omaintained at a separate repository now: https://github.com/ruby/openssl. ;TI";It still remains as a 'default gem'. [Feature #9612] ;TI"?Refer to ext/openssl/History.md for the full release note.;T@ o;;0;[o; ;[I" optparse;T@ o;;;;[o;;0;[o; ;[I")Add an into option. [Feature #11191];T@ o;;0;[o; ;[I" pathname;T@ o;;;;[o;;0;[o; ;[I"1New method: Pathname#empty? [Feature #12596];T@ o;;0;[o; ;[I" Readline;T@ o;;;;[o;;0;[o; ;[I"IReadline.quoting_detection_proc and Readline.quoting_detection_proc=;To;;;;[o;;[I"Feature #12659;T;[@ o;;0;[o; ;[I" REXML;T@ o;;;;[o;;0;[o; ;[I"DREXML::Element#[]: If String or Symbol is specified, attribute ;TI"Bvalue is returned. Otherwise, Nth child is returned. This is ;TI" backward compatible change.;T@ o;;0;[o; ;[I"set;T@ o;;;;[o;;0;[o; ;[I"GNew methods: Set#compare_by_identity and Set#compare_by_identity?.;To;;;;[o;;[I"Feature #12210;T;[@ o;;0;[o; ;[I" WEBrick;T@ o;;;;[o;;0;[o; ;[I".Don't allow , as a separator [Bug #12791];T@ S; ; i; I"7Compatibility issues (excluding feature bug fixes);T@ o;;;;[ o;;0;[o; ;[ I"EArray#sum and Enumerable#sum are implemented. [Feature #12217] ;TI"RRuby itself has no compatibility problem because Ruby didn't have sum method ;TI"!for arrays before Ruby 2.4. ;TI"NHowever many third party gems, activesupport, facets, simple_stats, etc, ;TI"Jdefines sum method. These implementations are mostly compatible but ;TI"#there are subtle differences. ;TI"KRuby's sum method should be mostly compatible but it is impossible to ;TI".be perfectly compatible with all of them.;T@ o;;0;[o; ;[I"BFixnum and Bignum are unified into Integer [Feature #12005] ;TI"/Fixnum class and Bignum class is removed. ;TI"EInteger class is changed from abstract class to concrete class. ;TI"HFor example, 0 is an instance of Integer: 0.class returns Integer. ;TI":The constants Fixnum and Bignum is bound to Integer. ;TI"=So obj.kind_of?(Fixnum) works as obj.kind_of?(Integer). ;TI"LAt C-level, Fixnum object and Bignum object should be distinguished by ;TI"1FIXNUM_P(obj) and RB_TYPE_P(obj, T_BIGNUM). ;TI"MRUBY_INTEGER_UNIFICATION can be used to detect this feature at C-level. ;TI"J0.class == Integer can be used to detect this feature at Ruby-level. ;TI"DThe C-level constants, rb_cFixnum and rb_cBignum, are removed. ;TI"(They can cause compilation failure.;T@ o;;0;[o; ;[ I"NString/Symbol#upcase/downcase/swapcase/capitalize(!) now work for all of ;TI"3Unicode, not only for ASCII. [Feature #10085] ;TI"MNo change is needed if the data is in ASCII anyway or if the limitation ;TI"Tto ASCII was only tolerated while waiting for a more extensive implementation. ;TI"NA change (using the :ascii option) is needed in cases where Unicode data ;TI"Fis processed, but the operation has to be limited to ASCII only. ;TI"?A good example of this are internationalized domain names.;T@ o;;0;[o; ;[I"TRUE / FALSE / NIL ;TI"9These constants are now obsoleted. [Feature #12574] ;TI"*Use true / false / nil resp. instead.;T@ S; ; i; I">Stdlib compatibility issues (excluding feature bug fixes);T@ o;;;;[o;;0;[o; ;[I" DateTime;T@ o;;;;[o;;0;[o; ;[I";DateTime#to_time now preserves timezone. [Bug #12189];T@ o;;0;[o; ;[I" PSych;T@ o;;;;[o;;0;[o; ;[I"Update Psych 2.2.2;T@ o;;0;[o; ;[I" RDoc;T@ o;;;;[o;;0;[o; ;[I"Update RDoc 5.0.0;T@ o;;0;[o; ;[I" RubyGems;T@ o;;;;[o;;0;[o; ;[I"Update RubyGems 2.6.8;T@ o;;0;[o; ;[I"shellwords;T@ o;;;;[o;;0;[o; ;[I"GShellwords.shellwords (shellsplit) treats the backslash as escape ;TI"Fcharacter only when followed by one of the following characters: ;TI"$ ` " \ ;To;;;;[o;;[I"Bug #10055;T;[@ o;;0;[o; ;[I" Time;T@ o;;;;[o;;0;[o; ;[I"7Time#to_time now preserves timezone. [Bug #12271];T@ o;;0;[o; ;[I" thread;T@ o;;;;[o;;0;[o; ;[I"Kthe extension library is removed. Till 2.0 it was a pure ruby script ;TI"O"thread.rb", which has precedence over "thread.so", and has been provided ;TI"#in $LOADED_FEATURES since 2.1.;T@ o;;0;[o; ;[I"Tk;T@ o;;;;[o;;0;[o; ;[I"1Tk is removed from stdlib. [Feature #8539] ;TI"4https://github.com/ruby/tk is the new upstream.;T@ o;;0;[o; ;[I" XMLRPC;T@ o;;;;[o;;0;[o; ;[I"ZXMLRPC is removed from stdlib, and bundled as gem. [Feature #12160][ruby-core:74239] ;TI"8https://github.com/ruby/xmlrpc is the new upstream.;T@ o;;0;[o; ;[I" Zlib;T@ o;;;;[o;;0;[o; ;[I"/Zlib.gzip and Zlib.gunzip [Feature #13020];T@ S; ; i; I"C API updates;T@ o;;;;[o;;0;[o; ;[I">ruby_show_version() will no longer exits the process, if ;TI"JRUBY_SHOW_COPYRIGHT_TO_DIE is set to 0. This will be the default in ;TI"the future.;T@ o;;0;[o; ;[I"1rb_gc_adjust_memory_usage() [Feature #12690];T@ S; ; i; I"Supported platform changes;T@ o;;;;[o;;0;[o; ;[I"'FreeBSD < 4 is no longer supported;T@ S; ; i; I" Implementation improvements;T@ o;;;;[ o;;0;[o; ;[ I"DIn some condition, `[x, y].max` and `[x, y].min` are optimized ;TI"Iso that a temporal array is not created. The concrete condition is ;TI"Ian implementation detail: currently, the array literal must have no ;TI"Ksplat, must have at least one expression but literal, the length must ;TI"Mbe <= 0x100, and Array#max and min must not be redefined. It will work ;TI"Kin most casual and real-life use case where it is written with intent ;TI"to `Math.max(x, y)`.;T@ o;;0;[o; ;[I"XThread deadlock detection now shows their backtrace and dependency. [Feature #8214];T@ o;;0;[o; ;[I"Jst_table (st.c) internal data structure is improved. [Feature #12142];T@ o;;0;[o; ;[I"8Rational is extensively optimized. [Feature #12484];T@ S; ; i; I"Miscellaneous changes;T@ o;;;;[o;;0;[o; ;[ I"/ChangeLog is removed from the repository. ;TI"HIt is generated from commit messages in Subversion by `make dist`. ;TI"GAlso note that now people should follow Git style commit message. ;TI" The template is written at ;TI"X[Short (50 chars or less) summary of changes](https://git-scm.com/book/ch5-2.html).;To;;;;[o;;[I"Feature #12283;T;[: @file@:0@omit_headings_from_table_of_contents_below0