Skip to content

Latest commit

 

History

History
194 lines (115 loc) · 5.14 KB

NEWS

File metadata and controls

194 lines (115 loc) · 5.14 KB

# -*- 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. https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER)

Changes since the 2.6.0 release

Language changes

  • Pattern matching is introduced as an experimental feature. [Feature #14912]

  • Method reference operator, .: is introduced as an experimental feature. [Feature #12125] [Feature #13581]

  • Proc.new and proc with no block in a method called with a block is warned now.

  • 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 $; to non-nil value is warned now. Use of it in String#split is warned too.

  • Setting $, 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

Core classes updates (outstanding ones only)

Enumerable
New method
  • Added Enumerable#filter_map. [Feature #15323]

  • Added Enumerable#tally. [Feature #11076]

Enumerator
New method
  • Added Enumerator::Yielder#to_proc so that a Yielder object can be directly passed to another method as a block argument. [Feature #15618]

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: bugs.ruby-lang.org/issues/15626

Integer
Modified method
  • Integer#[] now supports range operation. [Feature #8842]

    0b01001101[2, 4]  #=> 0b0011
    0b01001100[2..5]  #=> 0b0011
    0b01001100[2...6] #=> 0b0011
        ^^^^
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]

Time
  • Added Time#ceil method. [Feature #15772]

  • Added Time#floor method. [Feature #15653]

Stdlib updates (outstanding ones only)

Bundler
CSV
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.

Net::IMAP
  • Add Server Name Indication (SNI) support. [Feature #15594]

RSS
RubyGems

Compatibility issues (excluding feature bug fixes)

Stdlib compatibility issues (excluding feature bug fixes)

profile.rb, Profiler__
  • Removed from standard library. No one maintains it from Ruby 2.0.0.

C API updates

Implementation improvements

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