Опубликовал naruse 25-12-2016
Перевел: arbox
Мы рады объявить о выходе Ruby 2.4.0!
Ruby 2.4.0 является первой стабильной версией в серии Ruby 2.4. Эта версия дает много интересных новых возможностей, которые мы перечислим ниже.
Улучшения хеш-таблиц (благодаря Владимиру Макарову)
Внутренняя структура хеш-таблиц (st_table) была улучшена благодаря открытой адресации и внедрению порядковых массивов. Эти улучшения открыто обсуждались, особые благодарности Юре Соколову.
Binding#irb
: интерактивные сессии по примеру binding.pry
При поиске ошибок многие из нас используют p
, чтобы видеть значение переменных.
При помощи pry (binding.pry
) уже давно было
возможно запустить интерактивную сессию и вызывать произвольный код на Ruby.
Патч r56624
реализует binding.irb
, так что теперь можно добиться похожего поведения
при помощи irb.
Объединение Fixnum
и Bignum
в Integer
Хотя стандарт ISO/IEC 30170:2012
не уточняет детали реализации класса Integer
, Ruby имел два видимых класса:
Fixnum
и Bignum
. Ruby 2.4 объединяет эти классы в Integer
.
Все расширения на С, которые работают с классами Fixnum
или Bignum
нуждаются
в исправлениях.
Смотрите также эту заявку и слайды akr’а.
Поддержка изменения регистра знаков юникода для String
String/Symbol#upcase/downcase/swapcase/capitalize(!)
теперь поддерживают
смену регистра для всех знаков Unicode, а не только для знаков ASCII.
Улучшения производительности
Ruby 2.4 также реализует следующие улучшения производительности, включая расширения в спецификации языка:
Array#max
, Array#min
[x, y].max
и [x, y].min
теперь оптимизированы и не создают временный
массив в некоторых ситуациях.
Regexp#match?
Добавлен метод Regexp#match?
, который проводит сравнение с регулярным выражением,
не создает обратных ссылок и не меняет значение переменной $~
,
чтобы не создавать дополнительные объекты.
Прочие улучшения производительности
Поиск ошибок
Thread#report_on_exception
и Thread.report_on_exception
Ruby игнорирует исключения в потоках до тех пор, пока другие потоки не сливаются
с ними явно. Теперь можно задать report_on_exception = true
и видеть, когда поток
обрывается из-за необработанных исключений.
Нас интересует ваше мнение о том, какое поведение report_on_exception
должно быть стандартным, а также о реализации report-on-GC
, уведомляющем
о неприсоединенных потоках, собранных сборщиком мусора.
Детектор блокировок потоков показывает бэктрейс и зависимости
В Ruby реализован детектор блокировки ждущих потоков, но в его сообщениях не было достаточной информации для поиска ошибок. В Ruby 2.4 детектор блокировок показывает потоки вместе с бэктрейсами и зависимыми потоками.
Другие значимые изменения с момента выхода 2.3
- Поддержка OpenSSL 1.1.0 (поддержка прекращена для версий 0.9.7 и меньше)
- ext/tk удалена из stdlib Feature #8539
- XMLRPC удалена из stdlib Feature #12160
Подробности находятся в файле NEWS и логах добавлений.
Включая эти изменения реализовано 2523 изменения файлов, 289129 добавлений (+), 84670 удалений (-) с момента выхода Ruby 2.3.0!
Мы желаем всем счастливого Рождества и прекрастных каникул. Наслаждайтесь программированием с Ruby 2.4!
Скачать
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
SIZE: 12572424 bytes SHA1: 944d2588308391b20a89642472454d1dfe7b2360 SHA256: 440bbbdc49d08d3650f340dccb35986d9399177ad69a204def56e5d3954600cf SHA512: bef7bb53f63fb74073d071cc125fb67b273ed0779ef43c2d2969089b9ca21fff1bd012281c5b748f7a3c24dd26e71730d7248c05a01cb23ab2089eb4d02115fe
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.gz
SIZE: 14104044 bytes SHA1: d44a3c50a0e742341ed3033d5db79d865151a4f4 SHA256: 152fd0bd15a90b4a18213448f485d4b53e9f7662e1508190aa5b702446b29e3d SHA512: 21c9f596b42dd9cba7a53963a59fed0c2e0c1eb960a4ac7087ea3eaa991ce9252d32639e1edcb75b1d709bc07c4820a6dc336ab427d0643c6e6498e0eacdbc8b
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.xz
SIZE: 9906880 bytes SHA1: 038804bbd0e77508dd2510b729a9f3b325489b2e SHA256: 3a87fef45cba48b9322236be60c455c13fd4220184ce7287600361319bb63690 SHA512: 975a5388592adc038461e0acebb6c0efee242891b2ea8621476401458efe2bc0fdd317d3bf99beb745b0b3808410efdff33862da29c95c027f457943721e3ab6
-
https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.zip
SIZE: 15758757 bytes SHA1: 29e1bab11551011718c35a51827edcb55bd656fc SHA256: 5c2bbfa26fd6a15a2d70961874b0f3a386206fcc5f698e240dd8b0c9f0f18c5e SHA512: 31d932372ce490eeac0a70bc8dcf842909a90435422398d069c05cf01d994936064b8f4e60879e28a8655c1296eb8e180e348cb95e001ed6ca73cda0ff77de23