File: C:/Ruby27-x64/share/ri/2.7.0/system/page-NEWS.ri
U:RDoc::TopLevel[ i I" NEWS:ETcRDoc::Parser::Simpleo:RDoc::Markup::Document:@parts[>S:RDoc::Markup::Heading:
leveli: textI"NEWS for Ruby 2.7.0;To:RDoc::Markup::BlankLine o: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"NNote that each entry is kept so brief that no reason behind or reference ;TI"Hinformation is supplied with. For a full list of changes with all ;TI"?sufficient information, see the ChangeLog file or Redmine ;TI"N(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>).;T@
S; ;
i;I"$Changes since the 2.6.0 release;T@
S; ;
i;I"Language changes;T@
S; ;
i ;I"Pattern matching;T@
o:RDoc::Markup::List:
@type:BULLET:@items[o:RDoc::Markup::ListItem:@label0;[o;
;[I"PPattern matching is introduced as an experimental feature. [Feature #14912];T@
o:RDoc::Markup::Verbatim;['I"case [0, [1, 2, 3]]
;TI"in [a, [b, *c]]
;TI" p a #=> 0
;TI" p b #=> 1
;TI" p c #=> [2, 3]
;TI" end
;TI"
;TI"case {a: 0, b: 1}
;TI"in {a: 0, x: 1}
;TI" :unreachable
;TI"in {a: 0, b: var}
;TI" p var #=> 1
;TI" end
;TI"
;TI"
case -1
;TI"in 0 then :unreachable
;TI"in 1 then :unreachable
;TI"$end #=> NoMatchingPatternError
;TI"
;TI"json = <<END
;TI"{
;TI" "name": "Alice",
;TI" "age": 30,
;TI"1 "children": [{ "name": "Bob", "age": 2 }]
;TI"}
;TI" END
;TI"
;TI"dJSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: name, age: age}]}
;TI"
;TI"p name #=> "Bob"
;TI"p age #=> 2
;TI"
;TI"iJSON.parse(json, symbolize_names: true) in {name: "Alice", children: [{name: "Charlie", age: age}]}
;TI" #=> NoMatchingPatternError
;T:@format0o;;0;[o;
;[I"/See the following slides for more details:;To;;;;[o;;0;[o;
;[I"Ohttps://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7;To;;0;[o;
;[I"0Note that the slides are slightly obsolete.;T@
o;;0;[o;
;[I"AThe warning against pattern matching can be suppressed with ;TI"8{-W:no-experimental option}[#label-Warning+option].;T@
S; ;
i ;I"9The spec of keyword arguments is changed towards 3.0;T@
o;;;;[
o;;0;[o;
;[I"KAutomatic conversion of keyword arguments and positional arguments is ;TI"Ldeprecated, and conversion will be removed in Ruby 3. [Feature #14183];T@
o;;;;[ o;;0;[o;
;[
I"HWhen a method call passes a Hash at the last argument, and when it ;TI"Fpasses no keywords, and when the called method accepts keywords, ;TI"Ga warning is emitted. To continue treating the hash as keywords, ;TI"Aadd a double splat operator to avoid the warning and ensure ;TI" correct behavior in Ruby 3.;T@
o;;[ I"6def foo(key: 42); end; foo({key: 42}) # warned
;TI"6def foo(**kw); end; foo({key: 42}) # warned
;TI"2def foo(key: 42); end; foo(**{key: 42}) # OK
;TI"2def foo(**kw); end; foo(**{key: 42}) # OK
;T;0o;;0;[o;
;[
I"KWhen a method call passes keywords to a method that accepts keywords, ;TI"Dbut it does not pass enough required positional arguments, the ;TI"Ikeywords are treated as a final required positional argument, and a ;TI"Jwarning is emitted. Pass the argument as a hash instead of keywords ;TI"@to avoid the warning and ensure correct behavior in Ruby 3.;T@
o;;[ I"7def foo(h, **kw); end; foo(key: 42) # warned
;TI"7def foo(h, key: 42); end; foo(key: 42) # warned
;TI"3def foo(h, **kw); end; foo({key: 42}) # OK
;TI"3def foo(h, key: 42); end; foo({key: 42}) # OK
;T;0o;;0;[o;
;[
I"JWhen a method accepts specific keywords but not a keyword splat, and ;TI"Ia hash or keywords splat is passed to the method that includes both ;TI"ISymbol and non-Symbol keys, the hash will continue to be split, and ;TI"Ja warning will be emitted. You will need to update the calling code ;TI"Bto pass separate hashes to ensure correct behavior in Ruby 3.;T@
o;;[I"Gdef foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned
;TI"Gdef foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned
;TI"Cdef foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
;T;0o;;0;[o;
;[I"HIf a method does not accept keywords, and is called with keywords, ;TI"Kthe keywords are still treated as a positional hash, with no warning. ;TI"3This behavior will continue to work in Ruby 3.;T@
o;;[I"2def foo(opt={}); end; foo( key: 42 ) # OK
;T;0o;;0;[o;
;[I"LNon-symbols are allowed as keyword argument keys if the method accepts ;TI")arbitrary keywords. [Feature #14183];T@
o;;;;[o;;0;[o;
;[I"KNon-Symbol keys in a keyword arguments hash were prohibited in 2.6.0, ;TI"-but are now allowed again. [Bug #15658];T@
o;;[I">def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
;T;0o;;0;[o;
;[I"L<code>**nil</code> is allowed in method definitions to explicitly mark ;TI"Nthat the method accepts no keywords. Calling such a method with keywords ;TI"6will result in an ArgumentError. [Feature #14183];T@
o;;[
I"?def foo(h, **nil); end; foo(key: 1) # ArgumentError
;TI"?def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError
;TI"?def foo(h, **nil); end; foo("str" => 1) # ArgumentError
;TI"4def foo(h, **nil); end; foo({key: 1}) # OK
;TI"4def foo(h, **nil); end; foo({"str" => 1}) # OK
;T;0o;;0;[o;
;[ I"NPassing an empty keyword splat to a method that does not accept keywords ;TI"Lno longer passes an empty hash, unless the empty hash is necessary for ;TI"La required parameter, in which case a warning will be emitted. Remove ;TI"Nthe double splat to continue passing a positional hash. [Feature #14183];T@
o;;[ I".h = {}; def foo(*a) a end; foo(**h) # []
;TI":h = {}; def foo(a) a end; foo(**h) # {} and warning
;TI"0h = {}; def foo(*a) a end; foo(h) # [{}]
;TI".h = {}; def foo(a) a end; foo(h) # {}
;T;0o;;0;[o;
;[I"aAbove warnings can be suppressed also with {-W:no-deprecated option}[#label-Warning+option].;T@
S; ;
i ;I"Numbered parameters;T@
o;;;;[o;;0;[
o;
;[I"DNumbered parameters as default block parameters are introduced.;To;;:
LABEL;[o;;[I"Feature #4475;T;[o;;;;[o;;[I"81, 2, 10].map { _1.to_s(16) } #=> ["1", "2", "a";TI"/[1, 2], [3, 4]].map { _1 + _2 } #=> [3, 7;T;[@
o;
;[I"AYou can still define a local variable named +_1+ and so on, ;TI"=and that is honored when present, but renders a warning.;T@
o;;[I"c_1 = 0 #=> warning: `_1' is reserved for numbered parameter; consider another name
;TI"/[1].each { p _1 } # prints 0 instead of 1
;T;0S; ;
i ;I",proc/lambda without block is deprecated;T@
o;;;;[o;;0;[
o;
;[I"OProc.new and Kernel#proc with no block in a method called with a block is ;TI"warned now.;T@
o;;[ I"
def foo
;TI" proc
;TI" end
;TI"wfoo { puts "Hello" } #=> warning: Capturing the given block using Kernel#proc is deprecated; use `&block` instead
;T;0o;
;[I"ZThis warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].;T@
o;;0;[o;
;[I"UKernel#lambda with no block in a method called with a block raises an exception.;T@
o;;[ I"
def bar
;TI" lambda
;TI" end
;TI"Zbar { puts "Hello" } #=> tried to create Proc object without a block (ArgumentError)
;T;0S; ;
i ;I" Other miscellaneous changes;T@
o;;;;[o;;0;[o;
;[I"IA beginless range is experimentally introduced. It might be useful ;TI"Hin +case+, new call-sequence of the <code>Comparable#clamp</code>, ;TI"*constants and DSLs. [Feature #14799];T@
o;;[I"(ary[..3] # identical to ary[0..3]
;TI"
;TI"case RUBY_VERSION
;TI"#when ..."2.4" then puts "EOL"
;TI"# ...
;TI" end
;TI"
;TI"age.clamp(..100)
;TI"
;TI"where(sales: ..100)
;T;0o;;0;[o;
;[I"PSetting <code>$;</code> to a non-nil value is warned now. [Feature #14240] ;TI".Use of it in String#split is warned too. ;TI"ZThis warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].;T@
o;;0;[o;
;[I"PSetting <code>$,</code> to a non-nil value is warned now. [Feature #14240] ;TI",Use of it in Array#join is warned too. ;TI"ZThis warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].;T@
o;;0;[o;
;[I"DQuoted here-document identifiers must end within the same line.;T@
o;;[I"<<"EOS
;TI"E" # This had been warned since 2.4; Now it raises a SyntaxError
;TI" EOS
;T;0o;;0;[o;
;[I"BThe flip-flop syntax deprecation is reverted. [Feature #5400];T@
o;;0;[o;
;[I"8Comment lines can be placed between fluent dot now.;T@
o;;[I" foo
;TI" # .bar
;TI" .baz # => foo.baz
;T;0o;;0;[o;
;[I"DCalling a private method with a literal +self+ as the receiver ;TI"6is now allowed. [Feature #11297] [Feature #16123];T@
o;;0;[o;
;[I"MModifier rescue now operates the same for multiple assignment as single ;TI"assignment. [Bug #8279];T@
o;;[I" a, b = raise rescue [1, 2]
;TI":# Previously parsed as: (a, b = raise) rescue [1, 2]
;TI";# Now parsed as: a, b = (raise rescue [1, 2])
;T;0o;;0;[
o;
;[I"`+yield+ in singleton class syntax is warned and will be deprecated later. [Feature #15575].;T@
o;;[I"
def foo
;TI" class << Object.new
;TI"j yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575]
;TI" end
;TI" end
;TI"foo { p :ok }
;T;0o;
;[I"ZThis warning can be suppressed with {-W:no-deprecated option}[#label-Warning+option].;T@
o;;0;[
o;
;[I"NArgument forwarding by <code>(...)</code> is introduced. [Feature #16253];T@
o;;[I"def foo(...)
;TI" bar(...)
;TI" end
;T;0o;
;[ I"JAll arguments to +foo+ are forwarded to +bar+, including keyword and ;TI"block arguments. ;TI"NNote that the parentheses are mandatory. <code>bar ...</code> is parsed ;TI"as an endless range.;T@
o;;0;[o;
;[I"WAccess and setting of <code>$SAFE</code> is now always warned. <code>$SAFE</code> ;TI"Gwill become a normal global variable in Ruby 3.0. [Feature #16131];T@
o;;0;[o;
;[ I"Z<code>Object#{taint,untaint,trust,untrust}</code> and related functions in the C-API ;TI"Yno longer have an effect (all objects are always considered untainted), and are now ;TI"Wwarned in verbose mode. This warning will be disabled even in non-verbose mode in ;TI"\Ruby 3.0, and the methods and C functions will be removed in Ruby 3.2. [Feature #16131];T@
o;;0;[o;
;[I"YRefinements take place at Object#method and Module#instance_method. [Feature #15373];T@
S; ;
i;I"Command line options;T@
S; ;
i ;I"Warning option;T@
o;
;[I"SThe +-W+ option has been extended with a following +:+, to manage categorized ;TI"1warnings. [Feature #16345] [Feature #16420];T@
o;;;;[ o;;0;[o;
;[I"&To suppress deprecation warnings:;T@
o;;[ I"$ ruby -e '$; = ""'
;TI"'-e:1: warning: `$;' is deprecated
;TI"
;TI"*$ ruby -W:no-deprecated -e '$; = //'
;T;0o;;0;[o;
;[I"6It works with the +RUBYOPT+ environment variable:;T@
o;;[I"2$ RUBYOPT=-W:no-deprecated ruby -e '$; = //'
;T;0o;;0;[o;
;[I"/To suppress experimental feature warnings:;T@
o;;[ I"$ ruby -e '0 in a'
;TI"n-e:1: warning: Pattern matching is experimental, and the behavior may change in future versions of Ruby!
;TI"
;TI"+$ ruby -W:no-experimental -e '0 in a'
;T;0o;;0;[o;
;[I"ETo suppress both by using +RUBYOPT+, set space separated values:;T@
o;;[I"N$ RUBYOPT='-W:no-deprecated -W:no-experimental' ruby -e '($; = "") in a'
;T;0o;
;[I"iSee also Warning in {Core classes updates}[#label-Core+classes+updates+-28outstanding+ones+only-29].;T@
S; ;
i;I"1Core classes updates (outstanding ones only);T@
o;;: NOTE;[o;;[I"
Array;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"/Added Array#intersection. [Feature #16155];T@
o;;0;[o;
;[I"ZAdded Array#minmax, with a faster implementation than Enumerable#minmax. [Bug #15929];T@
o;;[I"Comparable;T;[o;;;;[o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"DComparable#clamp now accepts a Range argument. [Feature #14784];T@
o;;[I"-1.clamp(0..2) #=> 0
;TI" 1.clamp(0..2) #=> 1
;TI" 3.clamp(0..2) #=> 2
;TI"*# With beginless and endless ranges:
;TI"-1.clamp(0..) #=> 0
;TI" 3.clamp(..2) #=> 2
;T;0o;;[I"Complex;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[I"Added Complex#<=>. ;TI"HSo <code>0 <=> 0i</code> will not raise NoMethodError. [Bug #15857];T@
o;;[I"Dir;T;[o;;;;[o;;[I"Modified methods;T;[o;;;;[o;;0;[o;
;[I"EDir.glob and Dir.[] no longer allow NUL-separated glob pattern. ;TI")Use Array instead. [Feature #14643];T@
o;;[I"
Encoding;T;[o;;;;[o;;[I"New encoding;T;[o;;;;[o;;0;[o;
;[I"0Added new encoding CESU-8. [Feature #15931];T@
o;;[I"Enumerable;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"3Added Enumerable#filter_map. [Feature #15323];T@
o;;[I"F[1, 2, 3].filter_map {|x| x.odd? ? x.to_s : nil } #=> ["1", "3"]
;T;0o;;0;[o;
;[I".Added Enumerable#tally. [Feature #11076];T@
o;;[I"B["A", "B", "C", "B", "A"].tally #=> {"A"=>2, "B"=>2, "C"=>1}
;T;0o;;[I"Enumerator;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"HAdded Enumerator.produce to generate an Enumerator from any custom ;TI"+data transformation. [Feature #14781];T@
o;;[I"require "date"
;TI"Sdates = Enumerator.produce(Date.today, &:succ) #=> infinite sequence of dates
;TI"/dates.detect(&:tuesday?) #=> next Tuesday
;T;0o;;0;[o;
;[I"GAdded Enumerator::Lazy#eager that generates a non-lazy enumerator ;TI".from a lazy enumerator. [Feature #15901];T@
o;;[ I"a = %w(foo bar baz)
;TI"=e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.eager
;TI",p e.class #=> Enumerator
;TI"=p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]
;T;0o;;0;[o;
;[I"@Added Enumerator::Yielder#to_proc so that a Yielder object ;TI"9can be directly passed to another method as a block ;TI" argument. [Feature #15618];T@
o;;[I"
Fiber;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[I"DAdded Fiber#raise that behaves like Fiber#resume but raises an ;TI"6exception on the resumed fiber. [Feature #10344];T@
o;;[I" File;T;[o;;;;[o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"JFile.extname now returns a dot string for names ending with a dot on ;TI")non-Windows platforms. [Bug #15267];T@
o;;[I""File.extname("foo.") #=> "."
;T;0o;;[I"FrozenError;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[ I"EAdded FrozenError#receiver to return the frozen object on which ;TI"Bmodification was attempted. To set this object when raising ;TI"EFrozenError in Ruby code, FrozenError.new accepts a +:receiver+ ;TI"option. [Feature #15751];T@
o;;[I"GC;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[ o;
;[I"6Added GC.compact method for compacting the heap. ;TI"MThis function compacts live objects in the heap so that fewer pages may ;TI"Ube used, and the heap may be more CoW (copy-on-write) friendly. [Feature #15626];T@
o;
;[I"=Details on the algorithm and caveats can be found here: ;TI",https://bugs.ruby-lang.org/issues/15626;T@
o;;[I"IO;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[I"HAdded IO#set_encoding_by_bom to check the BOM and set the external ;TI"encoding. [Bug #15210];T@
o;;[I"Integer;T;[o;;;;[o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"?Integer#[] now supports range operations. [Feature #8842];T@
o;;[ I""0b01001101[2, 4] #=> 0b0011
;TI""0b01001100[2..5] #=> 0b0011
;TI""0b01001100[2...6] #=> 0b0011
;TI"# ^^^^
;T;0o;;[I"Method;T;[o;;;;[o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"<Method#inspect shows more information. [Feature #14145];T@
o;;[I"Module;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"IAdded Module#const_source_location to retrieve the location where a ;TI"+constant is defined. [Feature #10771];T@
o;;0;[o;
;[ I"IAdded Module#ruby2_keywords for marking a method as passing keyword ;TI"Harguments through a regular argument splat, useful when delegating ;TI"Dall arguments to another method in a way that can be backwards ;TI"7compatible with older Ruby versions. [Bug #16154];T@
o;;[I"Modified methods;T;[o;;;;[o;;0;[o;
;[I"EModule#autoload? now takes an +inherit+ optional argument, like ;TI"-Module#const_defined?. [Feature #15777];T@
o;;0;[o;
;[I"LModule#name now always returns a frozen String. The returned String is ;TI"8always the same for a given Module. This change is ;TI"#experimental. [Feature #16150];T@
o;;[I"&NilClass / TrueClass / FalseClass;T;[o;;;;[o;;[I"Modified methods;T;[o;;;;[o;;0;[o;
;[I"LNilClass#to_s, TrueClass#to_s, and FalseClass#to_s now always return a ;TI"Mfrozen String. The returned String is always the same for each of these ;TI":values. This change is experimental. [Feature #16150];T@
o;;[I"ObjectSpace::WeakMap;T;[o;;;;[o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"KObjectSpace::WeakMap#[]= now accepts special objects as either key or ;TI"values. [Feature #16035];T@
o;;[I" Proc;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[ I"GAdded Proc#ruby2_keywords for marking the proc as passing keyword ;TI"Harguments through a regular argument splat, useful when delegating ;TI"Lall arguments to another method or proc in a way that can be backwards ;TI";compatible with older Ruby versions. [Feature #16404];T@
o;;[I"
Range;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[I"NAdded Range#minmax, with a faster implementation than Enumerable#minmax. ;TI"IIt returns a maximum that now corresponds to Range#max. [Bug #15807];T@
o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I"TRange#=== now uses Range#cover? for String arguments, too (in Ruby 2.6, it was ;TI"Lchanged from Range#include? for all types except strings). [Bug #15449];T@
o;;[I"RubyVM;T;[o;;;;[o;;[I"Removed method;T;[o;;;;[o;;0;[o;
;[I",+RubyVM.resolve_feature_path+ moved to ;TI"U<code>$LOAD_PATH.resolve_feature_path</code>. [Feature #15903] [Feature #15230];T@
o;;[I"String;T;[o;;;;[o;;[I"Unicode;T;[o;;;;[o;;0;[o;
;[I"=Update Unicode version and Emoji version from 11.0.0 to ;TI"12.0.0. [Feature #15321];T@
o;;0;[o;
;[I":Update Unicode version to 12.1.0, adding support for ;TI"4U+32FF SQUARE ERA NAME REIWA. [Feature #15195];T@
o;;0;[o;
;[I";Update Unicode Emoji version to 12.1. [Feature #16272];T@
o;;[I"Symbol;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"MAdded Symbol#start_with? and Symbol#end_with? methods. [Feature #16348];T@
o;;[I" Time;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I".Added Time#ceil method. [Feature #15772];T@
o;;0;[o;
;[I"/Added Time#floor method. [Feature #15653];T@
o;;[I"Modified method;T;[o;;;;[o;;0;[o;
;[I";Time#inspect is separated from Time#to_s and it shows ;TI"-the time's sub second. [Feature #15958];T@
o;;[I"UnboundMethod;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[
o;
;[I"<Added UnboundMethod#bind_call method. [Feature #15955];T@
o;
;[
I"I<code>umethod.bind_call(obj, ...)</code> is semantically equivalent ;TI"Ito <code>umethod.bind(obj).call(...)</code>. This idiom is used in ;TI"Dsome libraries to call a method that is overridden. The added ;TI"Gmethod does the same without allocation of an intermediate Method ;TI"object.;T@
o;;[I"class Foo
;TI" def add_1(x)
;TI" x + 1
;TI" end
;TI" end
;TI"class Bar < Foo
;TI" def add_1(x) # override
;TI" x + 2
;TI" end
;TI" end
;TI"
;TI"obj = Bar.new
;TI"p obj.add_1(1) #=> 3
;TI";p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2
;TI";p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2
;T;0o;;[I"Warning;T;[o;;;;[o;;[I"New methods;T;[o;;;;[o;;0;[o;
;[I"EAdded Warning.[] and Warning.[]= to manage emitting/suppressing ;TI"Dsome categories of warnings. [Feature #16345] [Feature #16420];T@
o;;[I"$LOAD_PATH;T;[o;;;;[o;;[I"New method;T;[o;;;;[o;;0;[o;
;[I"[Added <code>$LOAD_PATH.resolve_feature_path</code>. [Feature #15903] [Feature #15230];T@
S; ;
i;I"+Stdlib updates (outstanding ones only);T@
o;;;;[o;;[I"Bundler;T;[o;;;;[o;;0;[o;
;[I"Upgrade to Bundler 2.1.2. ;TI"?See https://github.com/bundler/bundler/releases/tag/v2.1.2;T@
o;;[I"CGI;T;[o;;;;[o;;0;[o;
;[I"VCGI.escapeHTML becomes 2~5x faster when there is at least one escaped character. ;TI"/See https://github.com/ruby/ruby/pull/2226;T@
o;;[I"CSV;T;[o;;;;[o;;0;[o;
;[I"Upgrade to 3.1.2. ;TI"9See https://github.com/ruby/csv/blob/master/NEWS.md.;T@
o;;[I" Date;T;[o;;;;[o;;0;[o;
;[I"KDate.jisx0301, Date#jisx0301, and Date.parse support the new Japanese ;TI"era. [Feature #15742];T@
o;;[I"Delegator;T;[o;;;;[o;;0;[o;
;[I"MObject#DelegateClass accepts a block and module_evals it in the context ;TI"@of the returned class, similar to Class.new and Struct.new.;T@
o;;[I"ERB;T;[o;;;;[o;;0;[o;
;[I"&Prohibit marshaling ERB instance.;T@
o;;[I"IRB;T;[o;;;;[ o;;0;[o;
;[I"JIntroduce syntax highlighting inspired by the Pry gem to Binding#irb ;TI"Msource lines, REPL input, and inspect output of some core-class objects.;T@
o;;0;[o;
;[I"9Introduce multiline editing mode provided by Reline.;T@
o;;0;[o;
;[I"(Show documentation when completion.;T@
o;;0;[o;
;[I"9Enable auto indent and save/load history by default.;T@
o;;[I" JSON;T;[o;;;;[o;;0;[o;
;[I"Upgrade to 2.3.0.;T@
o;;[I"
Net::FTP;T;[o;;;;[o;;0;[o;
;[I"OAdd Net::FTP#features to check available features, and Net::FTP#option to ;TI"3enable/disable each of them. [Feature #15964];T@
o;;[I"Net::HTTP;T;[o;;;;[o;;0;[o;
;[I"SAdd +ipaddr+ optional parameter to Net::HTTP#start to replace the address for ;TI"+the TCP/IP connection. [Feature #5180];T@
o;;[I"Net::IMAP;T;[o;;;;[o;;0;[o;
;[I"@Add Server Name Indication (SNI) support. [Feature #15594];T@
o;;[I"
open-uri;T;[o;;;;[o;;0;[o;
;[I".Warn open-uri's "open" method at Kernel. ;TI")Use URI.open instead. [Misc #15893];T@
o;;0;[o;
;[I"DThe default charset of "text/*" media type is UTF-8 instead of ;TI"ISO-8859-1. [Bug #15933];T@
o;;[I"OptionParser;T;[o;;;;[o;;0;[
o;
;[I"DNow show "Did you mean?" for unknown options. [Feature #16256];T@
o;
;[I"
test.rb:;T@
o;;[I"require "optparse"
;TI" OptionParser.new do |opts|
;TI", opts.on("-f", "--foo", "foo") {|v| }
;TI", opts.on("-b", "--bar", "bar") {|v| }
;TI", opts.on("-c", "--baz", "baz") {|v| }
;TI"end.parse!
;T;0o;
;[I"
example:;T@
o;;[
I"$ ruby test.rb --baa
;TI"(Traceback (most recent call last):
;TI"Ptest.rb:7:in `<main>': invalid option: --baa (OptionParser::InvalidOption)
;TI"Did you mean? baz
;TI" bar
;T;0o;;[I"
Pathname;T;[o;;;;[o;;0;[o;
;[I"9Pathname.glob now delegates 3 arguments to Dir.glob ;TI"/to accept +base+ keyword. [Feature #14405];T@
o;;[I" Racc;T;[o;;;;[o;;0;[o;
;[I"AMerge 1.4.15 from upstream repository and added cli of racc.;T@
o;;[I"Reline;T;[o;;;;[o;;0;[o;
;[I"CNew stdlib that is compatible with the readline stdlib but is ;TI"Iimplemented in pure Ruby. It also provides a multiline editing mode.;T@
o;;[I"
REXML;T;[o;;;;[o;;0;[o;
;[I"Upgrade to 3.2.3. ;TI";See https://github.com/ruby/rexml/blob/master/NEWS.md.;T@
o;;[I"RSS;T;[o;;;;[o;;0;[o;
;[I"Upgrade to RSS 0.2.8. ;TI"9See https://github.com/ruby/rss/blob/master/NEWS.md.;T@
o;;[I"
RubyGems;T;[o;;;;[o;;0;[o;
;[I"Upgrade to RubyGems 3.1.2.;To;;;;[o;;0;[o;
;[I"=https://github.com/rubygems/rubygems/releases/tag/v3.1.0;To;;0;[o;
;[I"=https://github.com/rubygems/rubygems/releases/tag/v3.1.1;To;;0;[o;
;[I"=https://github.com/rubygems/rubygems/releases/tag/v3.1.2;T@
o;;[I"StringScanner;T;[o;;;;[o;;0;[o;
;[I"Upgrade to 1.0.3. ;TI"=See https://github.com/ruby/strscan/blob/master/NEWS.md.;T@
S; ;
i;I"7Compatibility issues (excluding feature bug fixes);T@
o;;;;[o;;0;[o;
;[I"9The following libraries are no longer bundled gems. ;TI"6Install corresponding gems to use these features.;To;;;;[o;;0;[o;
;[I"CMath (cmath gem);To;;0;[o;
;[I"Scanf (scanf gem);To;;0;[o;
;[I"Shell (shell gem);To;;0;[o;
;[I"Synchronizer (sync gem);To;;0;[o;
;[I"ThreadsWait (thwait gem);To;;0;[o;
;[I"E2MM (e2mmap gem);T@
o;;;;[o;;[I" Proc;T;[o;;;;[o;;0;[o;
;[I"7The Proc#to_s format was changed. [Feature #16101];T@
o;;[I"
Range;T;[o;;;;[o;;0;[o;
;[I"IRange#minmax used to iterate on the range to determine the maximum. ;TI"FIt now uses the same algorithm as Range#max. In rare cases (e.g. ;TI"Qranges of Floats or Strings), this may yield different results. [Bug #15807];T@
S; ;
i;I">Stdlib compatibility issues (excluding feature bug fixes);T@
o;;;;[o;;0;[o;
;[I"#Promote stdlib to default gems;To;;;;[o;;0;[o;
;[I">The following default gems were published on rubygems.org;To;;;;[o;;0;[o;
;[I"benchmark;To;;0;[o;
;[I"cgi;To;;0;[o;
;[I"
delegate;To;;0;[o;
;[I"getoptlong;To;;0;[o;
;[I"net-pop;To;;0;[o;
;[I"
net-smtp;To;;0;[o;
;[I"
open3;To;;0;[o;
;[I"pstore;To;;0;[o;
;[I"
readline;To;;0;[o;
;[I"readline-ext;To;;0;[o;
;[I"singleton;To;;0;[o;
;[I"AThe following default gems were only promoted at ruby-core, ;TI"+but not yet published on rubygems.org.;To;;;;[o;;0;[o;
;[I"monitor;To;;0;[o;
;[I"
observer;To;;0;[o;
;[I"timeout;To;;0;[o;
;[I"tracer;To;;0;[o;
;[I"uri;To;;0;[o;
;[I" yaml;To;;0;[o;
;[I"[The <tt>did_you_mean</tt> gem has been promoted up to a default gem from a bundled gem;T@
o;;;;[o;;[I"
pathname;T;[o;;;;[o;;0;[o;
;[ I"FKernel#Pathname when called with a Pathname argument now returns ;TI"Cthe argument instead of creating a new Pathname. This is more ;TI"Gsimilar to other Kernel methods, but can break code that modifies ;TI"Bthe return value and expects the argument not to be modified.;T@
o;;[I"profile.rb, Profiler__;T;[o;;;;[o;;0;[o;
;[I"IRemoved from standard library. It was unmaintained since Ruby 2.0.0.;T@
S; ;
i;I"C API updates;T@
o;;;;[o;;0;[o;
;[ I"JMany <code>*_kw</code> functions have been added for setting whether ;TI"Hthe final argument being passed should be treated as keywords. You ;TI"Emay need to switch to these functions to avoid keyword argument ;TI"Cseparation warnings, and to ensure correct behavior in Ruby 3.;T@
o;;0;[o;
;[I"GThe <code>:</code> character in rb_scan_args format string is now ;TI"Htreated as keyword arguments. Passing a positional hash instead of ;TI"7keyword arguments will emit a deprecation warning.;T@
o;;0;[o;
;[I"IC API declarations with +ANYARGS+ are changed not to use +ANYARGS+. ;TI"/See https://github.com/ruby/ruby/pull/2404;T@
S; ;
i;I" Implementation improvements;T@
o;;;;[
o;;[I"
Fiber;T;[o;;;;[o;;0;[o;
;[I"BAllow selecting different coroutine implementations by using ;TI"+--with-coroutine=+, e.g.;T@
o;;[I"-$ ./configure --with-coroutine=ucontext
;TI")$ ./configure --with-coroutine=copy
;T;0o;;0;[o;
;[
I"HReplace previous stack cache with fiber pool cache. The fiber pool ;TI"Gallocates many stacks in a single memory region. Stack allocation ;TI"Gbecomes O(log N) and fiber creation is amortized O(1). Around 10x ;TI"?performance improvement was measured in micro-benchmarks. ;TI"+https://github.com/ruby/ruby/pull/2224;T@
o;;[I" File;T;[o;;;;[o;;0;[o;
;[I"EFile.realpath now uses realpath(3) on many platforms, which can ;TI"8significantly improve performance. [Feature #15797];T@
o;;[I" Hash;T;[o;;;;[o;;0;[o;
;[I"BChange data structure of small Hash objects. [Feature #15602];T@
o;;[I"Monitor;T;[o;;;;[o;;0;[o;
;[I">Monitor class is written in C-extension. [Feature #16255];T@
o;;[I"Thread;T;[o;;;;[o;;0;[o;
;[I"JVM stack memory allocation is now combined with native thread stack, ;TI"Mimproving thread allocation performance and reducing allocation related ;TI"Sfailures. Around 10x performance improvement was measured in micro-benchmarks.;T@
o;;[I"JIT;T;[o;;;;[ o;;0;[o;
;[I"eJIT-ed code is recompiled to less-optimized code when an optimization assumption is invalidated.;T@
o;;0;[o;
;[I"GMethod inlining is performed when a method is considered as pure. ;TI"]This optimization is still experimental and many methods are NOT considered as pure yet.;T@
o;;0;[o;
;[I"IThe default value of +--jit-max-cache+ is changed from 1,000 to 100.;T@
o;;0;[o;
;[I"HThe default value of +--jit-min-calls+ is changed from 5 to 10,000.;T@
o;;[I"RubyVM;T;[o;;;;[o;;0;[o;
;[I"LPer-call-site method cache, which has been there since around 1.9, was ;TI"6improved: cache hit rate raised from 89% to 94%. ;TI"/See https://github.com/ruby/ruby/pull/2583;T@
o;;[I" RubyVM::InstructionSequence;T;[o;;;;[o;;0;[o;
;[I"MRubyVM::InstructionSequence#to_binary method generates compiled binary. ;TI"1The binary size is reduced. [Feature #16163];T@
S; ;
i;I"Miscellaneous changes;T@
o;;;;[ o;;0;[o;
;[I"NSupport for IA64 architecture has been removed. Hardware for testing was ;TI"Rdifficult to find, native fiber code is difficult to implement, and it added ;TI"@non-trivial complexity to the interpreter. [Feature #15894];T@
o;;0;[o;
;[I"4Require compilers to support C99. [Misc #15347];T@
o;;;;[o;;0;[o;
;[I"TDetails of our dialect: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99;T@
o;;0;[o;
;[I"BRuby's upstream repository is changed from Subversion to Git.;T@
o;;;;[o;;0;[o;
;[I"'https://git.ruby-lang.org/ruby.git;T@
o;;0;[o;
;[I";RUBY_REVISION class is changed from Integer to String.;T@
o;;0;[o;
;[I"HRUBY_DESCRIPTION includes Git revision instead of Subversion's one.;T@
o;;0;[o;
;[I"`Support built-in methods in Ruby with the <code>_\_builtin_</code> syntax. [Feature #16254];T@
o;
;[I"@Some methods are defined in *.rb (such as trace_point.rb). ;TI"PFor example, it is easy to define a method which accepts keyword arguments.;T:
@file@:0@omit_headings_from_table_of_contents_below0