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

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

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

  • Реализована новая экспериментальная прагма frozen-string-literal, а также связанная с ней опций »--enable/--disable=frozen-string-literal», позволяющие заморозить состояние строковых литералов в исходных текстах. Также добавлен новый отладочный режим »--debug=frozen-string-literal» при котором будет показано где именно изменение объекта приводит к выводу ошибки «can’t modify frozen String»;
  • Добавлен новый оператор »&.» для упрощение обработки значений nil при обращении к объектам, реализованный по мотивам операторов безопасной навигации C#, Groovy и Swift. При использовании синтаксиса вызова методов obj&.foo, метод #foo будет вызван только если object не является nil. Оператор ведёт себя как выражение «try!» (obj.try! {}) из ActiveSupport, но обрабатывает только значения nil. Для массивов, хэшей и структур добавлены операторы Array#dig, Hash#dig и Struct#dig;
  • Для упрощения отладки в базовый состав добавлен gem «did_you_mean», предлагающий правки для типичных опечаток при выводе ошибок NameError и NoMethodError;
            "Yuki".starts_with?("Y")        # => NoMethodError: undefined method `starts_with?' for "Yuki":String        #    Did you mean?  start_with?  
  • Добавлены экспериментальные возможности для обработки предкомпилированного байткода в формате ISeq. Для сериализации кода реализован объект RubyVM: InstructionSequence#to_binary_format, а для десериализации и загрузки байткода — RubyVM: InstructionSequence.load_from_binary (binary);
  • В String.new добавлена поддержка указания параметра «encoding» для определения кодировки;
  • Проведена серия оптимизаций производительности. В том числе реализован новый метод хранения табличных структур, оптимизирована работа Proc#call, на уровне машинного кода проведён тюнинг размещения объектов и вызова методов, добавлена возможность использования ключевых слов «exception:» для организации неблокирующего ввода/вывода;
  • Прекращена поддержка платформ OS/2, BeOS и Borland-C. Уровень поддержки платформы Haiku доведён до стабильного.

© OpenNet