Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

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

 

Новое в Ruby 2.3

Читать полностью »