После года разработки опубликован новый релиз Ruby 2.7.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ.
Основные улучшения в Ruby 2.7:
- Экспериментальная поддержка сопоставлений с образцом (Pattern matching), позволяющих перебрать заданный объект и назначить значение, если имеется совпадение с образцом.
- В оболочке интерактивных вычислений irb (REPL, Read-Eval-Print-Loop) появилась возможность многострочного редактирования, реализованная при помощи readline-совместимой библиотеки reline, написанной на языке Ruby. Интегрирована поддержка rdoc, позволяющая просматривать в irb справочную информацию по заданным классам, модулям и методам. Обеспечена цветная подсветка строк с кодом, показываемых через Binding#irb и результатов инспектирования объектов базовых классов.
- Добавлен уплотняющий сборщик мусора (Compaction GC), который может выполнять дефрагментацию области памяти, решая проблемы снижения производительности и повышения потребления памяти из-за фрагментации памяти, возникающей в процессе работы некоторых многопоточных Ruby-приложений. Для упаковки объектов в куче предложен метод GC.compact, позволяющий снизить число используемых страниц памяти и оптимизировать кучу для операций CoW (copy-on-write).
- Проведена подготовка к разделению аргументов, определяемых на основе позиции в списке («def foo(a,b,c)») и ключевых слов («def foo(key: val)»). Автоматическое преобразование аргументов на основе ключевых слов и позиции объявлено устаревшим и не будет поддерживаться в ветке Ruby 3.0. В частности, объявлено устаревшим использование последнего аргумента как параметров ключевого слова, передача аргументов на основе ключевых слов как последнего параметра хеша и разделение последнего аргумента на позиционные и ключевые параметры.
- Возможность использования нумерованных имён переменных по умолчанию для параметров блока.
- Экспериментальная поддержка диапазонов без начального значения.
Добавлен метод Enumerable#tally, подсчитывающий сколько раз встречается каждый элемент. - Разрешён вызов приватного метода с литералом «self».
- Добавлен метод Enumerator::Lazy#eager для генерации обычного перечисления из «ленивого» (Enumerator::Lazy) перечисления.
- Продолжено развитие экспериментального JIT-компилятора, который позволяет ощутимо поднять производительность приложений на языке Ruby. Предложенный в Ruby JIT-компилятор вначале записывает на диск код на языке Си, после чего вызывает внешний Си-компилятор для генерации машинных инструкций (поддерживается вызов GCC, Clang и Microsoft VC++). В новой версии реализован метод для inline-развёртывания при необходимости, обеспечено выборочное применение режимов оптимизации при компиляции, значение по умолчанию «—jit-min-calls» увеличено с 5 до 10000, а «—jit-max-cache» с 1000 до 100.
- Повышена производительность CGI.escapeHTML, Monitor и MonitorMixin.
- В Module#name, true.to_s, false.to_s и nil.to_s обеспечен возврат строки, неизменной для указанного объекта.
- Сокращён размер бинарных файлов, генерируемых методом RubyVM::InstructionSequence#to_binary;
- Обновлены версии встроенных компонентов, включая Bundler 2.1.2, RubyGems 3.1.2, Racc 1.4.15, CSV 3.1.2, REXML 3.2.3, RSS 0.2.8, StringScanner 1.0.3;
- Из базовой поставки во внешние gem-пакеты вынесены библиотеки CMath (cmath gem), Scanf (scanf gem), Shell (shell gem), Synchronizer (sync gem), ThreadsWait (thwait gem), E2MM (e2mmap gem).
- На rubygems.org опубликованы поставляемые по умолчанию модули stdlib: benchmark, cgi, delegate, getoptlong, net-pop, net-smtp, open3, pstore, singleton. Не перенесены в rubygems.org модули monitor observer, timeout, tracer, uri, yaml, которые поставляются только в ruby-core.
- Для сборки Ruby теперь требуется Си-компилятр, поддерживающий стандарт C99.
Вывод:
В этой статье показали основные нововведения нового релиза языка программирования Ruby 2.7, надеюсь для вас это было полезно.
Источник: OpenNet.
Подписываетесь на соц-сети:
Также рекомендую:
Подписаться
0 комментариев