Первый стабильный выпуск серии Ruby 2.5 поставляется с рядом новых функций и улучшений производительности, включая поддержку покрытия ветвей и возможность для перечисляемых предикатов принимать аргументы шаблона.
Огромная популярность Ruby как языка программирования частично объясняется тем, что он интересен в использовании и полезен благодаря сочетанию различных стилей программирования — функционального, динамического и объектно-ориентированного.
Новые функции этого первого выпуска линейки Ruby 2.5 начинаются с поддержки покрытия филиалов и покрытия методов в качестве новых целевых типов покрытия для библиотеки измерения покрытия. Покрытие ветвей указывает, какие ветви выполняются, а какие нет. Покрытие метода указывает, какие методы вызываются, а какие нет. Запустив набор тестов с этими новыми функциями, вы узнаете, какие ветви и методы выполняются, и более строго оцените общий охват набора тестов.
Еще одним улучшением языка является возможность передавать аргументы шаблона перечисляемым предикатам. У Ruby есть предикаты последовательности, такие как all? ни одного?, один? и любые?, все из которых берут блок и оценивают его, передавая ему каждый элемент последовательности.
Ruby 2.5 теперь поддерживает передачу аргумента шаблона. Это возвращает, в случае одного аргумента, выполняется ли запрос блока, когда каждый элемент передается в метод аргумента#===. Эта функция основана на том, как работает перечисляемый#grep. Если grep задано регулярное выражение в качестве аргумента, он возвращает массив, содержащий элементы исходного массива, соответствующие данному регулярному выражению.
Другие улучшения в Ruby 2.5 включают возможность использовать rescue/else/provide непосредственно с блоками do/end, избегая необходимости в дополнительных операторах при желании выйти из блока в случае ошибки. Yield_self был добавлен в качестве опции для выхода. Он возвращает получателю заданный блок и возвращает результат блока. Добавлены ключи Hash#slice и Hash#transform_keys, а Struct.new может создавать классы, которые принимают аргументы ключевых слов.
Производительность нового выпуска была улучшена на пять-десять процентов за счет удаления всех инструкций трассировки из общего байт-кода (последовательности команд). Разработчики говорят, что трассировка была добавлена для поддержки точки трассировки, но в большинстве случаев не используется, поэтому инструкции трассировки представляют собой накладные расходы. Там, где это необходимо, новая версия использует метод динамического инструментирования.
Другие улучшения производительности включают передачу блока по параметру блока, работающему примерно в три раза быстрее, чем Ruby 2.4, с использованием метода “ленивого распределения Proc”; и мьютекс был переписан, чтобы быть меньше и быстрее.
Новая версия доступна для скачивания.