Представлен релиз 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 доведён до стабильного.


Источник: http://www.opennet.ru/opennews/art.shtml?num=43588