Выпущен релиз 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)