⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.93
Server IP:
65.108.141.171
Server:
Linux server.heloix.com 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
7.4.33
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
ri
/
2.7.0
/
system
/
View File Name :
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