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

После года разработки состоялся релиз Ruby 2.5.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp.

Код проекта распространяется под лицензиями BSD («2-clause BSDL») и «Ruby», которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Ruby 2.5 является пятым значительным выпуском, подготовленным в рамках планового процесса разработки, подразумевающего отведение года на подготовку функциональных улучшений и формирование каждые 2-3 месяца корректирующих выпусков.

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

• В блоках do/end теперь допустимо напрямую использовать секции rescue, else и ensure;

• Определён метод yield_self для выполнение операции yield с блоком в его контексте. В отличие от tap, метод возвращает результат выполнения блока;

• Поддержка измерения покрытия (coverage) тестовым кодом веток и методов. Покрытие ветки показывает то, какие ветки были выполнены в процессе выполнения тестов, а какие нет. Покрытие метода показывает какие методы были вызваны, а какие нет;

• Добавлены новые методы Hash#slice и Hash#transform_keys;

• Конструктор Struct.new теперь может создавать классы, принимающие именованные аргументы (keyword arguments);

• Перечисляемые предикаты последовательностей (#any?, #all?, #none? и #one?) теперь могут принимать аргументы в виде шаблона;

• Прекращено использование констант верхнего уровня (top-level) с тем же именем, если поиск класса в указанной области видимости не увенчался успехом;

• Включена автоматическая загрузка библиотеки pp.rb без необходимости указания в коде ‘require «pp»‘;

• Изменён на обратный порядок вывод трассировки (backtrace) и сообщения об ошибке (вначале идут вызовы, начиная со старых и заканчивая свежими, а в конце выводится сообщение об ошибке);

• На 5-10% увеличена производительность за счёт удаления инструкций «trace» из байткода. При необходимости применения TracePoint теперь осуществляется динамическое изменение последовательностей инструкций (ISeqs). В итоге в обычных условиях, когда не используется TracePoint, устранены лишние накладные расходы, за счёт их существенного повышения на этапе включения трассировки;

• Примерно в три раза ускорена передача блоков через параметры блока (например def foo(&b); bar(&b); end);

• IO#write теперь может принимать несколько аргументов, компонуя выходные данные из нескольких буферов;

• Переписана реализация мьютексов. Размер rb_mutex_t уменьшен со 160 до 80 байт;

• ERB (Embedded RuBy) теперь генерирует код из шаблонов, который выполняется в два раза быстрее, по сравнению с Ruby 2.4;

• Увеличена производительность некоторых встроенных методов, включая Array#concat, Enumerable#sort_by, String#concat, String#index и Time#+ ;

• IO.copy_stream переведён на использование системного вызова copy_file_range, который позволяет ускорить выполнение операций копирования данных из одного файла в другой файл с выполнением операции только на стороне ядра, без предварительного чтения данных в память процесса в пространстве пользователя;

• SecureRandom теперь использует предлагаемый операционной системой генератор псевдослучайных чисел (/dev/urandom) вместо OpenSSL RNG;

• Библиотеки cmath, csv, date, dbm, etc, fcntl, fiddle, fileutils, gdbm, ipaddr, scanf, sdbm, stringio, strscan, webrick и zlib из стандартного набора библиотек переведены в категорию устанавливаемых по умолчанию gem-пакетов;

• Обновлены версии Onigmo 6.1.3, Psych 3.0.2, RubyGems 2.7.3 и RDoc 6.0.1;

• Добавлена поддержка спецификации Unicode 10.0.0;

• По умолчанию включена настройка Thread.report_on_exception, упрощающая отладку многопоточных программ.

Источник: opennet.ru




Комментарии:

Добавить комментарий