Выпущен релиз Ruby 2.3.0
Мы рады сообщить о выходе очередной версии языка программирования - Ruby 2.3.
Релиз Ruby 2.3.0 - это первый стабильный релиз серии Ruby 2.3.
Введена pragma "Frozen String Literal"
В Ruby 2.1 "str".freeze был оптимизирован для уменьшения места под объекты строк. В Ruby 2.3 вводится новый "магический комментарий" (pragma) frozen-string-literal и параметр командной строки --enable/--disable=frozen-string-literal для "заморозки" всех строк в коде файла. Дополнительно для отладки вы можете использовать аргумент командной строки --debug=frozen-string-literal для обнаружения места изменений объектов-строк с выдачей ошибки "can't modify frozen String".
В первой строке файла идет указание "магических комментариев" - в первой строке или сразу после указания указания encoding, вы можете использовать следующие pragma's:
# frozen-string-literal: true # frozen-string-literal: false
По умолчанию "заморозка" строк отключена, но предполагается в будущем (Ruby 3), что все строковые объекты будут "заморожены":
Matz said "All String literals are immutable (frozen) on Ruby 3".
Вместо "str".freeze можно использовать синтаксис -"str" - начиная строку со знака минус.
Оператор "безопасной навигации" (так же названный lonely operator) - &.

Оператор &. позволяет облегчить проверку объектов на соответствие nil, и только для существующих объектов вызывать метод, используя инструкции вида obj&.foo. Подобный оператор присутствует в языках C#, Groovy и Swift.
Вместо
result =
if obj
obj.foo
else
nil
end
будет
result = obj&.foo
Введен механизм байткода Ruby
Экспериментально введен механизм компилированного кода Ruby (байткода). RubyVM::InstructionSequence#to_binary и .load_from_binary
Добавлен синтаксис HEREDOC
Для сохранения форматирования текста (отступов) внутри строки HEREDOC вы можете использовать синтаксис с использованием ~ :
result = <<~MY_STR This would contain specially formatted text. That might span many lines MY_STR
Увеличение производительности
Также добавлено множество улучшений для увеличения производительности
Сравнение Ruby 2.2.4 и Ruby 2.3.0 с использованием простейших тестов производительности. Увеличение производительности 20%-25%.
тест 1
2.3.0:
user system total real
29000000
0.620000 0.000000 0.620000 ( 0.620483)
118000000
1.190000 0.000000 1.190000 ( 1.192848)
267000000
1.830000 0.000000 1.830000 ( 1.828014)
2.2.4:
user system total real
29000000
0.810000 0.000000 0.810000 ( 0.811010)
118000000
1.640000 0.000000 1.640000 ( 1.641845)
267000000
2.480000 0.000000 2.480000 ( 2.476726)
тест 2
2.3.0:
user system total real
832040
0.140000 0.000000 0.140000 ( 0.140042)
1346269
0.180000 0.000000 0.180000 ( 0.178167)
2178309
0.290000 0.000000 0.290000 ( 0.288229)
3524578
0.460000 0.000000 0.460000 ( 0.464329)
5702887
0.760000 0.000000 0.760000 ( 0.756518)
2.2.4:
user system total real
832040
0.170000 0.000000 0.170000 ( 0.165969)
1346269
0.210000 0.000000 0.210000 ( 0.214349)
2178309
0.350000 0.000000 0.350000 ( 0.346734)
3524578
0.560000 0.000000 0.560000 ( 0.562673)
5702887
0.910000 0.000000 0.910000 ( 0.904228)