diff options
Diffstat (limited to 'NEWS')
| -rw-r--r-- | NEWS | 502 |
1 files changed, 0 insertions, 502 deletions
@@ -1,502 +0,0 @@ -# -*- rdoc -*- - -= NEWS for Ruby 2.7.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.6.0 release - -=== Language changes - -* Pattern matching is introduced as an experimental feature. [Feature #14912] - -* Method reference operator, <code>.:</code> is introduced as an - experimental feature. [Feature #12125] [Feature #13581] - -* Automatic conversion of keyword arguments and positional arguments is - deprecated, and conversion will be removed in Ruby 3. [Feature #14183] - - * When a method call passes a Hash at the last argument, and when it - passes no keywords, and when the called method accepts keywords, a - warning is emitted. To continue treating as keywords, add a double - splat operator to avoid the warning and ensure correct behavior in - Ruby 3. - - def foo(key: 42); end; foo({key: 42}) # warned - def foo(**kw); end; foo({key: 42}) # warned - def foo(key: 42); end; foo(**{key: 42}) # OK - def foo(**kw); end; foo(**{key: 42}) # OK - - * When a method call passes keywords to a method that accepts keywords, - but it does not pass enough required positional arguments, the - keywords are treated as a final required positional argument, and a - warning is emitted. Pass the argument as a hash instead of keywords - to avoid the warning and ensure correct behavior in Ruby 3. - - def foo(h, **kw); end; foo(key: 42) # warned - def foo(h, key: 42); end; foo(key: 42) # warned - def foo(h, **kw); end; foo({key: 42}) # OK - def foo(h, key: 42); end; foo({key: 42}) # OK - - * When a method accepts specific keywords but not a keyword splat, and - a hash or keywords splat is passed to the method that includes both - Symbol and non-Symbol keys, the hash will continue to be split, and - a warning will be emitted. You will need to update the calling code - to pass separate hashes to ensure correct behavior in Ruby 3. - - def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # warned - def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # warned - def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK - def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK - - * If a method does not accept keywords, and is called with keywords, - the keywords are still treated as a positional hash, with no warning. - This behavior will continue to work in Ruby 3. - - def foo(opt={}); end; foo( key: 42 ) # OK - -* Non-symbols are allowed as a keyword argument keys if method accepts - arbitrary keywords. [Feature #14183] - - def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1} - -* <code>**nil</code> is allowed in method definitions to explicitly mark - that the method accepts no keywords. Calling such a method with keywords - will result in an ArgumentError. [Feature #14183] - - def foo(h, **nil); end; foo(key: 1) # ArgumentError - def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError - def foo(h, **nil); end; foo("str" => 1) # ArgumentError - def foo(h, **nil); end; foo({key: 1}) # OK - def foo(h, **nil); end; foo({"str" => 1}) # OK - -* Passing an empty keyword splat to a method that does not accept keywords - no longer passes an empty hash, unless the empty hash is necessary for - a required parameter, in which case a warning will be emitted. Remove - the double splat to continue passing a positional hash. [Feature #14183] - - h = {}; def foo(*a) a end; foo(**h) # [] - h = {}; def foo(a) a end; foo(**h) # {} and warning - h = {}; def foo(*a) a end; foo(h) # [{}] - h = {}; def foo(a) a end; foo(h) # {} - -* Proc.new and Kernel#proc with no block in a method called with a block is - warned now. - -* Kernel#lambda with no block in a method called with a block errs. - -* Non-Symbol keys in a keyword arguments hash were prohibited in 2.6.0, - but are now allowed again. [Bug #15658] - -* Numbered parameter as the default block parameter is introduced as an - experimental feature. [Feature #4475] - -* A beginless range is experimentally introduced. It might not be as useful - as an endless range, but would be good for DSL purpose. [Feature #14799] - - ary[..3] # identical to ary[0..3] - where(sales: ..100) - -* Setting <code>$;</code> to non-nil value is warned now. Use of it in - String#split is warned too. - -* Setting <code>$,</code> to non-nil value is warned now. Use of it in - Array#join is warned too. - -* Quoted here-document identifier must end within the same line. - - <<"EOS - " # This has been warned since 2.4 - EOS - - -* The flip-flop syntax deprecation is reverted. [Feature #5400] - -* Comment lines can be placed between fluent dot now. - - foo - # .bar - .baz # => foo.baz - -* Calling a private method with a literal <code>self</code> as the receiver - is now allowed. [Feature #11297] [Feature #16123] - -* Modifier rescue now operates the same for multiple assignment as single - assignment: - - a, b = raise rescue [1, 2] - # Previously parsed as: (a, b = raise) rescue [1, 2] - # Now parsed as: a, b = (raise rescue [1, 2]) - -=== Core classes updates (outstanding ones only) - -Array:: - - New method:: - - * Added Array#intersection. [Feature #16155] - -Complex:: - - New method:: - - * Added Complex#<=>. So 0 <=> 0i will not raise NoMethodError. [Bug #15857] - -Dir:: - - Modified method:: - - * Dir#glob and Dir#[] no longer allow NUL-separated glob pattern. - Use Array instead. [Feature #14643] - -Encoding:: - - * Added new encoding CESU-8 [Feature #15931] - -Enumerable:: - - New methods:: - - * Added Enumerable#filter_map. [Feature #15323] - - * Added Enumerable#tally. [Feature #11076] - -Enumerator:: - - New method:: - - * Added Enumerator::Lazy#eager that generates a non-lazy enumerator - from a lazy enumerator. [Feature #15901] - - * Added Enumerator::Yielder#to_proc so that a Yielder object - can be directly passed to another method as a block - argument. [Feature #15618] - -Fiber:: - - New method:: - - * Added Fiber#raise that behaves like Fiber#resume but raises an - exception on the resumed fiber. [Feature #10344] - -FrozenError:: - - New method:: - - * Added FrozenError#receiver to return the frozen object that - modification was attempted on. To set this object when raising - FrozenError in Ruby code, pass it as the second argument to - FrozenError.new. - -GC:: - - New method:: - - * Added GC.compact method for compacting the heap. - This function compacts live objects in the heap so that fewer pages may - be used, and the heap may be more CoW friendly. [Feature #15626] - - Details on the algorithm and caveats can be found here: - https://bugs.ruby-lang.org/issues/15626 - -IO:: - - New method:: - - * Added IO#set_encoding_by_bom to check the BOM and set the external - encoding. [Bug #15210] - -Integer:: - - Modified method:: - - * Integer#[] now supports range operation. [Feature #8842] - - 0b01001101[2, 4] #=> 0b0011 - 0b01001100[2..5] #=> 0b0011 - 0b01001100[2...6] #=> 0b0011 - ^^^^ - -NilClass / TrueClass / FalseClass:: - - Modified method:: - - * NilClass#to_s, TrueClass#to_s and FalseClass#to_s now always returns a - frozen String. The returned String is always the same for each of these - values. This change is experimental. [Feature #16150] - -Module:: - - New method:: - - * Added Module#const_source_location to retrieve the location where a - constant is defined. [Feature #10771] - - * Added Module#ruby2_keywords for marking a method as passing keyword - arguments through a regular argument splat, useful when delegating - all arguments to another method in a way that can be backwards - compatible with older Ruby versions. [Bug #16154] - - Modified method:: - - * Module#autoload? now takes an +inherit+ optional argument, like as - Module#const_defined?. [Feature #15777] - - * Module#name now always return a frozen String. The returned String is - always the same for a given Module. This change is - experimental. [Feature #16150] - -ObjectSpace::WeakMap:: - - Modified method:: - - * ObjectSpace::WeakMap#[]= now accepts special objects as either key or - values. [Feature #16035] - -Regexp / String:: - - * Update Unicode version and Emoji version from 11.0.0 to - 12.0.0. [Feature #15321] - - * Update Unicode version to 12.1.0, adding support for - U+32FF SQUARE ERA NAME REIWA. [Feature #15195] - -RubyVM:: - - Removed method:: - - * +RubyVM.resolve_feature_path+ moved to - <code>$LOAD_PATH.resolve_feature_path</code>. [Feature #15903] [Feature #15230] - -Symbol:: - - Modified method:: - - * Symbol#to_s now always returns a frozen String. The returned String - is always the same for a given Symbol. This change is - experimental. [Feature #16150] - -Time:: - - New methods:: - - * Added Time#ceil method. [Feature #15772] - - * Added Time#floor method. [Feature #15653] - - Modified method:: - - * Time#inspect is separated from Time#to_s and it shows its sub - second. [Feature #15958] - -UnboundMethod:: - - New methods:: - - * Added UnboundMethod#bind_call method. [Feature #15955] - - <code>umethod.bind_call(obj, ...)</code> is semantically equivalent - to <code>umethod.bind(obj).call(...)</code>. This idiom is used in - some libraries to call a method that is overridden. The added - method does the same without allocation of intermediate Method - object. - - class Foo - def add_1(x) - x + 1 - end - end - class Bar < Foo - def add_1(x) # override - x + 2 - end - end - - obj = Bar.new - p obj.add_1(1) #=> 3 - p Foo.instance_method(:add_1).bind(obj).call(1) #=> 2 - p Foo.instance_method(:add_1).bind_call(obj, 1) #=> 2 - - -$LOAD_PATH:: - - New method:: - - * Added <code>$LOAD_PATH.resolve_feature_path</code>. [Feature #15903] [Feature #15230] - -=== Stdlib updates (outstanding ones only) - -Bundler:: - - * Upgrade to Bundler 2.1.0.pre.1 - Bundled from https://github.com/bundler/bundler/commit/a53709556b95a914e874b22ed2116a46b0528852 - -CGI:: - - * CGI.escapeHTML becomes 2~5x faster when there's at least one escaped character. - -CSV:: - - * Upgrade to 3.0.9. - See https://github.com/ruby/csv/blob/master/NEWS.md. - -Date:: - - * Date.jisx0301, Date#jisx0301, and Date.parse support the new Japanese - era. [Feature #15742] - -Delegator:: - - * Object#DelegateClass accepts a block and module_evals it in the context - of the returned class, similar to Class.new and Struct.new. - -ERB:: - - * Prohibit marshaling ERB instance. - -IRB:: - - * Introduce syntax highlight inspired by pry.gem to Binding#irb source lines, - REPL input, and inspect output of some core-class objects. - - * Introduce multiline mode by Reline. - - * Show documents when completion. - - * Enable auto indent and save/load history by default. - -Net::FTP:: - - * Add features and options. [Feature #15964] - -Net::IMAP:: - - * Add Server Name Indication (SNI) support. [Feature #15594] - -open-uri:: - - * Warn open-uri's "open" method at Kernel. - Use URI.open instead. [Misc #15893] - - * The default charset of text/* media type is UTF-8 instead of - ISO-8859-1. [Bug #15933] - -Pathname:: - - * Delegates 3 arguments from Pathname.glob to Dir.glob to - accept base: keyword. - -Racc:: - - * Merge 1.4.15 from upstream repository and added cli of racc. - -Reline:: - - * New stdlib that is compatible with readline stdlib by pure Ruby and also - has a multiline mode. - -RSS:: - - * Upgrade to RSS 0.2.8. - See https://github.com/ruby/rss/blob/master/NEWS.md. - -RubyGems:: - - * Upgrade to RubyGems 3.1.0.pre1 - Bundled from https://github.com/rubygems/rubygems/commit/97b264f0fa248c864b6ee9a23d3ff1cdd217dddb - -=== Compatibility issues (excluding feature bug fixes) - -* Removed unmaintained libraries. - * CMath - * Scanf - * Shell - * Synchronizer - * ThreadsWait - -=== Stdlib compatibility issues (excluding feature bug fixes) - -pathname:: - - * Kernel#Pathname when called with a Pathname argument now returns - the argument instead of creating a new Pathname. This is more - similar to other Kernel methods, but can break code that modifies - the return value and expects the argument not to be modified. - -profile.rb, Profiler__:: - - * Removed from standard library. No one maintains it from Ruby 2.0.0. - -=== C API updates - -* Many <code>*_kw</code> functions have been added for setting whether - the final argument being passed should be treated as keywords. You - may need to switch to these functions to avoid keyword argument - separation warnings, and to ensure correct behavior in Ruby 3. - -* The <code>:</code> character in rb_scan_args format string is now - treated as keyword arguments. Passing a positional hash instead of - keyword arguments will emit a deprecation warning. - -* C API declarations with +ANYARGS+ are changed not to use +ANYARGS+ - https://github.com/ruby/ruby/pull/2404 - -=== Implementation improvements - -Fiber:: - - * Allow selecting different coroutine implementation by using - `--with-coroutine=`, e.g. - - ./confgure --with-coroutine=ucontext - ./confgure --with-coroutine=copy - - * Replace previous stack cache with fiber pool cache. The fiber pool - allocates many stacks in a single memory region. Stack allocation - becomes O(log N) and fiber creation is amortized O(1). Around 10x - performance improvement was measured in micro-benchmarks. - -File:: - * File.realpath now uses realpath(3) on many platforms, which can - significantly improve performance. - -Thread:: - - * VM stack memory allocation is now combined with native thread stack, - improving thread allocation performance and reducing allocation related - failures. ~10x performance improvement was measured in micro-benchmarks. - -JIT:: - - * JIT-ed code is recompiled to less-optimized code when an optimization assumption is invalidated. - - * Method inlining is performed when a method is considered as pure. - This optimization is still experimental and many methods are NOT considered as pure yet. - - * Default value of +--jit-max-cache+ is changed from 1,000 to 100 - - * Default value of +--jit-min-calls+ is changed from 5 to 10,000 - -=== Miscellaneous changes - -* Support for IA64 architecture has been removed. Hardware for testing was - difficult to find, native fiber code is difficult to implement, and it added - non-trivial complexity to the interpreter. [Feature #15894] - -* Require compilers to support C99 [Misc #15347] - - * Details of our dialect: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99 - -* Ruby's upstream repository is changed from Subversion to Git. - - * https://git.ruby-lang.org/ruby.git - - * RUBY_REVISION class is changed from Integer to String. - - * RUBY_DESCRIPTION includes Git revision instead of Subversion's one. |
