summaryrefslogtreecommitdiff
path: root/NEWS
diff options
context:
space:
mode:
Diffstat (limited to 'NEWS')
-rw-r--r--NEWS502
1 files changed, 0 insertions, 502 deletions
diff --git a/NEWS b/NEWS
deleted file mode 100644
index 7bc0f35923..0000000000
--- a/NEWS
+++ /dev/null
@@ -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.