После года разработки опубликован (https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-rele... релиз Ruby 2.6.0 (http://www.ruby-lang.org), динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.6 является шестым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков. Основные (https://anamaria.martinezgomez.name/2018/12/21/ruby2_6.html) улучшения (https://github.com/ruby/ruby/blob/v2_6_0/NEWS):
- Добавлена экспериментальная реализация JIT-компилятора, который позволяет ощутимо поднять производительность приложений на языке Ruby. В отличие от традиционных JIT, генерирующих на лету машинные инструкции, преложенный в Ruby JIT-компилятор вначале записывает (https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#MJIT-orga... на диск код на языке Си, после чего вызывает внешний Си-компилятор для генерации машинных инструкций (поддерживается вызов GCC, Clang и Microsoft VC++). Для активации JIT необходимо указать при запуске ruby опцию "--jit" или установить данную опцию в переменной окружения RUBYOPT. По сравнению с Ruby 2.5 включение JIT в среднем в 1.7 раза увеличивает производительность приложений, интенсивно использующих CPU. При этом разработка пока экспериментальная и плохо адаптирована длянагрузок, связанных с интенсивной работой с памятью;
- Добавлен экспериментальный модуль RubyVM::AbstractSyntaxTree, предоставляющий метод парсинга, обрабатывающий передаваемые строки как код на языке Ruby и возвращающий абстрактное синтаксическое дерево (AST (https://ru.wikipedia.org/wiki/%D0%90%D0%... 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 << g).call(3)" идентична "f(g(3))";
- Добавлен метод "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 (https://github.com/bundler/bundler) теперь устанавливается по умолчанию для управления зависимостями gem.
URL: https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-rele.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=49854