Перейти к содержанию

Выпуск языка программирования Ruby 2.6.0

Материал из Викиновостей, свободного источника новостей

25 декабря 2018 года

После года разработки опубликован релиз Ruby 2.6.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.6 является шестым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков.

Основные улучшения:

  • Добавлена экспериментальная реализация JIT-компилятора, который позволяет ощутимо поднять производительность приложений на языке Ruby. В отличие от традиционных JIT, генерирующих на лету машинные инструкции, предложенный в Ruby JIT-компилятор вначале записывает (Архивная копия от 12 ноября 2020 на Wayback Machine) на диск код на языке Си, после чего вызывает внешний Си-компилятор для генерации машинных инструкций (поддерживается вызов GCC, Clang и Microsoft VC++). Для активации JIT необходимо указать при запуске ruby опцию "--jit" или установить данную опцию в переменной окружения RUBYOPT. По сравнению с Ruby 2.5 включение JIT в среднем в 1.7 раза увеличивает производительность приложений, интенсивно использующих CPU. При этом разработка пока экспериментальная и плохо адаптирована для нагрузок, связанных с интенсивной работой с памятью;
  • Добавлен экспериментальный модуль RubyVM::AbstractSyntaxTree, предоставляющий метод парсинга, обрабатывающий передаваемые строки как код на языке Ruby и возвращающий абстрактное синтаксическое дерево ( AST, Abstract Syntax Tree) для этого кода;
  • Для обращения к методу "Kernel#yield_self" теперь можно использовать псевдоним "#then". Для методов "Array#|" и "Array#-" предложены более читаемые псевдонимы "Array#union" и "Array#difference";
  • Имена констант теперь могут начинаться с заглавных букв не из набора ASCII (например, сейчас можно писать "class Σ♥²; end

");

  • Добавлена поддержка не заканчивающихся диапазонов, например,

"ary[1..]" или "(1..).each {...}";

  • Добавлен класс Enumerator::Chain и реализованные в нём методы "Enumerable#chain" и "Enumerator#+" для создания цепочек перечисляемых значений;
  • В модули Proc и Method добавлена поддержка операторов "", например, конструкция "(f
  • Добавлен метод "Binding#source_location", который возвращает местоположение файла с кодом и номер строки привязанного объекта;
  • В метод "Kernel#system" добавлена опция "exception:" для генерации исключения при сбое вместо возвращения "false";
  • В модуль Coverage добавлен режим "oneshot", который проверяет, запущенна ли каждая строка как минимум один раз;
  • В методе "Hash#merge" обеспечена возможность слияния более двух хэшей;
  • Добавлен метод "FileUtils#cp_lr", который работает по аналогии с "FileUtils#cp_r", но вместо копирования создаёт ссылку;
  • Ускорена работа метода "Proc#call", благодаря исключению временного сохранения содержимого $SAFE. При выполнении теста lc_fizzbuzz наблюдается увеличение производительности в 1.4 раза;
  • Ускорена работа block.call в случае передачи "block" как параметра блока. Судя по проведённым тестам данное изменение позволило в 2.6 раз увеличить скорость расчёта блоков;
  • Представлена поддержка временной кучи (Transient Heap, theap), предназначенной для объектов с коротким временем жизни, использующих специфичные классы (Array, Hash, Object, Struct). Например, благодаря theap создание мелких и недолго существующих хэшей теперь выполняется в два раза быстрее. Тест rdoc показал увеличение производительности на 6-7%;
  • Для увеличения производительности переключений контекста предложены нативные реализации сопрограмм для архитектур arm32, arm64, ppc64le, win32, win64, x86 и amd64. "Fiber.yield" и "Fiber#resume" на 64-разрядных системах Linux теперь выполняются почти в 5 раз быстрее. В целом интенсивно использующие Fiber программы показывают прирост производительности на уровне 5%;
  • Обновлена версия RubyGems 3.0.1, в которой прекращена поддержка опций "--ri" и "--rdoc", вместо которых следует использовать "--document" и "--no-document".
  • Bundler теперь устанавливается по умолчанию для управления зависимостями gem.

Источники

[править]


Creative Commons
Creative Commons
Эта статья содержит материалы из статьи «Выпуск языка программирования Ruby 2.6.0», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии[править]

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.