https://fedoraproject.org/wiki/Changes/Ruby_2.7 == Summary == Ruby 2.7 is the latest stable version of Ruby. Many new features and improvements are included for the increasingly diverse and expanding demands for Ruby. With this major update from Ruby 2.6 in Fedora 31 to Ruby 2.7 in Fedora 32, Fedora becomes the superior Ruby development platform. == Owner == * Name: [[User:vondruch| Vít Ondruch]], [[User:pvalena| Pavel Valena]] * Email: vondruch@xxxxxxxxxx, pvalena@xxxxxxxxxx == Detailed Description == Ruby 2.7 is upstream's new major release of Ruby. Many new features and improvements are included. === Compaction GC === This release introduces Compaction GC which can defragment a fragmented memory space. Some multi-threaded Ruby programs may cause memory fragmentation, leading to high memory usage and degraded speed. The `GC.compact` method is introduced 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. === Pattern Matching [Experimental] === Pattern matching, a widely used feature in functional programming languages, is introduced as an experimental feature. It can traverse a given object and assign its value if it matches a pattern. === REPL improvement === `irb`, the bundled interactive environment (REPL; Read-Eval-Print-Loop), now supports multi-line editing. It is powered by `reline`, a `readline`-compatible pure Ruby implementation. It also provides rdoc integration. In `irb` you can display the reference for a given class, module, or method. Besides, source lines shown at `binding.irb` and inspect results for core-class objects are now colorized. === Separation of positional and keyword arguments === Automatic conversion of keyword arguments and positional arguments is deprecated, and conversion will be removed in Ruby 3. * 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 the hash as keywords, add a double splat operator to avoid the warning and ensure correct behavior in Ruby 3. * 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. * 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. * 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. * Non-symbols are allowed as keyword argument keys if the method accepts arbitrary keywords. * `**nil` 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. * 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. === Other Notable New Features === * Numbered parameter as the default block parameter is introduced as an experimental feature. * A beginless range is experimentally introduced. It might not be as useful as an endless range, but would be good for DSL purposes. * `Enumerable#tally` is added. It counts the occurrence of each element. * Calling a private method on `self` is now allowed. * `Enumerator::Lazy#eager` is added. It generates a non-lazy enumerator from a lazy enumerator. === Performance improvements === * JIT [Experimental] ** 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. ** The default value of `--jit-min-calls` is changed from 5 to 10,000. ** The default value of `--jit-max-cache` is changed from 1,000 to 100. * The performance of `CGI.escapeHTML` is improved. * The performance of Monitor and MonitorMixin is improved. === Other notable changes since 2.6 === * Some standard libraries are updated. * Big part of stdlib was to default gems. * `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. * Update Unicode version and Emoji version from 11.0.0 to 12.0.0. * Update Unicode version to 12.1.0, adding support for U+32FF SQUARE ERA NAME REIWA. * `Date.jisx0301`, `Date#jisx0301`, and `Date.parse` support the new Japanese era. * Require compilers to support C99. == Benefit to Fedora == With a latest release, Ruby language is supporting the newest language features, which enables even faster and easier development of Ruby applications. == Scope == * Proposal owners: ** Finish packaging of Ruby 2.7. Current changes available in PR https://src.fedoraproject.org/rpms/ruby/pull-request/48 ** Rebuilding of Ruby packages providing native extensions (i.e. packages which depends on libruby). * Other developers: N/A ** Rebuild of packages with binary extensions (i.e. packages which depends on libruby) will be handled automatically, but some packages might need fixes/updates to support Ruby 2.7 properly. * Release engineering: [https://pagure.io/releng/issue/9104 #9104] ** Separate Koji tag for package rebuild will be needed. * Policies and guidelines: N/A * Trademark approval: N/A (not needed for this Change) == Upgrade/compatibility impact == * User specific Ruby binary extensions need to be rebuild. == How To Test == * No special hardware is needed. * To test, install Ruby 2.7. The test builds are pusblished in PR or on Ruby-SIG ML * Try to locally rebuild your packages using Ruby 2.7. * Use the packages with your applications previously written in Ruby. * If something doesn't work as it should, let us know. == User Experience == The Ruby programs/scripts should behave as they were used to. == Dependencies == <pre> $ dnf repoquery --disablerepo=* --enablerepo=rawhide --enablerepo=rawhide-source --arch=src --whatrequires 'ruby-devel' | sort | uniq | wc -l 142 </pre> == Contingency Plan == * Contingency mechanism: We would like to get a special buildroot tag to be able to rebuild necessary the packages with Ruby 2.7. If anything goes wrong, the tag could be easily dropped and previous version of Ruby 2.6 and its dependencies stays intact. The tag would be merged into F32 after everything is rebuild. * Contingency deadline: Mass Rebuild * Blocks release? No * Blocks product? No == Documentation == * [http://www.ruby-doc.org/ Help and documentation for the Ruby programming language] * [https://github.com/ruby/ruby/blob/v2_7_0_preview3/NEWS Ruby 2.7.0.preview3 NEWS] == Release Notes == * The Ruby 2.7 bumps soname, therefore Ruby packages, which use binary extensions, should be rebuilt. Nevertheless, since upstream paid great attention to source compatibility, no changes to your code are needed. https://github.com/ruby/ruby/blob/master/NEWS -- Ben Cotton He / Him / His Fedora Program Manager Red Hat TZ=America/Indiana/Indianapolis _______________________________________________ devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx