diff --git a/doc/NEWS-2.6.0 b/doc/NEWS-2.6.0 new file mode 100644 index 0000000000..07e8518841 --- /dev/null +++ b/doc/NEWS-2.6.0 @@ -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. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER) + +== Changes since the 2.5.0 release + +=== Language changes + +* $SAFE 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 (0..) (or similarly (0...)). [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 __FILE__ and __LINE__. + Traditionally, the same information could be retrieved by + eval("[__FILE__, __LINE__]", binding), 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 'x' 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 $SAFE 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 -S 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 --width, --exclude, + and --line-numbers 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] + + * concat() function: Stringify all arguments before concatenating. + + * string() function: Support context node. + + * string() function: Support processing instruction node. + + * Support "*:#{ELEMENT_NAME}" syntax in XPath 2.0. + + [Fixed some XPath implementations] + + * "//#{ELEMENT_NAME}[#{POSITION}]" case + + * string() function: Fix function(document) + returns nodes that are out of root elements. + + * "/ #{ELEMENT_NAME} " case + + * "/ #{ELEMENT_NAME} [ #{PREDICATE} ]" case + + * "/ #{AXIS}::#{ELEMENT_NAME}" case + + * "#{N}-#{M}" case: One or more white spaces were required + before "-" + + * "/child::node()" case + + * "#{FUNCTION}()/#{PATH}" case + + * "@#{ATTRIBUTE}/parent::" case + + * "name(#{NODE_SET})" 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 '\0'-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 '|'. [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 '|'. + This follows [Feature #14245]. + +=== C API updates + +=== Implementation improvements + +* Speedup Proc#call because we don't need to care about $SAFE + 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] + + * --jit command line option is added to enable JIT. --jit-verbose=1 + is good for inspection. See ruby --help 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. + * --disable-mjit-support 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