diff --git a/ru/news/_posts/2021-11-09-ruby-3-1-0-preview1-released.md b/ru/news/_posts/2021-11-09-ruby-3-1-0-preview1-released.md new file mode 100644 index 0000000000..47c4d418f1 --- /dev/null +++ b/ru/news/_posts/2021-11-09-ruby-3-1-0-preview1-released.md @@ -0,0 +1,211 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.0 Preview 1" +author: "naruse" +translator: "suban05" +date: 2021-11-09 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.1.0-preview1" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. + +## YJIT: Новый экспериментальный in-process JIT компилятор + +Ruby 3.1 включает YJIT, новый in-process JIT компилятор, разработанный Shopify. + +С тех пор как [Ruby 2.6 представил MJIT в 2018 году](https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/), его производительность значительно улучшилась, и наконец [мы достигли Ruby3x3 в прошлом году](https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/). Но несмотря на впечатляющее ускорение в Optcarrot, JIT не принес пользы реальным бизнес-приложениям. + +Недавно Shopify внес множество улучшений в Ruby для ускорения их Rails-приложения. YJIT является важным вкладом и направлен на улучшение производительности Rails-приложений. + +Хотя MJIT является method-based JIT компилятором и использует внешний C компилятор, YJIT использует Basic Block Versioning и включает JIT компилятор внутри себя. С Lazy Basic Block Versioning (LBBV) он сначала компилирует начало метода и постепенно компилирует остальное, когда тип аргументов и переменных динамически определяется. См. [YJIT: a basic block versioning JIT compiler for CRuby](https://dl.acm.org/doi/10.1145/3486606.3486781) для подробного введения. + +С этой технологией, YJIT достигает как быстрого времени разогрева, так и улучшения производительности для большинства реального программного обеспечения, до 22% на railsbench, 39% на liquid-render. + +YJIT все еще является экспериментальной функцией и по умолчанию отключен. Если вы хотите использовать его, укажите командную опцию `--yjit` для включения YJIT. Он также ограничен для macOS и Linux на x86-64 платформах на данный момент. + +* +* +* + +## debug gem: Новый отладчик + +Новый отладчик [debug.gem](https://github.com/ruby/debug) включен. debug.gem это быстрая реализация отладчика и он предоставляет множество функций, таких как удаленная отладка, цветной REPL, интеграция с IDE (VSCode) и многое другое. Он заменяет стандартную библиотеку `lib/debug.rb`. + +## error_highlight: Точное указание места ошибки в backtrace + +Встроенный gem, error_highlight, был введен. Он включает точное указание места ошибки в backtrace: + +``` +$ ruby test.rb +test.rb:1:in `
': undefined method `time' for 1:Integer (NoMethodError) + +1.time {} + ^^^^^ +Did you mean? times +``` + + +Этот gem включен по умолчанию. Вы можете отключить его, используя командную опцию `--disable-error_highlight`. Подробности смотрите в [репозитории](https://github.com/ruby/error_highlight). + +## Улучшение Irb + +Будет описано в следующем preview. + +## Другие значимые новые функции + +### Язык + +* Значения в Hash литералах и именованных аргументах могут быть опущены. [Feature #14579] + * `{x:, y:}` является синтаксическим сахаром для `{x: x, y: y}`. + * `foo(x:, y:)` является синтаксическим сахаром для `foo(x: x, y: y)`. + +* Оператор Pin в pattern matching теперь принимает выражение. [Feature #17411] + +```ruby +Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a +#=> [[3, 5], [5, 7], [11, 13]] +``` + +### RBS + +RBS — это язык для описания структуры программ на Ruby. Подробнее см. в [репозитории](https://github.com/ruby/rbs). + +Обновления с версии Ruby 3.0.0: + +* Введена команда `rbs collection` для управления RBS-ами гемов. [документация](https://github.com/ruby/rbs/blob/master/docs/collection.md) +* Добавлено/обновлено множество сигнатур для встроенных и стандартных библиотек. +* Также включены многочисленные исправления ошибок и улучшения производительности. + +Подробнее см. в [CHANGELOG.md](https://github.com/ruby/rbs/blob/master/CHANGELOG.md). + +### TypeProf + +TypeProf — это статический анализатор типов для Ruby. Он генерирует прототип RBS из кода на Ruby без аннотаций типов. Подробнее см. в [документации](https://github.com/ruby/typeprof/blob/master/doc/doc.md). + +Обновления с версии Ruby 3.0.0: + +* Реализована [экспериментальная поддержка IDE](https://github.com/ruby/typeprof/blob/master/doc/ide.md). +* Многочисленные исправления ошибок и улучшения производительности. + +## Улучшения производительности + +* MJIT + * Для рабочих нагрузок, таких как Rails, значение по умолчанию для `--jit-max-cache` изменено с 100 до 10000. + JIT-компилятор больше не пропускает компиляцию методов длиной более 1000 инструкций. + * Для поддержки Zeitwerk в Rails, скомпилированный код больше не отменяется, когда включен TracePoint для событий класса. + +## Другие заметные изменения с версии 3.0 + +* Однострочное сопоставление с образцом, например, `ary => [x, y, z]`, больше не является экспериментальным. +* Порядок вычисления при множественном присваивании был немного изменен. [[Bug #4443]](https://bugs.ruby-lang.org/issues/4443) + * `foo[0], bar[0] = baz, qux` вычислялось в порядке `baz`, `qux`, `foo`, а затем `bar` в Ruby 3.0. В Ruby 3.1 оно вычисляется в порядке `foo`, `bar`, `baz`, а затем `qux`. +* Выделение переменной ширины: Строки (экспериментально) [[Bug #18239]](https://bugs.ruby-lang.org/issues/18239) + +### Обновления стандартных библиотек + +* Некоторые стандартные библиотеки обновлены. + * RubyGems + * Bundler + * RDoc 6.4.0 + * ReLine + * JSON 2.6.0 + * Psych 4.0.2 + * FileUtils 1.6.0 + * Fiddle + * StringIO 3.0.1 + * IO::Console 0.5.9 + * IO::Wait 0.2.0 + * CSV + * Etc 1.3.0 + * Date 3.2.0 + * Zlib 2.1.1 + * StringScanner + * IpAddr + * Logger 1.4.4 + * OStruct 0.5.0 + * Irb + * Racc 1.6.0 + * Delegate 0.2.0 + * Benchmark 0.2.0 + * CGI 0.3.0 + * Readline(C-ext) 0.1.3 + * Timeout 0.2.0 + * YAML 0.2.0 + * URI 0.11.0 + * OpenSSL + * DidYouMean + * Weakref 0.1.1 + * Tempfile 0.1.2 + * TmpDir 0.1.2 + * English 0.7.1 + * Net::Protocol 0.1.2 + * Net::Http 0.2.0 + * BigDecimal + * OptionParser 0.2.0 + * Set + * Find 0.1.1 + * Rinda 0.1.1 + * Erb + * NKF 0.1.1 + * Base64 0.1.1 + * OpenUri 0.2.0 + * SecureRandom 0.1.1 + * Resolv 0.2.1 + * Resolv::Replace 0.1.0 + * Time 0.2.0 + * PP 0.2.1 + * Prettyprint 0.1.1 + * Drb 2.1.0 + * Pathname 0.2.0 + * Digest 3.1.0.pre2 + * Un 0.2.0 +* Обновлены следующие встроенные гемы. + * minitest 5.14.4 + * power_assert 2.0.1 + * rake 13.0.6 + * test-unit 3.5.0 + * rbs 1.6.2 + * typeprof 0.20.0 +* Следующие стандартные гемы теперь являются встроенными. + * net-ftp + * net-imap + * net-pop + * net-smtp + * matrix + * prime + +См. [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [журналы коммитов](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}) +для получения дополнительной информации. + +С этими изменениями, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} вставок(+), {{ release.stats.deletions }} удалений(-)](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}#file_bucket) +с версии Ruby 3.0.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был впервые разработан Мацумото (Юкихиро Мацумото) в 1993 году и теперь развивается как проект с открытым исходным кодом. Он работает на множестве платформ и используется по всему миру, особенно для веб-разработки. diff --git a/ru/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md b/ru/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md new file mode 100644 index 0000000000..f8f089e657 --- /dev/null +++ b/ru/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md @@ -0,0 +1,35 @@ +--- +layout: news_post +title: "CVE-2021-41817: Уязвимость отказа в обслуживании при помощи регулярных выражений в методах разбора даты" +author: "mame" +translator: "suban05" +date: 2021-11-15 08:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии гема date 3.2.1, 3.1.2, 3.0.2 и 2.0.1, которые включают исправление безопасности для уязвимости отказа в обслуживании при помощи регулярных выражений (ReDoS) в методах разбора даты. Злоумышленник может использовать эту уязвимость для проведения эффективной атаки отказа в обслуживании. Эта уязвимость получила идентификатор CVE [CVE-2021-41817](https://www.cve.org/CVERecord?id=CVE-2021-41817). + +## Подробности + +Методы разбора даты, включая `Date.parse`, используют регулярные выражения (Regexps) внутренне, некоторые из которых уязвимы для отказа в обслуживании при помощи регулярных выражений. Приложения и библиотеки, которые применяют такие методы к ненадежным входным данным, могут быть затронуты. + +Исправление ограничивает длину входных данных до 128 байт по умолчанию вместо изменения регулярных выражений. Это связано с тем, что гем Date использует много регулярных выражений, и возможно, что существуют ещё не обнаруженные уязвимые регулярные выражения. Для совместимости разрешено убрать это ограничение, явно передавая ключевое слово `limit` как `nil`, например, `Date.parse(str, limit: nil)`, но имейте в виду, что это может занять много времени для разбора. + +Пожалуйста, обновите гем date до версии 3.2.1, 3.1.2, 3.0.2, 2.0.1 или более поздней. Вы можете использовать `gem update date` для его обновления. Если вы используете bundler, добавьте `gem "date", ">= 3.2.1"` в ваш `Gemfile`. Альтернативно, вы можете обновить Ruby до версии 3.0.3, 2.7.5, 2.6.9 или более поздней. + +## Затронутые версии + +* гем date 2.0.0 или ранее (которые поставляются с Ruby 2.6 серии до Ruby 2.6.9) +* гем date 3.0.1 или ранее (которые поставляются с Ruby 2.7 серии до Ruby 2.7.5) +* гем date 3.1.1 или ранее (которые поставляются с Ruby 3.0 серии до Ruby 3.0.3) +* гем date 3.2.0 или ранее + +## Благодарности + +Спасибо [svalkanov](https://github.com/SValkanov/) за обнаружение этой проблемы. + +## История + +* Изначально опубликовано 2021-11-15 08:00:00 (UTC) +* Добавлено упоминание о новых версиях Ruby 2021-11-24 13:20:00 (UTC) diff --git a/ru/news/_posts/2021-11-24-buffer-overrun-in-cgi-escape_html-cve-2021-41816.md b/ru/news/_posts/2021-11-24-buffer-overrun-in-cgi-escape_html-cve-2021-41816.md new file mode 100644 index 0000000000..b1c7f6bed3 --- /dev/null +++ b/ru/news/_posts/2021-11-24-buffer-overrun-in-cgi-escape_html-cve-2021-41816.md @@ -0,0 +1,36 @@ +--- +layout: news_post +title: "CVE-2021-41816: Переполнение буфера в CGI.escape_html" +author: "mame" +translator: "suban05" +date: 2021-11-24 12:00:00 +0000 +tags: security +lang: ru +--- + +В уязвимости переполнения буфера был обнаружен CGI.escape_html. +Этой уязвимости был присвоен идентификатор CVE [CVE-2021-41816](https://www.cve.org/CVERecord?id=CVE-2021-41816). +Мы настоятельно рекомендуем обновить Ruby. + +## Подробности + +Уязвимость безопасности, которая вызывает переполнение буфера, когда вы передаете очень длинную строку (> 700 МБ) в `CGI.escape_html` на платформе, где тип `long` занимает 4 байта, как правило, это Windows. + +Пожалуйста, обновите гем cgi до версии 0.3.1, 0.2.1 и 0.1.1 или более поздней. Вы можете использовать `gem update cgi` для его обновления. Если вы используете bundler, добавьте `gem "cgi", ">= 0.3.1"` в ваш `Gemfile`. +Или, пожалуйста, обновите Ruby до версии 2.7.5 или 3.0.3. + +Эта проблема была введена с Ruby 2.7, поэтому версия cgi, поставляемая с Ruby 2.6, не уязвима. + +## Затронутые версии + +* гем cgi 0.1.0 или ранее (которые поставляются с Ruby 2.7 серии до Ruby 2.7.5) +* гем cgi 0.2.0 или ранее (которые поставляются с Ruby 3.0 серии до Ruby 3.0.3) +* гем cgi 0.3.0 или ранее + +## Благодарности + +Спасибо [chamal](https://hackerone.com/chamal) за обнаружение этой проблемы. + +## История + +* Изначально опубликовано 2021-11-24 12:00:00 (UTC) diff --git a/ru/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md b/ru/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md new file mode 100644 index 0000000000..42825959ef --- /dev/null +++ b/ru/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md @@ -0,0 +1,47 @@ +--- +layout: news_post +title: "CVE-2021-41819: Подделка префикса Cookie в CGI::Cookie.parse" +author: "mame" +translator: "suban05" +date: 2021-11-24 12:00:00 +0000 +tags: security +lang: ru +--- + +Обнаружена уязвимость подделки префикса Cookie в CGI::Cookie.parse. +Этой уязвимости был присвоен идентификатор CVE [CVE-2021-41819](https://www.cve.org/CVERecord?id=CVE-2021-41819). +Мы настоятельно рекомендуем обновить Ruby. + +## Подробности + +В старых версиях `CGI::Cookie.parse` применялась декодировка URL к именам cookie. +Атакующий мог использовать эту уязвимость для подделки префиксов безопасности в именах cookie, что могло обмануть уязвимое приложение. + +С этим исправлением `CGI::Cookie.parse` больше не декодирует имена cookie. +Обратите внимание, что это несовместимость, если имена cookie, которые вы используете, содержат символы, отличные от буквенно-цифровых, которые закодированы URL. + +Эта проблема аналогична [CVE-2020-8184](https://www.cve.org/CVERecord?id=CVE-2020-8184). + +Если вы используете Ruby 2.7 или 3.0: + +* Пожалуйста, обновите гем cgi до версии 0.3.1, 0.2.1 и 0.1.1 или более поздней. Вы можете использовать `gem update cgi` для его обновления. Если вы используете bundler, добавьте `gem "cgi", ">= 0.3.1"` в ваш `Gemfile`. +* Или, пожалуйста, обновите Ruby до версии 2.7.5 или 3.0.3. + +Если вы используете Ruby 2.6: + +* Пожалуйста, обновите Ruby до версии 2.6.9. *Вы не можете использовать `gem update cgi` для Ruby 2.6 или более ранних версий.* + +## Затронутые версии + +* ruby 2.6.8 или более ранние (Вы не можете использовать `gem update cgi` для этой версии.) +* гем cgi 0.1.0 или ранее (которые поставляются с Ruby 2.7 серии до Ruby 2.7.5) +* гем cgi 0.2.0 или ранее (которые поставляются с Ruby 3.0 серии до Ruby 3.0.3) +* гем cgi 0.3.0 или ранее + +## Благодарности + +Спасибо [ooooooo_q](https://hackerone.com/ooooooo_q) за обнаружение этой проблемы. + +## История + +* Изначально опубликовано 2021-11-24 12:00:00 (UTC) diff --git a/ru/news/_posts/2021-11-24-ruby-2-6-9-released.md b/ru/news/_posts/2021-11-24-ruby-2-6-9-released.md new file mode 100644 index 0000000000..f72b1aebdb --- /dev/null +++ b/ru/news/_posts/2021-11-24-ruby-2-6-9-released.md @@ -0,0 +1,59 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.6.9" +author: "usa" +translator: "suban05" +date: 2021-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.6.9. + +Этот выпуск включает исправления безопасности. +Пожалуйста, ознакомьтесь с подробностями по следующим темам. + +* [CVE-2021-41817: Уязвимость отказа в обслуживании при помощи регулярных выражений в методах разбора даты]({%link en/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md %}) +* [CVE-2021-41819: Подделка префикса Cookie в CGI::Cookie.parse]({%link en/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md %}) + +См. [журналы коммитов](https://github.com/ruby/ruby/compare/v2_6_8...v2_6_9) для получения подробной информации. + +Ruby 2.6 теперь находится в фазе обслуживания безопасности, до конца марта 2022 года. +После этой даты обслуживание Ruby 2.6 будет прекращено. +Мы рекомендуем вам начать планирование миграции на более новые версии Ruby, такие как 3.0 или 2.7. + +## Скачать + +{% assign release = site.data.releases | where: "version", "2.6.9" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам выпустить этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2021-11-24-ruby-2-7-5-released.md b/ru/news/_posts/2021-11-24-ruby-2-7-5-released.md new file mode 100644 index 0000000000..59782039dd --- /dev/null +++ b/ru/news/_posts/2021-11-24-ruby-2-7-5-released.md @@ -0,0 +1,58 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.7.5" +author: "usa" +translator: "suban05" +date: 2021-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.7.5. + +Этот выпуск включает исправления безопасности. +Пожалуйста, ознакомьтесь с подробностями по следующим темам. + +* [CVE-2021-41817: Уязвимость отказа в обслуживании при помощи регулярных выражений в методах разбора даты]({%link en/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md %}) +* [CVE-2021-41816: Переполнение буфера в CGI.escape_html]({%link en/news/_posts/2021-11-24-buffer-overrun-in-cgi-escape_html-cve-2021-41816.md %}) +* [CVE-2021-41819: Подделка префикса Cookie в CGI::Cookie.parse]({%link en/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md %}) + +См. [журналы коммитов](https://github.com/ruby/ruby/compare/v2_7_4...v2_7_5) для получения подробной информации. + +## Скачать + +{% assign release = site.data.releases | where: "version", "2.7.5" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам выпустить этот релиз. +Благодарим за их вклад. + +Техническое обслуживание Ruby 2.7, включая этот выпуск, основано на «Соглашении о стабильной версии Ruby» ассоциации Ruby. diff --git a/ru/news/_posts/2021-11-24-ruby-3-0-3-release.md b/ru/news/_posts/2021-11-24-ruby-3-0-3-release.md new file mode 100644 index 0000000000..4890c51851 --- /dev/null +++ b/ru/news/_posts/2021-11-24-ruby-3-0-3-release.md @@ -0,0 +1,56 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.0.3" +author: "nagachika" +translator: "suban05" +date: 2021-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.0.3. + +Этот выпуск включает исправления безопасности. +Пожалуйста, ознакомьтесь с подробностями по следующим темам. + +* [CVE-2021-41817: Уязвимость отказа в обслуживании при помощи регулярных выражений в методах разбора даты]({%link en/news/_posts/2021-11-15-date-parsing-method-regexp-dos-cve-2021-41817.md %}) +* [CVE-2021-41816: Переполнение буфера в CGI.escape_html]({%link en/news/_posts/2021-11-24-buffer-overrun-in-cgi-escape_html-cve-2021-41816.md %}) +* [CVE-2021-41819: Подделка префикса Cookie в CGI::Cookie.parse]({%link en/news/_posts/2021-11-24-cookie-prefix-spoofing-in-cgi-cookie-parse-cve-2021-41819.md %}) + +См. [журналы коммитов](https://github.com/ruby/ruby/compare/v3_0_2...v3_0_3) для получения подробной информации. + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.0.3" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам выпустить этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2021-12-25-ruby-3-1-0-released.md b/ru/news/_posts/2021-12-25-ruby-3-1-0-released.md new file mode 100644 index 0000000000..aa2256ff8d --- /dev/null +++ b/ru/news/_posts/2021-12-25-ruby-3-1-0-released.md @@ -0,0 +1,252 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.0" +author: "naruse" +translator: "suban05" +date: 2021-12-25 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.1.0" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.1 сохраняет совместимость с Ruby 3.0 и также добавляет множество новых функций. + +## YJIT: Новый экспериментальный встроенный JIT-компилятор + +Ruby 3.1 включает YJIT, новый встроенный JIT-компилятор, разработанный Shopify. + +С тех пор как [Ruby 2.6 представил MJIT в 2018 году](https://www.ruby-lang.org/en/news/2018/12/25/ruby-2-6-0-released/), его производительность значительно улучшилась, и, наконец, [в прошлом году мы достигли Ruby3x3](https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/). Но несмотря на впечатляющее ускорение в бенчмарке Optcarrot, JIT не принес пользы реальным бизнес-приложениям. + +Недавно Shopify внесла много улучшений в Ruby, чтобы ускорить их Rails-приложение. YJIT — важный вклад, направленный на повышение производительности Rails-приложений. + +В то время как MJIT является метод-ориентированным JIT-компилятором и использует внешний C-компилятор, YJIT использует версионирование базовых блоков (Basic Block Versioning) и включает JIT-компилятор внутри себя. С Lazy Basic Block Versioning (LBBV) он сначала компилирует начало метода, а затем постепенно компилирует остальное, когда типы аргументов и переменных определяются динамически. Подробнее см. [YJIT: a basic block versioning JIT compiler for CRuby](https://dl.acm.org/doi/10.1145/3486606.3486781). + +С этой технологией, YJIT достигает как быстрого времени разогрева, так и улучшения производительности для большинства реального программного обеспечения, до 22% на railsbench, 39% на liquid-render. + +YJIT пока является экспериментальной функцией и по умолчанию отключен. Если вы хотите его использовать, укажите командную опцию `--yjit` для включения YJIT. Он также ограничен платформами Unix-подобных систем на x86-64. + +* +* +* + +## debug.gem: Новый отладчик + +Полностью переписанный отладчик [debug.gem](https://github.com/ruby/debug) теперь включен. debug.gem имеет следующие функции: + +* Улучшение производительности отладки (не замедляет приложение даже с отладчиком). +* Поддержка удаленной отладки. +* Поддержка богатого интерфейса отладки (поддерживаются VS Code и браузер Chrome). +* Поддержка многопроцессной/многопоточной отладки. +* Цветной REPL. +* И другие полезные функции, такие как запись и воспроизведение, трассировка и т.д. + + + +Ранее Ruby включал lib/debug.rb, но он плохо поддерживался и имел проблемы с производительностью и функциональностью. debug.gem полностью заменяет lib/debug.rb. + +## error_highlight: Точное указание местоположения ошибок в трассировке + +Встроенный gem error_highlight был введен. Он включает точное указание местоположения ошибок в трассировках: + +``` +$ ruby test.rb +test.rb:1:in `
': undefined method `time' for 1:Integer (NoMethodError) + +1.time {} + ^^^^^ +Did you mean? times +``` + +На данный момент поддерживается только `NameError`. + +Этот gem включен по умолчанию. Вы можете отключить его, используя командную опцию `--disable-error_highlight`. Подробнее см. [репозиторий error_highlight](https://github.com/ruby/error_highlight). + +## Автодополнение и отображение документации в IRB + +Теперь в IRB есть функция автодополнения, где вы можете просто ввести код, и появится диалог с кандидатами на завершение. Вы можете использовать Tab и Shift+Tab для перемещения вверх и вниз. + +Если документация установлена, при выборе кандидата на завершение рядом с диалогом кандидатов на завершение появится диалог с документацией, показывающий часть содержимого. Вы можете прочитать полную документацию, нажав Alt+d. + + + +## Другие примечательные новые функции + +### Язык + +* Значения в литералах Hash и именованных аргументах могут быть опущены. [[Feature #14579]](https://bugs.ruby-lang.org/issues/14579) + * `{x:, y:}` является синтаксическим сахаром для `{x: x, y: y}`. + * `foo(x:, y:)` является синтаксическим сахаром для `foo(x: x, y: y)`. + +* Оператор привязки (`^`) в сопоставлении с образцом теперь принимает выражение. [[Feature #17411]](https://bugs.ruby-lang.org/issues/17411) + + ```ruby + Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a + #=> [[3, 5], [5, 7], [11, 13]] + ``` + +* Скобки могут быть опущены в однострочном сопоставлении с образцом. [[Feature #16182]](https://bugs.ruby-lang.org/issues/16182) + + ```ruby + [0, 1] => _, x + {y: 2} => y: + x #=> 1 + y #=> 2 + ``` + +### RBS + +RBS - это язык для описания структуры программ на Ruby. Подробнее см. [репозиторий RBS](https://github.com/ruby/rbs). + +Обновления с момента Ruby 3.0.0: + +* Параметры обобщенного типа могут быть ограничены. ([PR](https://github.com/ruby/rbs/pull/844)) +* Поддерживаются обобщенные типовые псевдонимы. ([PR](https://github.com/ruby/rbs/pull/823)) +* Введена команда `rbs collection` для управления RBSs гемов. ([документация](https://github.com/ruby/rbs/blob/master/docs/collection.md)) +* Добавлено/обновлено множество сигнатур для встроенных и стандартных библиотек. +* Включены многочисленные исправления ошибок и улучшения производительности. + +Подробнее см. [changelog RBS](https://github.com/ruby/rbs/blob/master/CHANGELOG.md). + +### TypeProf + +TypeProf - это статический анализатор типов для Ruby. Он генерирует прототип RBS из кода Ruby без аннотаций типов. Подробнее см. [документацию](https://github.com/ruby/typeprof/blob/master/doc/doc.md). + +Основное обновление с момента Ruby 3.0.0 - это экспериментальная поддержка IDE под названием "TypeProf для IDE". + +![Демонстрация TypeProf для IDE](https://cache.ruby-lang.org/pub/media/ruby310_typeprof_ide_demo.png) + +Расширение для VS Code показывает предполагаемую (или явно указанную в файле RBS) сигнатуру метода над каждым определением метода, подчеркивает красной линией код, который может вызвать ошибку имени или типовую ошибку, и завершает имена методов (т.е. показывает кандидатов на методы). Подробнее см. [документацию](https://github.com/ruby/typeprof/blob/master/doc/ide.md). + +Также релиз включает многочисленные исправления ошибок и улучшения производительности. + +## Улучшения производительности + +* MJIT + * Для рабочих нагрузок, таких как Rails, значение по умолчанию для `--jit-max-cache` изменено с 100 до 10000. + JIT-компилятор больше не пропускает компиляцию методов длиной более 1000 инструкций. + * Для поддержки Zeitwerk в Rails, скомпилированный код больше не отменяется, + когда TracePoint для ```yaml + событий классов включен. + +## Другие заметные изменения с версии 3.0 + +* Однострочное сопоставление с образцом, например, `ary => [x, y, z]`, больше не является экспериментальным. +* Порядок выполнения при множественном присваивании изменился. [[Bug #4443]](https://bugs.ruby-lang.org/issues/4443) + * `foo[0], bar[0] = baz, qux` выполнялось в порядке `baz`, `qux`, `foo`, а затем `bar` в Ruby 3.0. В Ruby 3.1 оно выполняется в порядке `foo`, `bar`, `baz`, а затем `qux`. +* Выделение переменной ширины: строки (экспериментально). [[Bug #18239]](https://bugs.ruby-lang.org/issues/18239) + +* Psych 4.0 изменяет `Psych.load`, чтобы использовать `safe_load` по умолчанию. + Вам может потребоваться использовать Psych 3.3.2 для перехода на это поведение. [[Bug #17866]](https://bugs.ruby-lang.org/issues/17866) + +### Обновления стандартных библиотек + +* Следующие стандартные гемы обновлены: + * RubyGems 3.3.3 + * base64 0.1.1 + * benchmark 0.2.0 + * bigdecimal 3.1.1 + * bundler 2.3.3 + * cgi 0.3.1 + * csv 3.2.2 + * date 3.2.2 + * did_you_mean 1.6.1 + * digest 3.1.0 + * drb 2.1.0 + * erb 2.2.3 + * error_highlight 0.3.0 + * etc 1.3.0 + * fcntl 1.0.1 + * fiddle 1.1.0 + * fileutils 1.6.0 + * find 0.1.1 + * io-console 0.5.10 + * io-wait 0.2.1 + * ipaddr 1.2.3 + * irb 1.4.1 + * json 2.6.1 + * logger 1.5.0 + * net-http 0.2.0 + * net-protocol 0.1.2 + * nkf 0.1.1 + * open-uri 0.2.0 + * openssl 3.0.0 + * optparse 0.2.0 + * ostruct 0.5.2 + * pathname 0.2.0 + * pp 0.3.0 + * prettyprint 0.1.1 + * psych 4.0.3 + * racc 1.6.0 + * rdoc 6.4.0 + * readline 0.0.3 + * readline-ext 0.1.4 + * reline 0.3.0 + * resolv 0.2.1 + * rinda 0.1.1 + * ruby2_keywords 0.0.5 + * securerandom 0.1.1 + * set 1.0.2 + * stringio 3.0.1 + * strscan 3.0.1 + * tempfile 0.1.2 + * time 0.2.0 + * timeout 0.2.0 + * tmpdir 0.1.2 + * un 0.2.0 + * uri 0.11.0 + * yaml 0.2.0 + * zlib 2.1.1 +* Следующие встроенные гемы обновлены: + * minitest 5.15.0 + * power_assert 2.0.1 + * rake 13.0.6 + * test-unit 3.5.3 + * rexml 3.2.5 + * rbs 2.0.0 + * typeprof 0.21.1 +* Следующие стандартные гемы теперь встроенные. Вам нужно добавить следующие библиотеки в `Gemfile` при использовании bundler: + * net-ftp 0.1.3 + * net-imap 0.2.2 + * net-pop 0.1.1 + * net-smtp 0.3.1 + * matrix 0.4.2 + * prime 0.1.2 + * debug 1.4.0 + +См. [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [историю коммитов](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}) для более подробной информации. + +С этими изменениями, [{{ release.stats.files_changed }} файлов изменены, {{ release.stats.insertions }} вставок(+), {{ release.stats.deletions }} удалений(-)](https://github.com/ruby/ruby/compare/v3_0_0...{{ release.tag }}#file_bucket) с момента Ruby 3.0.0! + +Счастливого Рождества, счастливых праздников и наслаждайтесь программированием с Ruby 3.1! + +## Загрузка + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был впервые разработан Мацумото (Yukihiro Matsumoto) в 1993 году и теперь разрабатывается как Open Source. Он работает на множестве платформ и используется по всему миру, особенно для веб-разработки. diff --git a/ru/news/_posts/2022-02-18-ruby-3-1-1-released.md b/ru/news/_posts/2022-02-18-ruby-3-1-1-released.md new file mode 100644 index 0000000000..4d2372b94b --- /dev/null +++ b/ru/news/_posts/2022-02-18-ruby-3-1-1-released.md @@ -0,0 +1,65 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.1" +author: "naruse" +translator: "suban05" +date: 2022-02-18 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.1. + +Это первый TEENY-релиз стабильной серии 3.1. + +* [error_highlight не работает с опцией -e](https://bugs.ruby-lang.org/issues/18434) +* [Исправление YJIT, передающего аргументы метода в неправильном порядке, когда смешаны именованные аргументы и аргументы по умолчанию. Ломает кеширование коллекций Rails](https://bugs.ruby-lang.org/issues/18453) +* [Ошибка сегментации при отсутствии метода Warning#warn](https://bugs.ruby-lang.org/issues/18458) +* [Исправление глобинга каталога точек в Pathname](https://bugs.ruby-lang.org/issues/18436) +* [Исправление значения по умолчанию --jit-max-cache в ruby --help](https://bugs.ruby-lang.org/issues/18469) +* [3.1.0-dev `include` приводит к тому, что Module отмечается как инициализированный](https://bugs.ruby-lang.org/issues/18292) +* [Ссылка на учебник для Optionparser сломана](https://bugs.ruby-lang.org/issues/18468) +* [Выдача элемента для Enumerator в другом потоке приводит к аварийному завершению](https://bugs.ruby-lang.org/issues/18475) +* [Ошибка сегментации с ruby 3.1.0 в `active_decorator`](https://bugs.ruby-lang.org/issues/18489) +* [Ошибка сегментации при использовании Process.daemon в Fiber](https://bugs.ruby-lang.org/issues/18497) +* [0 << (2\*\*40) вызывает NoMemoryError, но 0 << (2\*\*80) возвращает 0](https://bugs.ruby-lang.org/issues/18517) +* [Исправления ошибок чтения/записи/ожидания IO.](https://bugs.ruby-lang.org/issues/18443) +* [Утечка памяти при создании алиаса метода самому себе](https://bugs.ruby-lang.org/issues/18516) +* [ошибка: использование не объявленного идентификатора 'MAP_ANONYMOUS'](https://bugs.ruby-lang.org/issues/18556) +* [\[BUG\] попытка пометить объект T_NONE в RubyVM::InstructionSequence.load_from_binary](https://bugs.ruby-lang.org/issues/18501) +* [throw_data передается в rescue через require](https://bugs.ruby-lang.org/issues/18562) +* [Исправление `IpAddr#to_range` для замороженных экземпляров `IpAddr`](https://bugs.ruby-lang.org/issues/18570) +* [Исправлен путь для ipaddr.rb](https://github.com/ruby/ruby/pull/5533) +* [Объединение RubyGems-3.3.7 и Bundler-2.3.7](https://github.com/ruby/ruby/pull/5543) +* [Зависание при повторении Hash#shift против пустого Hash](https://bugs.ruby-lang.org/issues/18578) + +См. [историю коммитов](https://github.com/ruby/ruby/compare/v3_1_0...v3_1_1) для получения дополнительной информации. + +## Загрузка + +{% assign release = site.data.releases | where: "version", "3.1.1" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот релиз. +Спасибо за их вклад. diff --git a/ru/news/_posts/2022-04-03-ruby-3-2-0-preview1-released.md b/ru/news/_posts/2022-04-03-ruby-3-2-0-preview1-released.md new file mode 100644 index 0000000000..10677b64c8 --- /dev/null +++ b/ru/news/_posts/2022-04-03-ruby-3-2-0-preview1-released.md @@ -0,0 +1,169 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.0 Preview 1" +author: "naruse" +translator: "suban05" +date: 2022-04-03 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.2.0-preview1" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.2 добавляет множество новых функций и улучшений производительности. + + +## Поддержка WebAssembly на основе WASI + +Это начальная версия поддержки WebAssembly на основе WASI. Это позволяет бинарному файлу CRuby быть доступным в веб-браузере, серверной среде Serverless Edge и других средах WebAssembly/WASI. В настоящее время этот порт проходит основные и начальные тестовые наборы, не используя API потоков. + +![](https://i.imgur.com/opCgKy2.png) + +### Предыстория + +[WebAssembly (Wasm)](https://webassembly.org/) изначально был представлен для безопасного и быстрого выполнения программ в веб-браузерах. Но его цель - эффективное выполнение программ с безопасностью в различных средах - давно желанна не только для веба, но и для общих приложений. + +[WASI (The WebAssembly System Interface)](https://wasi.dev/) разработан для таких случаев использования. Хотя таким приложениям необходимо взаимодействовать с операционными системами, WebAssembly работает на виртуальной машине, которая не имела системного интерфейса. WASI стандартизирует его. + +Поддержка WebAssembly/WASI в Ruby направлена на использование этих проектов. Это позволяет разработчикам Ruby писать приложения, которые работают на такой обещанной платформе. + +### Пример использования + +Эта поддержка позволяет разработчикам использовать CRuby в среде WebAssembly. Пример использования - поддержка CRuby в [песочнице TryRuby](https://try.ruby-lang.org/playground/). Теперь вы можете попробовать оригинальный CRuby в своем веб-браузере. + +### Технические аспекты + +Сегодняшние WASI и WebAssembly сами по себе имеют некоторые недостающие функции для реализации Fiber, исключений и GC, поскольку они все еще развиваются, а также по соображениям безопасности. Поэтому CRuby заполняет этот пробел, используя Asyncify, что является техникой бинарной трансформации для управления выполнением в пользовательской области. + +Кроме того, мы создали [виртуальную файловую систему поверх WASI](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby), чтобы мы могли легко упаковать Ruby-приложения в один .wasm файл. Это немного упрощает распространение Ruby-приложений. + +### Связанные ссылки + +* [Добавление поддержки WebAssembly на основе WASI #5407](https://github.com/ruby/ruby/pull/5407) +* [Обновление о поддержке WebAssembly/WASI в Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9) + +## Таймаут для Regexp + +Введена функция таймаута для сопоставления регулярных выражений. + +```ruby +Regexp.timeout = 1.0 + +/^a*b?a*$/ =~ "a" * 50000 + "x" +#=> Regexp::TimeoutError возникает через одну секунду +``` + +Известно, что сопоставление регулярных выражений может занять неожиданно много времени. Если ваш код пытается сопоставить возможно неэффективное регулярное выражение с недоверенным вводом, злоумышленник может использовать это для эффективного отказа в обслуживании (так называемое DoS регулярных выражений, или ReDoS). + +Риск DoS можно предотвратить или значительно уменьшить, настроив `Regexp.timeout` в соответствии с требованиями вашего Ruby-приложения. Пожалуйста, попробуйте это в своем приложении и оставьте свои отзывы. + +Обратите внимание, что `Regexp.timeout` является глобальной настройкой. Если вы хотите использовать разные настройки таймаута для некоторых специальных регулярных выражений, вы можете использовать ключевое слово `timeout` для `Regexp.new`. + +```ruby +Regexp.timeout = 1.0 + +# Это регулярное выражение не имеет таймаута +long_time_re = Regexp.new("^a*b?a*$", timeout: nil) + +long_time_re =~ "a" * 50000 + "x" # никогда не прерывается +``` + +Оригинальное предложение можно найти здесь: https://bugs.ruby-lang.org/issues/17837 + +## Другие заметные новые функции + +### Больше не включаются сторонние исходные коды + +* Мы больше не включаем сторонние исходные коды, такие как `libyaml`, `libffi`. + + * Исходный код libyaml был удален из psych. Возможно, вам потребуется установить `libyaml-dev` на платформе Ubuntu/Debian. Название пакета может отличаться на других платформах. + + * libffi будет удален из `fiddle` в preview2 + +### Язык + +* Шаблон поиска больше не является экспериментальным. + +## Улучшения производительности + +## Другие заметные изменения с версии 3.1 + +* Hash + * Hash#shift теперь всегда возвращает nil, если хэш пуст, вместо возвращения значения по умолчанию или вызова процедуры по умолчанию. [[Bug #16908]] + +* MatchData + * Добавлен MatchData#byteoffset. [[Feature #13110]] + +* Module + * Добавлен Module.used_refinements. [[Feature #14332]] + * Добавлен Module#refinements. [[Feature #12737]] + * Добавлен Module#const_added. [[Feature #17881]] + +* Proc + * Proc#dup возвращает экземпляр подкласса. [[Bug #17545]] + * Proc#parameters теперь принимает ключевое слово lambda. [[Feature #15357]] + +* Refinement + * Добавлен Refinement#refined_class. [[Feature #12737]] + +* Set + * Set теперь доступен как встроенный класс без необходимости `require "set"`. [[Feature #16989]] + В настоящее время он автоматически загружается через константу `Set` или вызов `Enumerable#to_set`. + +* String + * Добавлены String#byteindex и String#byterindex. [[Feature #13110]] + * Обновление Unicode до версии 14.0.0 и Emoji до версии 14.0. [[Feature #18037]] + (также применяется к Regexp) + * Добавлен String#bytesplice. [[Feature #18598]] + +* Struct + * Класс Struct также может быть инициализирован с именованными аргументами без `keyword_init: true` в `Struct.new` [[Feature #16806]] + +### Обновления стандартных библиотек + +* Следующие стандартные библиотеки обновлены. + + * TBD + +* Следующие встроенные библиотеки обновлены. + + * TBD + +* Следующие стандартные библиотеки теперь встроенные библиотеки. Вам необходимо добавить следующие библиотеки в `Gemfile` в среде bundler. + + * TBD + +См. [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [историю коммитов](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}) +для получения дополнительной информации. + +С этими изменениями, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} вставок(+), {{ release.stats.deletions }} удалений(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket) +с версии Ruby 3.1.0! + +## Загрузка + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был впервые разработан Мацумото (Юкихиро Мацумото) в 1993 году, +и теперь разрабатывается как Open Source. Он работает на множестве платформ +и используется по всему миру, особенно для веб-разработки. diff --git a/ru/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md b/ru/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md new file mode 100644 index 0000000000..dafde5eec4 --- /dev/null +++ b/ru/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md @@ -0,0 +1,35 @@ +--- +layout: news_post +title: "CVE-2022-28739: Переполнение буфера при преобразовании String в Float" +author: "mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +tags: security +lang: ru +--- + +Обнаружена уязвимость переполнения буфера в алгоритме преобразования строки в число с плавающей точкой. +Этой уязвимости присвоен идентификатор CVE [CVE-2022-28739](https://www.cve.org/CVERecord?id=CVE-2022-28739). +Мы настоятельно рекомендуем обновить Ruby. + +## Подробности + +Из-за ошибки во внутренней функции, которая преобразует строку в число с плавающей точкой, некоторые методы преобразования, такие как `Kernel#Float` и `String#to_f`, могут вызвать чтение за пределами буфера. +Обычным последствием является завершение процесса из-за ошибки сегментации, но в ограниченных обстоятельствах это может быть использовано для незаконного чтения памяти. + +Пожалуйста, обновите Ruby до версий 2.6.10, 2.7.6, 3.0.4 или 3.1.2. + +## Затронутые версии + +* ruby 2.6.9 и ранее +* ruby 2.7.5 и ранее +* ruby 3.0.3 и ранее +* ruby 3.1.1 и ранее + +## Благодарности + +Спасибо [piao](https://hackerone.com/piao?type=user) за обнаружение этой проблемы. + +## История + +* Первоначально опубликовано 2022-04-12 12:00:00 (UTC) diff --git a/ru/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md b/ru/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md new file mode 100644 index 0000000000..b0447204ff --- /dev/null +++ b/ru/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md @@ -0,0 +1,35 @@ +--- +layout: news_post +title: "CVE-2022-28738: Двойное освобождение памяти при компиляции регулярных выражений" +author: "mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +tags: security +lang: ru +--- + +Обнаружена уязвимость двойного освобождения памяти при компиляции регулярных выражений. +Этой уязвимости присвоен идентификатор CVE [CVE-2022-28738](https://www.cve.org/CVERecord?id=CVE-2022-28738). +Мы настоятельно рекомендуем обновить Ruby. + +## Подробности + +Из-за ошибки в процессе компиляции регулярных выражений создание объекта регулярного выражения с специально сформированной строкой исходного кода может привести к двойному освобождению одной и той же памяти. Это известно как уязвимость "double free". +Отметим, что в целом считается небезопасным создавать и использовать объект регулярного выражения, созданный из недоверенного ввода. Однако в данном случае, после всесторонней оценки, мы рассматриваем эту проблему как уязвимость. + +Пожалуйста, обновите Ruby до версий 3.0.4 или 3.1.2. + +## Затронутые версии + +* ruby 3.0.3 и ранее +* ruby 3.1.1 и ранее + +Отметим, что версии ruby 2.6 и 2.7 не затронуты. + +## Благодарности + +Спасибо [piao](https://hackerone.com/piao?type=user) за обнаружение этой проблемы. + +## История + +* Первоначально опубликовано 2022-04-12 12:00:00 (UTC) diff --git a/ru/news/_posts/2022-04-12-ruby-2-6-10-released.md b/ru/news/_posts/2022-04-12-ruby-2-6-10-released.md new file mode 100644 index 0000000000..8bd234ce43 --- /dev/null +++ b/ru/news/_posts/2022-04-12-ruby-2-6-10-released.md @@ -0,0 +1,59 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.6.10" +author: "usa и mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.6.10. + +Этот выпуск включает исправление безопасности. +Пожалуйста, ознакомьтесь с темами ниже для получения подробной информации. + +* [CVE-2022-28739: Переполнение буфера при преобразовании строки в число с плавающей точкой]({%link en/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md %}) + +Этот выпуск также включает исправление проблемы сборки с очень старыми компиляторами и исправление регрессии в библиотеке дат. +Дополнительные подробности см. в [журналах коммитов](https://github.com/ruby/ruby/compare/v2_6_9...v2_6_10). + +После этого выпуска Ruby 2.6 достигает конца срока службы (EOL). Другими словами, это ожидается как последний выпуск серии Ruby 2.6. +Мы не будем выпускать Ruby 2.6.11, даже если будет найдена уязвимость безопасности (но можем выпустить, если будет найдена серьезная регрессия). +Мы рекомендуем всем пользователям Ruby 2.6 немедленно начать переход на Ruby 3.1, 3.0 или 2.7. + +## Загрузка + +{% assign release = site.data.releases | where: "version", "2.6.10" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот выпуск. +Спасибо за их вклад. diff --git a/ru/news/_posts/2022-04-12-ruby-2-7-6-released.md b/ru/news/_posts/2022-04-12-ruby-2-7-6-released.md new file mode 100644 index 0000000000..63d4014861 --- /dev/null +++ b/ru/news/_posts/2022-04-12-ruby-2-7-6-released.md @@ -0,0 +1,64 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.7.6" +author: "usa и mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.7.6. + +Этот выпуск включает исправление безопасности. +Пожалуйста, ознакомьтесь с темами ниже для получения подробной информации. + +* [CVE-2022-28739: Переполнение буфера при преобразовании строки в число с плавающей точкой]({%link en/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md %}) + +Этот выпуск также включает несколько исправлений ошибок. +Дополнительные подробности см. в [журналах коммитов](https://github.com/ruby/ruby/compare/v2_7_5...v2_7_6). + +После этого выпуска мы завершаем фазу обычного обслуживания Ruby 2.7, и Ruby 2.7 переходит в фазу обслуживания безопасности. +Это означает, что мы больше не будем делать бэкпорт исправлений ошибок в Ruby 2.7, кроме исправлений безопасности. + +Срок фазы обслуживания безопасности составляет один год. +Ruby 2.7 достигает конца срока службы (EOL), и его официальная поддержка заканчивается по завершении фазы обслуживания безопасности. +Поэтому мы рекомендуем вам начать планировать обновление до Ruby 3.0 или 3.1. + +## Загрузка + +{% assign release = site.data.releases | where: "version", "2.7.6" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот выпуск. +Спасибо за их вклад. + +Поддержка Ruby 2.7, включая этот выпуск, основана на "Соглашении о стабильной версии Ruby" Ассоциации Ruby. diff --git a/ru/news/_posts/2022-04-12-ruby-3-0-4-released.md b/ru/news/_posts/2022-04-12-ruby-3-0-4-released.md new file mode 100644 index 0000000000..b592ffeda3 --- /dev/null +++ b/ru/news/_posts/2022-04-12-ruby-3-0-4-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.0.4" +author: "nagachika и mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.0.4. + +Этот выпуск включает исправления безопасности. +Пожалуйста, ознакомьтесь с темами ниже для получения подробной информации. + +* [CVE-2022-28738: Двойное освобождение памяти при компиляции регулярных выражений]({%link en/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md %}) +* [CVE-2022-28739: Переполнение буфера при преобразовании строки в число с плавающей точкой]({%link en/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md %}) + +Дополнительные подробности см. в [журналах коммитов](https://github.com/ruby/ruby/compare/v3_0_3...v3_0_4). + +## Загрузка + +{% assign release = site.data.releases | where: "version", "3.0.4" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот выпуск. +Спасибо за их вклад. diff --git a/ru/news/_posts/2022-04-12-ruby-3-1-2-released.md b/ru/news/_posts/2022-04-12-ruby-3-1-2-released.md new file mode 100644 index 0000000000..f523570225 --- /dev/null +++ b/ru/news/_posts/2022-04-12-ruby-3-1-2-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.2" +author: "naruse и mame" +translator: "suban05" +date: 2022-04-12 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.2. + +Этот выпуск включает исправления безопасности. +Пожалуйста, ознакомьтесь с темами ниже для получения подробной информации. + +* [CVE-2022-28738: Двойное освобождение памяти при компиляции регулярных выражений]({%link en/news/_posts/2022-04-12-double-free-in-regexp-compilation-cve-2022-28738.md %}) +* [CVE-2022-28739: Переполнение буфера при преобразовании строки в число с плавающей точкой]({%link en/news/_posts/2022-04-12-buffer-overrun-in-string-to-float-cve-2022-28739.md %}) + +Дополнительные подробности см. в [журналах коммитов](https://github.com/ruby/ruby/compare/v3_1_1...v3_1_2). + +## Загрузка + +{% assign release = site.data.releases | where: "version", "3.1.2" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот выпуск. +Спасибо за их вклад. diff --git a/ru/news/_posts/2022-09-09-ruby-3-2-0-preview2-released.md b/ru/news/_posts/2022-09-09-ruby-3-2-0-preview2-released.md new file mode 100644 index 0000000000..f537410a3f --- /dev/null +++ b/ru/news/_posts/2022-09-09-ruby-3-2-0-preview2-released.md @@ -0,0 +1,327 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.0 Preview 2" +author: "naruse" +translator: "suban05" +date: 2022-09-09 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.2.0-preview2" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.2 добавляет множество новых функций и улучшений производительности. + +## Поддержка WebAssembly на основе WASI + +Это начальная версия поддержки WebAssembly на основе WASI. Это позволяет бинарному файлу CRuby быть доступным в веб-браузере, серверной среде Serverless Edge и других средах WebAssembly/WASI. В настоящее время этот порт проходит основные и начальные тестовые наборы, не используя API потоков. + +![](https://i.imgur.com/opCgKy2.png) + +### Предыстория + +[WebAssembly (Wasm)](https://webassembly.org/) изначально был представлен для безопасного и быстрого выполнения программ в веб-браузерах. Но его цель - эффективное выполнение программ с безопасностью в различных средах - давно желанна не только для веба, но и для общих приложений. + +[WASI (The WebAssembly System Interface)](https://wasi.dev/) разработан для таких случаев использования. Хотя таким приложениям необходимо взаимодействовать с операционными системами, WebAssembly работает на виртуальной машине, которая не имела системного интерфейса. WASI стандартизирует его. + +Поддержка WebAssembly/WASI в Ruby направлена на использование этих проектов. Это позволяет разработчикам Ruby писать приложения, которые работают на такой обещанной платформе. + +### Пример использования + +Эта поддержка позволяет разработчикам использовать CRuby в среде WebAssembly. Пример использования - поддержка CRuby в [песочнице TryRuby](https://try.ruby-lang.org/playground/). Теперь вы можете попробовать оригинальный CRuby в своем веб-браузере. + +### Технические аспекты + +Сегодняшние WASI и WebAssembly сами по себе имеют некоторые недостающие функции для реализации Fiber, исключений и GC, поскольку они все еще развиваются, а также по соображениям безопасности. Поэтому CRuby заполняет этот пробел, используя Asyncify, что является техникой бинарной трансформации для управления выполнением в пользовательской области. + +Кроме того, мы создали [виртуальную файловую систему поверх WASI](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby), чтобы мы могли легко упаковать Ruby-приложения в один .wasm файл. Это немного упрощает распространение Ruby-приложений. + +### Связанные ссылки + +* [Добавление поддержки WebAssembly на основе WASI #5407](https://github.com/ruby/ruby/pull/5407) +* [Обновление о поддержке WebAssembly/WASI в Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9) + +## Таймаут для Regexp + +Введена функция таймаута для сопоставления Regexp. + +```ruby +Regexp.timeout = 1.0 + +/^a*b?a*$/ =~ "a" * 50000 + "x" +#=> Regexp::TimeoutError возникнет через одну секунду +``` + +Известно, что сопоставление Regexp может занять неожиданно много времени. Если ваш код пытается сопоставить потенциально неэффективный Regexp с ненадежным входом, злоумышленник может использовать это для эффективного отказа в обслуживании (так называемый Regular expression DoS или ReDoS). + +Риск DoS можно предотвратить или значительно смягчить, настроив `Regexp.timeout` в соответствии с требованиями вашего Ruby приложения. Пожалуйста, попробуйте это в своем приложении и предоставьте обратную связь. + +Обратите внимание, что `Regexp.timeout` является глобальной конфигурацией. Если вы хотите использовать разные настройки таймаута для некоторых специальных Regexp, вы можете использовать ключевое слово `timeout` для `Regexp.new`. + +```ruby +Regexp.timeout = 1.0 + +# Этот regexp не имеет таймаута +long_time_re = Regexp.new("^a*b?a*$", timeout: nil) + +long_time_re =~ "a" * 50000 + "x" # никогда не прерывается +``` + +Оригинальное предложение: https://bugs.ruby-lang.org/issues/17837 + +## Другие заметные новые функции + +### Больше не комплектуем сторонние источники + +* Мы больше не комплектуем сторонние источники, такие как `libyaml`, `libffi`. + + * Исходный код libyaml был удален из psych. Возможно, вам потребуется установить `libyaml-dev` на платформе Ubuntu/Debian. Название пакета различается в зависимости от платформы. + + * libffi будет удален из `fiddle` в preview2. + +### Язык + +* Анонимные остаточные и ключевые аргументы теперь могут быть переданы как + аргументы, а не только использоваться в параметрах метода. + [[Feature #18351]] + + ```ruby + def foo(*) + bar(*) + end + def baz(**) + quux(**) + end + ``` + +* Proc, принимающий один позиционный аргумент и ключевые слова, больше не будет автоматически разворачиваться. [[Bug #18633]] + + ```ruby + proc{|a, **k| a}.call([1, 2]) + # Ruby 3.1 и раньше + # => 1 + # Ruby 3.2 и позже + # => [1, 2] + ``` + +* Порядок оценки присваивания констант для констант, установленных на явных + объектах, стал согласован с порядком оценки присваивания одного атрибута. С этим кодом: + + ```ruby + foo::BAR = baz + ``` + + `foo` теперь вызывается перед `baz`. Аналогично, для множественных присваиваний + константам используется порядок оценки слева направо. С этим кодом: + + ```ruby + foo1::BAR1, foo2::BAR2 = baz1, baz2 + ``` + + Теперь используется следующий порядок оценки: + + 1. `foo1` + 2. `foo2` + 3. `baz1` + 4. `baz2` + + [[Bug #15928]] + +* Шаблон поиска больше не является экспериментальным. + [[Feature #18585]] + +* Методы, принимающие остаточный параметр (например, `*args`) и желающие передавать ключевые + аргументы через `foo(*args)`, теперь должны быть помечены как `ruby2_keywords` + (если это еще не сделано). Другими словами, все методы, желающие передавать + ключевые аргументы через `*args`, теперь должны быть помечены как `ruby2_keywords`, + без исключений. Это облегчит переход к другим способам передачи, когда библиотека сможет + требовать Ruby 3+. Ранее флаг `ruby2_keywords` сохранялся, если принимающий метод принимал `*args`, + но это была ошибка и несоответствие. Хорошая техника для нахождения потенциально отсутствующих `ruby2_keywords` + - запуск тестового набора, и если он не проходит, найти последний метод, который должен + принимать ключевые аргументы, использовать `puts nil, caller, nil` там, и проверить каждый + метод/блок в цепочке вызовов, который должен передавать ключевые слова, правильно ли он помечен + как `ruby2_keywords`. [[Bug #18625]] [[Bug #16466]] + + ```ruby + def target(**kw) + end + + # Работало без ruby2_keywords в Ruby 2.7-3.1, ruby2_keywords + # нужно в 3.2+. Как (*args, **kwargs) или (...) нужно будет на обоих #foo и #bar при переходе от ruby2_keywords. + ruby2_keywords def bar(*args) + target(*args) + end + + ruby2_keywords def foo(*args) + bar(*args) + end + + foo(k: 1) + ``` + +## Улучшения производительности + +### YJIT + +* Поддержка arm64 / aarch64 на UNIX-платформах. +* Для сборки YJIT требуется Rust 1.58.1+. [[Feature #18481]] + +## Другие заметные изменения с версии 3.1 + +* Hash + * Hash#shift теперь всегда возвращает nil, если хэш + пуст, вместо возврата значения по умолчанию или + вызова функции по умолчанию. [[Bug #16908]] + +* MatchData + * Добавлен метод MatchData#byteoffset. [[Feature #13110]] + +* Module + * Добавлен метод Module.used_refinements. [[Feature #14332]] + * Добавлен метод Module#refinements. [[Feature #12737]] + * Добавлен метод Module#const_added. [[Feature #17881]] + +* Proc + * Proc#dup возвращает экземпляр подкласса. [[Bug #17545]] + * Proc#parameters теперь принимает ключевое слово lambda. [[Feature #15357]] + +* Refinement + * Добавлен метод Refinement#refined_class. [[Feature + + #12737]] + +* Set + * Set теперь доступен как встроенный класс без необходимости `require "set"`. [[Feature #16989]] + Он автоматически загружается через константу `Set` или вызов `Enumerable#to_set`. + +* String + * Добавлены методы String#byteindex и String#byterindex. [[Feature #13110]] + * Обновление Unicode до версии 14.0.0 и Emoji до версии 14.0. [[Feature #18037]] + (также относится к Regexp) + * Добавлен метод String#bytesplice. [[Feature #18598]] + +* Struct + * Класс Struct теперь можно инициализировать с ключевыми аргументами + без `keyword_init: true` на `Struct.new`. [[Feature #16806]] + +## Вопросы совместимости + +Примечание: исключены исправления ошибок. + +### Удаленные константы + +Следующие устаревшие константы удалены. + +* `Fixnum` и `Bignum` [[Feature #12005]] +* `Random::DEFAULT` [[Feature #17351]] +* `Struct::Group` +* `Struct::Passwd` + +### Удаленные методы + +Следующие устаревшие методы удалены. + +* `Dir.exists?` [[Feature #17391]] +* `File.exists?` [[Feature #17391]] +* `Kernel#=~` [[Feature #15231]] +* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?` + [[Feature #16131]] +* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?` + [[Feature #16131]] + +## Обновления совместимости со стандартной библиотекой + +* `Psych` больше не комплектует исходные коды libyaml. + Пользователям необходимо установить библиотеку libyaml самостоятельно через систему + пакетов. [[Feature #18571]] + +## Обновления C API + +### Удаленные C API + +Следующие устаревшие API удалены. + +* Переменная `rb_cData`. +* Функции "taintedness" и "trustedness". [[Feature #16131]] + +### Обновления стандартных библиотек + +* Следующие стандартные библиотеки обновлены. + + * TBD + +* Следующие комплектуемые библиотеки обновлены. + + * TBD + +* Следующие стандартные библиотеки теперь являются комплектуемыми библиотеками. Вам нужно добавить следующие библиотеки в `Gemfile` в окружении bundler. + + * TBD + +См. [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [коммиты](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}) +для получения более подробной информации. + +С этими изменениями, [{{ release.stats.files_changed }} измененных файлов, {{ release.stats.insertions }} вставок(+), {{ release.stats.deletions }} удалений(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket) +с момента выпуска Ruby 3.1.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был впервые разработан Мацумото (Юкихиро Мацумото) в 1993 году, +и теперь разрабатывается как Open Source. Он работает на множестве платформ +и используется по всему миру, особенно для веб-разработки. + +[Feature #12005]: https://bugs.ruby-lang.org/issues/12005 +[Feature #12655]: https://bugs.ruby-lang.org/issues/12655 +[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 +[Feature #13110]: https://bugs.ruby-lang.org/issues/13110 +[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 +[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 +[Feature #15357]: https://bugs.ruby-lang.org/issues/15357 +[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 +[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 +[Bug #16466]: https://bugs.ruby-lang.org/issues/16466 +[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 +[Bug #16889]: https://bugs.ruby-lang.org/issues/16889 +[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 +[Feature #16989]: https://bugs.ruby-lang.org/issues/16989 +[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 +[Feature #17391]: https://bugs.ruby-lang.org/issues/17391 +[Bug #17545]: https://bugs.ruby-lang.org/issues/17545 +[Feature #17881]: https://bugs.ruby-lang.org/issues/17881 +[Feature #18037]: https://bugs.ruby-lang.org/issues/18037 +[Feature #18159]: https://bugs.ruby-lang.org/issues/18159 +[Feature #18351]: https://bugs.ruby-lang.org/issues/18351 +[Bug #18487]: https://bugs.ruby-lang.org/issues/18487 +[Feature #18571]: https://bugs.ruby-lang.org/issues/18571 +[Feature #18585]: https://bugs.ruby-lang.org/issues/18585 +[Feature #18598]: https://bugs.ruby-lang.org/issues/18598 +[Bug #18625]: https://bugs.ruby-lang.org/issues/18625 +[Bug #18633]: https://bugs.ruby-lang.org/issues/18633 +[Feature #18685]: https://bugs.ruby-lang.org/issues/18685 +[Bug #18782]: https://bugs.ruby-lang.org/issues/18782 +[Feature #18788]: https://bugs.ruby-lang.org/issues/18788 +[Feature #18809]: https://bugs.ruby-lang.org/issues/18809 +[Feature #18481]: https://bugs.ruby-lang.org/issues/18481 diff --git a/ru/news/_posts/2022-11-11-ruby-3-2-0-preview3-released.md b/ru/news/_posts/2022-11-11-ruby-3-2-0-preview3-released.md new file mode 100644 index 0000000000..b757113a29 --- /dev/null +++ b/ru/news/_posts/2022-11-11-ruby-3-2-0-preview3-released.md @@ -0,0 +1,387 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.0 Preview 3" +author: "naruse" +translator: "suban05" +date: 2022-11-11 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.2.0-preview3" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.2 добавляет множество новых функций и улучшений производительности. + + +## Поддержка WebAssembly на основе WASI + +Это начальная версия поддержки WebAssembly на основе WASI. Это позволяет бинарному файлу CRuby быть доступным в веб-браузере, серверной среде Serverless Edge и других средах WebAssembly/WASI. В настоящее время этот порт проходит основные и начальные тестовые наборы, не используя API потоков. + +![](https://i.imgur.com/opCgKy2.png) + +### Предыстория + +[WebAssembly (Wasm)](https://webassembly.org/) изначально был представлен для безопасного и быстрого выполнения программ в веб-браузерах. Но его цель - эффективное выполнение программ с безопасностью в различных средах - давно желанна не только для веба, но и для общих приложений. + +[WASI (The WebAssembly System Interface)](https://wasi.dev/) разработан для таких случаев использования. Хотя таким приложениям необходимо взаимодействовать с операционными системами, WebAssembly работает на виртуальной машине, которая не имела системного интерфейса. WASI стандартизирует его. + +Поддержка WebAssembly/WASI в Ruby направлена на использование этих проектов. Это позволяет разработчикам Ruby писать приложения, которые работают на такой обещанной платформе. + +### Пример использования + +Эта поддержка позволяет разработчикам использовать CRuby в среде WebAssembly. Пример использования - поддержка CRuby в [песочнице TryRuby](https://try.ruby-lang.org/playground/). Теперь вы можете попробовать оригинальный CRuby в своем веб-браузере. + +### Технические аспекты + +Сегодняшние WASI и WebAssembly сами по себе имеют некоторые недостающие функции для реализации Fiber, исключений и GC, поскольку они все еще развиваются, а также по соображениям безопасности. Поэтому CRuby заполняет этот пробел, используя Asyncify, что является техникой бинарной трансформации для управления выполнением в пользовательской области. + +Кроме того, мы создали [виртуальную файловую систему поверх WASI](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby), чтобы мы могли легко упаковать Ruby-приложения в один .wasm файл. Это немного упрощает распространение Ruby-приложений. + +### Связанные ссылки + +* [Добавление поддержки WebAssembly на основе WASI #5407](https://github.com/ruby/ruby/pull/5407) +* [Обновление о поддержке WebAssembly/WASI в Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9) + +## Улучшения в регулярных выражениях против ReDoS + +Известно, что поиск по регулярным выражениям может занимать неожиданно долгое время. Если ваш код пытается выполнить неэффективное регулярное выражение для не доверенного ввода, злоумышленник может использовать это для эффективного отказа в обслуживании (так называемый Regular expression DoS, или ReDoS). + +Мы внесли два улучшения, которые значительно снижают возможность ReDoS. + +### Улучшенный алгоритм сопоставления Regexp + +Начиная с Ruby 3.2, алгоритм сопоставления Regexp значительно улучшен за счет использования техники мемоизации. + +```ruby +# Это сопоставление занимает 10 секунд в Ruby 3.1 и 0.003 секунды в Ruby 3.2 + +/^a*b?a*$/ =~ "a" * 50000 + "x" +``` + +Улучшенный алгоритм сопоставления позволяет выполнять большинство сопоставлений Regexp (приблизительно 90% в наших экспериментах) за линейное время. + +(Для пользователей предварительной версии: эта оптимизация может потреблять память, пропорциональную длине ввода для каждого сопоставления. Мы не ожидаем практических проблем, так как выделение памяти обычно происходит отложенно, и обычное сопоставление Regexp должно потреблять не более 10 раз больше памяти, чем длина ввода. Если у вас возникают проблемы с памятью при сопоставлении Regexp в реальном приложении, пожалуйста, сообщите об этом.) + +Оригинальное предложение доступно по ссылке: + +### Таймаут для Regexp + +Вышеуказанная оптимизация не может быть применена ко всем видам регулярных выражений, например, к выражениям с использованием продвинутых функций (например, обратные ссылки или look-around), или с большим фиксированным количеством повторений. В качестве резервного варианта введена функция таймаута для сопоставления Regexp. + +```ruby +Regexp.timeout = 1.0 + +/^a*b?a*()\1$/ =~ "a" * 50000 + "x" +#=> Возникает ошибка Regexp::TimeoutError через одну секунду +``` + +Обратите внимание, что `Regexp.timeout` - это глобальная конфигурация. Если вам нужно использовать разные настройки таймаута для некоторых специальных Regexp, вы можете использовать ключевое слово `timeout` для `Regexp.new`. + +```ruby +Regexp.timeout = 1.0 + +# Это Regexp без таймаута +long_time_re = Regexp.new('^a*b?a*()\1$', timeout: Float::INFINITY) + +long_time_re =~ "a" * 50000 + "x" # никогда не прерывается +``` + +Оригинальное предложение доступно по ссылке: + +## Другие значимые новые функции + +### Не включение сторонних исходников + +* Мы больше не включаем сторонние исходники, такие как `libyaml`, `libffi`. + + * Исходный код libyaml удален из psych. Вам может потребоваться установить `libyaml-dev` для платформ Ubuntu/Debian. Имя пакета отличается на разных платформах. + + * Исходный код bundled libffi также удален из `fiddle`. + +### Язык + +* Анонимные остаточные и ключевые остаточные аргументы теперь могут быть переданы в качестве + аргументов, а не только использоваться в параметрах метода. + [[Feature #18351]] + + ```ruby + def foo(*) + bar(*) + end + def baz(**) + quux(**) + end + ``` + +* Proc, принимающий один позиционный аргумент и ключевые аргументы, больше не автоматически разворачивается. [[Bug #18633]] + + ```ruby + proc{|a, **k| a}.call([1, 2]) + # Ruby 3.1 и ранее + # => 1 + # Ruby 3.2 и позднее + # => [1, 2] + ``` + +* Порядок вычисления присвоения констант для констант, установленных на явных объектах, теперь сделан согласованным с порядком вычисления присвоения одиночных атрибутов. С этим кодом: + + ```ruby + foo::BAR = baz + ``` + + `foo` теперь вызывается перед `baz`. Аналогично, для множественных присваиваний констант, используется порядок вычисления слева направо. С этим кодом: + + ```ruby + foo1::BAR1, foo2::BAR2 = baz1, baz2 + ``` + + Теперь используется следующий порядок вычисления: + + 1. `foo1` + 2. `foo2` + 3. `baz1` + 4. `baz2` + + [[Bug #15928]] + +* Поиск шаблонов больше не является экспериментальным. + [[Feature #18585]] + +* Методы, принимающие остаточный параметр (например, `*args`) и желающие делегировать ключевые + аргументы через `foo(*args)`, теперь должны быть помечены `ruby2_keywords` + (если это еще не сделано). Другими словами, все методы, желающие делегировать + ключевые аргументы через `*args`, теперь должны быть помечены `ruby2_keywords`, + без исключения. Это упростит переход к другим способам делегирования, как только библиотека сможет требовать Ruby 3+. Ранее флаг `ruby2_keywords` + сохранялся, если принимающий метод брал `*args`, но это была ошибка и несогласованность. Хорошей техникой для поиска потенциально отсутствующего `ruby2_keywords` + является запуск тестового набора, где он не проходит, находя последний метод, который должен + получить ключевые аргументы, использовать `puts nil, caller, nil` там и проверить каждый метод/блок + в цепочке вызовов, который должен правильно помечаться как `ruby2_keywords`. [[Bug #18625]] [[Bug #16466]] + + ```ruby + def target(**kw) + end + + # Непреднамеренно работало без ruby2_keywords в Ruby 2.7-3.1, ruby2_keywords + # требуется в 3.2+. Точно так же, как (*args, **kwargs) или (...) будет требоваться + # на обоих #foo и #bar при миграции от ruby2_keywords. + ruby2_keywords def bar(*args) + target(*args) + end + + ruby2_keywords def foo(*args) + bar(*args) + end + + foo(k: 1) + ``` + +## Улучшение производительности + +### YJIT + +* Поддержка arm64 / aarch64 на UNIX-платформах. +* Для сборки YJIT требуется Rust 1.58.1+. [[Feature #18481]] + +## Другие значимые изменения с версии 3.1 + +* Hash + * Hash#shift теперь всегда возвращает nil, если хэш пуст, вместо возвращения значения по умолчанию или вызова дефолтного прок. [[Bug #16908]] + +* MatchData + * Добавлен метод MatchData#byteoffset. [[Feature #13110]] + +* Module + * Добавлен метод Module.used_refinements. [[Feature #14332]] + * Добавлен метод Module#refinements. [[Feature #12737]] + * Добавлен метод Module#const_added. [[Feature #17881]] + +* Proc + * Метод Proc#dup теперь возвращает экземпляр подкласса. [[Bug #17545]] + * Метод Proc#parameters теперь принимает ключевое слово lambda. [[Feature #15357]] + +* Refinement + * Добавлен метод Refinement#refined_class. [[Feature #12737]] + +* RubyVM::AbstractSyntaxTree + * Добавлена опция `error_tolerant` для методов `parse`, `parse_file` и `of`. [[Feature #19013]] + +* Set + * Теперь класс Set доступен как встроенный класс без необходимости `require "set"`. [[Feature #16989]] + В настоящее время он автоматически загружается через константу `Set` или вызов `Enumerable#to_set`. + +* String + * Добавлены методы String#byteindex и String#byterindex. [[Feature #13110]] + * Обновление Unicode до версии 14.0.0 и Emoji до версии 14.0. [[Feature #18037]] + (также относится к Regexp) + * Добавлен метод String#bytesplice. [[Feature #18598]] + +* Struct + * Класс Struct теперь можно инициализировать также с ключевыми аргументами без `keyword_init: true` в `Struct.new`. [[Feature #16806]] + +## Проблемы совместимости + +Примечание: Исключены исправления ошибок функций. + +### Удаленные константы + +Были удалены следующие устаревшие константы. + +* `Fixnum` и `Bignum` [[Feature #12005]] +* `Random::DEFAULT` [[Feature #17351]] +* `Struct::Group` +* `Struct::Passwd` + +### Удаленные методы + +Были удалены следующие устаревшие методы. + +* `Dir.exists?` [[Feature #17391]] +* `File.exists?` [[Feature #17391]] +* `Kernel#=~` [[Feature #15231]] +* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?` + [[Feature #16131]] +* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?` + [[Feature #16131]] + +## Проблемы совместимости стандартной библиотеки + +* `Psych` больше не включает исходные коды libyaml. + Пользователи должны установить библиотеку libyaml сами через систему управления пакетами. [[Feature #18571]] + +## Обновления C API + +### Обновленные C API + +Были обновлены следующие API. + +* Обновление ГПСЧ + Обновлен и версионирован интерфейс `rb_random_interface_t`. + Расширения библиотек, использующие этот интерфейс и созданные для более старых версий, + также требуют определения функции `init_int32`. + +### Удаленные C API + +Были удалены следующие устаревшие API. + +* Переменная `rb_cData`. +* Функции для "taintedness" и "trustedness". [[Feature #16131]] + +### Обновления стандартных библиотек + +* SyntaxSuggest + + * Функция `syntax_suggest`, ранее `dead_end`, теперь интегрирована в Ruby. + [[Feature #18159]] + +* ErrorHighlight + * Теперь указывает на аргумент(ы) TypeError и ArgumentError + +``` +test.rb:2:in `+': nil can't be coerced into Integer (TypeError) + +sum = ary[0] + ary[1] + ^^^^^^ +``` + +* Следующие библиотеки по умолчанию были обновлены. + * RubyGems 3.4.0.dev + * bigdecimal 3.1.2 + * bundler 2.4.0.dev + * cgi 0.3.2 + * date 3.2.3 + * error_highlight 0.4.0 + * etc 1.4.0 + * io-console 0.5.11 + * io-nonblock 0.1.1 + * io-wait 0.3.0.pre + * ipaddr 1.2.4 + * json 2.6.2 + * logger 1.5.1 + * net-http 0.2.2 + * net-protocol 0.1.3 + * ostruct 0.5.5 + * psych 5.0.0.dev + * reline 0.3.1 + * securerandom 0.2.0 + * set 1.0.3 + * stringio 3.0.3 + * syntax_suggest 0.0.1 + * timeout 0.3.0 +* Следующие встроенные библиотеки были обновлены. + * minitest 5.16.3 + * net-imap 0.2.3 + * rbs 2.6.0 + * typeprof 0.21.3 + * debug 1.6.2 +* Следующие библиотеки по умолчанию теперь являются встроенными библиотеками. + +Смотрите [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [журналы коммитов](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}) +для получения более подробной информации. + +С этими изменениями [изменено {{ release.stats.files_changed }} файлов, добавлено {{ release.stats.insertions }} строк(+), удалено {{ release.stats.deletions }} строк(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.1.0! + +## Загрузка + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацумото (Юкихиро Мацумото) в 1993 году, +и сейчас развивается как Open Source. Он работает на множестве платформ +и используется по всему миру, особенно для веб-разработки. + + +[Feature #12005]: https://bugs.ruby-lang.org/issues/12005 +[Feature #12655]: https://bugs.ruby-lang.org/issues/12655 +[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 +[Feature #13110]: https://bugs.ruby-lang.org/issues/13110 +[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 +[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 +[Feature #15357]: https://bugs.ruby-lang.org/issues/15357 +[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 +[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 +[Bug #16466]: https://bugs.ruby-lang.org/issues/16466 +[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 +[Bug #16889]: https://bugs.ruby-lang.org/issues/16889 +[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 +[Feature #16989]: https://bugs.ruby-lang.org/issues/16989 +[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 +[Feature #17391]: https://bugs.ruby-lang.org/issues/17391 +[Bug #17545]: https://bugs.ruby-lang.org/issues/17545 +[Feature #17881]: https://bugs.ruby-lang.org/issues/17881 +[Feature #18037]: https://bugs.ruby-lang.org/issues/18037 +[Feature #18159]: https://bugs.ruby-lang.org/issues/18159 +[Feature #18351]: https://bugs.ruby-lang.org/issues/18351 +[Bug #18487]: https://bugs.ruby-lang.org/issues/18487 +[Feature #18571]: https://bugs.ruby-lang.org/issues/18571 +[Feature #18585]: https://bugs.ruby-lang.org/issues/18585 +[Feature #18598]: https://bugs.ruby-lang.org/issues/18598 +[Bug #18625]: https://bugs.ruby-lang.org/issues/18625 +[Bug #18633]: https://bugs.ruby-lang.org/issues/18633 +[Feature #18685]: https://bugs.ruby-lang.org/issues/18685 +[Bug #18782]: https://bugs.ruby-lang.org/issues/18782 +[Feature #18788]: https://bugs.ruby-lang.org/issues/18788 +[Feature #18809]: https://bugs.ruby-lang.org/issues/18809 +[Feature #18481]: https://bugs.ruby-lang.org/issues/18481 +[Bug #19100]: https://bugs.ruby-lang.org/issues/19100 +[Feature #19013]: https://bugs.ruby-lang.org/issues/19013 diff --git a/ru/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md b/ru/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md new file mode 100644 index 0000000000..50a4fc1de5 --- /dev/null +++ b/ru/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md @@ -0,0 +1,35 @@ +--- +layout: news_post +title: "CVE-2021-33621: HTTP разделение ответов в CGI" +author: "mame" +translator: "suban05" +date: 2022-11-22 02:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии гема cgi 0.3.5, 0.2.2 и 0.1.0.2, в которых исправлена уязвимость HTTP разделения ответов. +Эта уязвимость получила идентификатор CVE [CVE-2021-33621](https://www.cve.org/CVERecord?id=CVE-2021-33621). + +## Детали + +Если приложение, использующее гем cgi для генерации HTTP-ответов с использованием ненадежного пользовательского ввода, злоумышленник может использовать его для внедрения зловредного заголовка и/или тела HTTP-ответа. + +Также содержимое объекта `CGI::Cookie` не проверялось должным образом. Если приложение создает объект `CGI::Cookie` на основе пользовательского ввода, злоумышленник может внедрить недопустимые атрибуты в заголовок `Set-Cookie`. Мы считаем, что такие приложения маловероятны, но мы внесли изменение для предотвращения потенциальных проблем в методе `CGI::Cookie#initialize`. + +Пожалуйста, обновите гем cgi до версий 0.3.5, 0.2.2 или 0.1.0.2 и выше. Вы можете использовать команду `gem update cgi` для обновления. +Если вы используете Bundler, добавьте `gem "cgi", ">= 0.3.5"` в ваш `Gemfile`. + +## Подверженные версии + +* гем cgi версии 0.3.3 и ранее +* гем cgi версии 0.2.1 и ранее +* гем cgi версии 0.1.1, 0.1.0.1 или 0.1.0 + +## Заслуги + +Благодарим [Хироши Токумару](https://hackerone.com/htokumaru?type=user) за обнаружение этой проблемы. + +## История + +* Опубликовано 2022-11-22 02:00:00 (UTC) diff --git a/ru/news/_posts/2022-11-24-ruby-2-7-7-released.md b/ru/news/_posts/2022-11-24-ruby-2-7-7-released.md new file mode 100644 index 0000000000..d2b6d51ac0 --- /dev/null +++ b/ru/news/_posts/2022-11-24-ruby-2-7-7-released.md @@ -0,0 +1,55 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.7.7" +author: "usa" +translator: "suban05" +date: 2022-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.7.7. + +В этом выпуске внесена исправление безопасности. +Пожалуйста, ознакомьтесь с разделами ниже для получения подробностей. + +* [CVE-2021-33621: HTTP разделение ответов в CGI]({%link en/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md %}) + +Этот релиз также включает исправления проблем сборки. Предполагается, что они не повлияют на совместимость с предыдущими версиями. +Дополнительные подробности смотрите в [релизах на GitHub](https://github.com/ruby/ruby/releases/tag/v2_7_7). + +## Загрузка + +{% assign release = site.data.releases | where: "version", "2.7.7" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчеты о проблемах, помогли нам сделать этот релиз. +Благодарим их за вклад. diff --git a/ru/news/_posts/2022-11-24-ruby-3-0-5-released.md b/ru/news/_posts/2022-11-24-ruby-3-0-5-released.md new file mode 100644 index 0000000000..1ad06d80c9 --- /dev/null +++ b/ru/news/_posts/2022-11-24-ruby-3-0-5-released.md @@ -0,0 +1,50 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.0.5" +author: "usa" +translator: "suban05" +date: 2022-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.0.5. + +В этом выпуске внесено исправление безопасности. +Пожалуйста, ознакомьтесь с разделами ниже для получения подробностей. + +* [CVE-2021-33621: HTTP разделение ответов в CGI]({%link en/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md %}) + +Этот релиз также включает исправления ошибок. +Дополнительные подробности смотрите в [релизах на GitHub](https://github.com/ruby/ruby/releases/tag/v3_0_5). + +## Загрузка + +{% assign release = site.data.releases | where: "version", "3.0.5" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчеты о проблемах, помогли нам сделать этот релиз. +Благодарим их за вклад. + +Обслуживание Ruby 3.0, включая этот релиз, основывается на "Соглашении по стабильной версии Ruby" от Ruby Association. diff --git a/ru/news/_posts/2022-11-24-ruby-3-1-3-released.md b/ru/news/_posts/2022-11-24-ruby-3-1-3-released.md new file mode 100644 index 0000000000..abdd21820f --- /dev/null +++ b/ru/news/_posts/2022-11-24-ruby-3-1-3-released.md @@ -0,0 +1,50 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.3" +author: "nagachika" +translator: "suban05" +date: 2022-11-24 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.3. + +В этом выпуске внесено исправление безопасности. +Пожалуйста, ознакомьтесь с разделами ниже для получения подробностей. + +* [CVE-2021-33621: HTTP разделение ответов в CGI]({%link en/news/_posts/2022-11-22-http-response-splitting-in-cgi-cve-2021-33621.md %}) + +Этот релиз также включает исправление ошибки сборки с Xcode 14 и macOS 13 (Ventura). +Дополнительные подробности смотрите в [связанном тикете](https://bugs.ruby-lang.org/issues/18912). + +Дополнительные подробности смотрите в [релизах на GitHub](https://github.com/ruby/ruby/releases/tag/v3_1_3). + +## Загрузка + +{% assign release = site.data.releases | where: "version", "3.1.3" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчеты о проблемах, помогли нам сделать этот релиз. +Благодарим их за вклад. diff --git a/ru/news/_posts/2022-12-06-ruby-3-2-0-rc1-released.md b/ru/news/_posts/2022-12-06-ruby-3-2-0-rc1-released.md new file mode 100644 index 0000000000..7be7962071 --- /dev/null +++ b/ru/news/_posts/2022-12-06-ruby-3-2-0-rc1-released.md @@ -0,0 +1,437 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.0 RC 1" +author: "naruse" +translator: "suban05" +date: 2022-12-06 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.2.0-rc1" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.2 добавляет множество новых функций и улучшений производительности. + +## Поддержка WebAssembly на основе WASI + +Это начальная версия поддержки WebAssembly на основе WASI. Это позволяет бинарному файлу CRuby быть доступным в веб-браузере, серверной среде Serverless Edge и других средах WebAssembly/WASI. В настоящее время этот порт проходит основные и начальные тестовые наборы, не используя API потоков. + +![](https://i.imgur.com/opCgKy2.png) + +### Предыстория + +[WebAssembly (Wasm)](https://webassembly.org/) изначально был представлен для безопасного и быстрого выполнения программ в веб-браузерах. Но его цель - эффективное выполнение программ с безопасностью в различных средах - давно желанна не только для веба, но и для общих приложений. + +[WASI (The WebAssembly System Interface)](https://wasi.dev/) разработан для таких случаев использования. Хотя таким приложениям необходимо взаимодействовать с операционными системами, WebAssembly работает на виртуальной машине, которая не имела системного интерфейса. WASI стандартизирует его. + +Поддержка WebAssembly/WASI в Ruby направлена на использование этих проектов. Это позволяет разработчикам Ruby писать приложения, которые работают на такой обещанной платформе. + +### Пример использования + +Эта поддержка позволяет разработчикам использовать CRuby в среде WebAssembly. Пример использования - поддержка CRuby в [песочнице TryRuby](https://try.ruby-lang.org/playground/). Теперь вы можете попробовать оригинальный CRuby в своем веб-браузере. + +### Технические аспекты + +Сегодняшние WASI и WebAssembly сами по себе имеют некоторые недостающие функции для реализации Fiber, исключений и GC, поскольку они все еще развиваются, а также по соображениям безопасности. Поэтому CRuby заполняет этот пробел, используя Asyncify, что является техникой бинарной трансформации для управления выполнением в пользовательской области. + +Кроме того, мы создали [виртуальную файловую систему поверх WASI](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby), чтобы мы могли легко упаковать Ruby-приложения в один .wasm файл. Это немного упрощает распространение Ruby-приложений. + +### Связанные ссылки + +* [Добавление поддержки WebAssembly на основе WASI #5407](https://github.com/ruby/ruby/pull/5407) +* [Обновление о поддержке WebAssembly/WASI в Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9) + +## Улучшения Regexp против ReDoS + +Известно, что сопоставление регулярных выражений (Regexp) может занимать неожиданно долгое время. Если ваш код пытается выполнить сопоставление с возможно неэффективным регулярным выражением по ненадежному вводу, злоумышленник может использовать это для проведения эффективной атаки отказа в обслуживании (DoS, Denial of Service), так называемой атаки ReDoS (Regular expression DoS). + +Мы внедрили два улучшения, которые значительно снижают уязвимость к ReDoS. + +### Улучшенный алгоритм сопоставления Regexp + +С момента Ruby 3.2 алгоритм сопоставления регулярных выражений был существенно улучшен благодаря использованию техники мемоизации. + +``` +# Это сопоставление занимает 10 сек. в Ruby 3.1 и 0.003 сек. в Ruby 3.2 + +/^a*b?a*$/ =~ "a" * 50000 + "x" +``` + +![](https://cache.ruby-lang.org/pub/media/ruby320_regex_1.png) +![](https://cache.ruby-lang.org/pub/media/ruby320_regex_2.png) + +Улучшенный алгоритм сопоставления позволяет выполнить большинство операций сопоставления регулярных выражений (примерно 90% в наших экспериментах) за линейное время. + +(Для пользователей предварительной версии: эта оптимизация может потреблять память, пропорциональную длине ввода для каждого сопоставления. Мы не ожидаем практических проблем, потому что выделение этой памяти обычно задерживается, и обычное сопоставление регулярных выражений должно потреблять в памяти максимум в 10 раз больше, чем длина ввода. Если у вас возникли проблемы с памятью при выполнении сопоставления регулярных выражений в реальном приложении, пожалуйста, сообщите об этом.) + +Оригинальное предложение доступно по ссылке: https://bugs.ruby-lang.org/issues/19104 + +### Тайм-аут для регулярных выражений + +Вышеуказанная оптимизация не может быть применена к некоторым видам регулярных выражений, таким как те, которые включают сложные функции (например, обратные ссылки или look-around) или с огромным фиксированным числом повторений. В качестве запасного варианта введена функция тайм-аута для сопоставления регулярных выражений. + +```ruby +Regexp.timeout = 1.0 + +/^a*b?a*()\1$/ =~ "a" * 50000 + "x" +#=> В течение одной секунды будет вызвано исключение Regexp::TimeoutError +``` + +Обратите внимание, что `Regexp.timeout` является глобальной настройкой. Если вам нужно использовать различные настройки тайм-аута для некоторых специальных регулярных выражений, вы можете использовать ключевое слово `timeout` для `Regexp.new`. + +```ruby +Regexp.timeout = 1.0 + +# Это регулярное выражение не имеет тайм-аута +long_time_re = Regexp.new('^a*b?a*()\1$', timeout: Float::INFINITY) + +long_time_re =~ "a" * 50000 + "x" # не прерывается +``` + +Оригинальное предложение доступно по ссылке: https://bugs.ruby-lang.org/issues/17837 + +## Язык + +* Анонимные и ключевые остаточные аргументы теперь могут передаваться как аргументы, а не только использоваться в параметрах метода. + [[Feature #18351]] + + ```ruby + def foo(*) + bar(*) + end + def baz(**) + quux(**) + end + ``` + +* Процедура, принимающая один позиционный аргумент и ключевые аргументы, теперь больше не распаковывает автоматически. [[Bug #18633]] + + ```ruby + proc{|a, **k| a}.call([1, 2]) + # Ruby 3.1 и ранее + # => 1 + # Ruby 3.2 и позже + # => [1, 2] + ``` + +* Порядок вычисления присвоения констант теперь сделан согласованным для констант, установленных на явных объектах, с порядком вычисления присвоения одиночного атрибута. В данном коде: + + ```ruby + foo::BAR = baz + ``` + + `foo` теперь вызывается до `baz`. Аналогично, для множественных присваиваний констант, используется порядок вычисления слева направо. Вот как это выглядит: + + ```ruby + foo1::BAR1, foo2::BAR2 = baz1, baz2 + ``` + + Теперь используется следующий порядок вычисления: + + 1. `foo1` + 2. `foo2` + 3. `baz1` + 4. `baz2` + + [[Bug #15928]] + +* Шаблон поиска больше не является экспериментальным. [[Feature #18585]] + +* Методы, принимающие остаточный параметр (например, `*args`) и желающие делегировать ключевые аргументы через `foo(*args)`, теперь должны быть отмечены как `ruby2_keywords` (если это еще не сделано). Другими словами, все методы, желающие делегировать ключевые аргументы через `*args`, теперь должны быть отмечены как `ruby2_keywords`, без исключений. Это упростит переход к другим методам делегирования, которые могут потребовать Ruby 3+. Ранее флаг `ruby2_keywords` сохранялся, если метод-получатель принимал `*args`, но это была ошибка и несогласованность. Хорошей техникой для обнаружения потенциально отсутствующих `ruby2_keywords` является запуск тестового набора, поиск последнего метода, который должен принимать ключевые аргументы для каждого места, где тестовый набор не проходит, и использование `puts nil, caller, nil` там. Затем проверьте, правильно ли помечены все методы/блоки на цепочке вызовов, которые должны делегировать ключевые аргументы, как `ruby2_keywords`. + [[Bug #18625]] [[Bug #16466]] + + ```ruby + def target(**kw) + end + + # Непреднамеренно работал без ruby2_keywords в Ruby 2.7-3.1, ruby2_keywords + # требуется в 3.2+. Точно так же, как (*args, **kwargs) или (...) потребуется на + # обоих #foo и #bar при миграции с ruby2_keywords. + ruby2_keywords def bar(*args) + target(*args) + end + + ruby2_keywords def foo(*args) + bar(*args) + end + + foo(k: 1) + ``` + +## Улучшения производительности + +### YJIT + +* YJIT теперь поддерживает процессоры x86-64 и arm64/aarch64 на Linux, MacOS, BSD и других UNIX-платформах. + * Этот релиз включает поддержку процессоров Mac M1/M2, AWS Graviton и Raspberry Pi 4 ARM64. +* Для сборки YJIT требуется Rust 1.58.0+. [[Feature #18481]] + * Чтобы убедиться, что CRuby собран с YJIT, установите rustc >= 1.58.0 и + запустите `./configure` с `--enable-yjit`. + * Если у вас возникли проблемы, обратитесь к команде YJIT. +* Физическая память для JIT-кода выделяется лениво. В отличие от Ruby 3.1, + RSS процесса Ruby минимизирован, потому что виртуальные страницы памяти, выделенные параметром `--yjit-exec-mem-size`, не будут отображены в физические страницы памяти, пока они действительно не будут использованы JIT-кодом. +* Введена очистка кода, которая освобождает все страницы кода, когда потребление памяти JIT-кодом достигает `--yjit-exec-mem-size`. + * `RubyVM::YJIT.runtime_stats` возвращает метрики очистки кода в дополнение к существующим ключам `inline_code_size` и `outlined_code_size`: + `code_gc_count`, `live_page_count`, `freed_page_count` и `freed_code_size`. +* Большинство статистических данных, производимых `RubyVM::YJIT.runtime_stats`, теперь доступны в выпускаемых сборках. + * Просто запустите Ruby с `--yjit-stats`, чтобы вычислить статистику (это вызывает некоторые накладные расходы во время выполнения). +* YJIT теперь оптимизирован для использования форм объектов. [[Feature #18776]] +* Используется более тонкая инвалидация констант для инвалидации меньшего количества кода при определении новых констант. [[Feature #18589]] + +### MJIT + +* Компилятор MJIT реализован заново в Ruby в виде стандартной библиотеки `mjit`. +* Компилятор MJIT выполняется в процессе Ruby после форка вместо выполнения в нативном потоке, названном MJIT worker. [[Feature #18968]] + * В результате Microsoft Visual Studio (MSWIN) больше не поддерживается. +* MinGW больше не поддерживается. [[Feature #18824]] +* Переименован параметр `--mjit-min-calls` в `--mjit-call-threshold`. +* Изменено значение по умолчанию для `--mjit-max-cache` с 10000 на 100. + +### PubGrub + +* Версия Bundler 2.4 теперь использует [PubGrub](https://github.com/jhawthorn/pub_grub) вместо [Molinillo](https://github.com/CocoaPods/Molinillo). + + * PubGrub - алгоритм следующего поколения, используемый менеджером пакетов `pub` для языка Dart. + * После этого изменения возможно изменение результатов разрешения зависимостей. Пожалуйста, сообщайте о таких случаях в [RubyGems/Bundler issues](https://github.com/rubygems/rubygems/issues). + +* В Ruby 3.2 RubyGems по-прежнему использует Molinillo в качестве резольвера. Мы планируем заменить его на PubGrub в будущем. + +## Другие значимые изменения с версии 3.1 + +* Hash + * Hash#shift теперь всегда возвращает nil, если хеш пуст, вместо возврата значения по умолчанию или вызова default proc. [[Bug #16908]] + +* MatchData + * Добавлен метод MatchData#byteoffset. [[Feature #13110]] + +* Module + * Добавлен метод Module.used_refinements. [[Feature #14332]] + * Добавлен метод Module#refinements. [[Feature #12737]] + * Добавлен метод Module#const_added. [[Feature #17881]] + +* Proc + * Метод Proc#dup теперь возвращает экземпляр подкласса. [[Bug #17545]] + * Теперь метод Proc#parameters поддерживает ключевое слово lambda. [[Feature #15357]] + +* Refinement + * Добавлен метод Refinement#refined_class. [[Feature #12737]] + +* RubyVM::AbstractSyntaxTree + * Добавлена опция `error_tolerant` для методов `parse`, `parse_file` и `of`. [[Feature #19013]] + +* Set + * Set теперь доступен как встроенный класс без необходимости в `require "set"`. [[Feature #16989]] + В настоящее время он автоматически загружается через константу `Set` или вызов `Enumerable#to_set`. + +* String + * Добавлены методы String#byteindex и String#byterindex. [[Feature #13110]] + * Обновлен Unicode до версии 15.0.0 и Emoji до версии 15.0. [[Feature #18639]] + (также применяется к Regexp) + * Добавлен метод String#bytesplice. [[Feature #18598]] + +* Struct + * Класс Struct теперь можно инициализировать с использованием ключевых аргументов без `keyword_init: true` в `Struct.new`. [[Feature #16806]] + +## Проблемы совместимости + +Примечание: исключая исправления ошибок функциональности. + +### Удалённые константы + +Следующие устаревшие константы удалены. + +* `Fixnum` и `Bignum` [[Feature #12005]] +* `Random::DEFAULT` [[Feature #17351]] +* `Struct::Group` +* `Struct::Passwd` + +### Удалённые методы + +Следующие устаревшие методы удалены. + +* `Dir.exists?` [[Feature #17391]] +* `File.exists?` [[Feature #17391]] +* `Kernel#=~` [[Feature #15231]] +* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?` + [[Feature #16131]] +* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?` + [[Feature #16131]] + +## Проблемы совместимости стандартной библиотеки + +### Больше не включены сторонние источники + +Мы больше не включаем сторонние исходники, такие как `libyaml`, `libffi`. + +* Исходный код libyaml удалён из psych. Вам может потребоваться установить `libyaml-dev` на платформе Ubuntu/Debian. Наименование пакета может отличаться для каждой платформы. +* Исходный код libffi также удалён из fiddle. + +Псих и фиддл поддерживают статические сборки с конкретными версиями исходников libyaml и libffi. Вы можете собрать psych с libyaml-0.2.5 следующим образом: + +```bash +$ ./configure --with-libyaml-source-dir=/path/to/libyaml-0.2.5 +``` + +И вы можете собрать fiddle с libffi-3.4.4 таким образом: + +```bash +$ ./configure --with-libffi-source-dir=/path/to/libffi-3.4.4 +``` + + [[Feature #18571]] + +## Обновления C API + +### Обновлённые C API + +Следующие API были обновлены. + +* Обновление ГПСЧ + `rb_random_interface_t` был обновлён и пронумерован. + Расширения библиотек, использующих этот интерфейс и созданные для старых версий, должны быть обновлены. + Также необходимо определить функцию `init_int32`. + +### Удалённые C API + +Следующие устаревшие API были удалены. + +* Переменная `rb_cData`. +* Функции "тaintedness" и "trustedness". [[Feature #16131]] + +### Обновления стандартной библиотеки + +* Были обновлены следующие встроенные гемы по умолчанию. + * RubyGems 3.4.0.dev + * benchmark 0.2.1 + * bigdecimal 3.1.3 + * bundler 2.4.0.dev + * cgi 0.3.6 + * date 3.3.0 + * delegate 0.3.0 + * did_you_mean 1.6.2 + * digest 3.1.1 + * drb 2.1.1 + * erb 4.0.2 + * error_highlight 0.5.1 + * etc 1.4.1 + * fcntl 1.0.2 + * fiddle 1.1.1 + * fileutils 1.7.0 + * forwardable 1.3.3 + * getoptlong 0.2.0 + * io-console 0.5.11 + * io-nonblock 0.2.0 + * io-wait 0.3.0.pre + * ipaddr 1.2.5 + * irb 1.5.1 + * json 2.6.2 + * logger 1.5.2 + * mutex_m 0.1.2 + * net-http 0.3.1 + * net-protocol 0.2.0 + * nkf 0.1.2 + * open-uri 0.3.0 + * openssl 3.1.0.pre + * optparse 0.3.0 + * ostruct 0.5.5 + * pathname 0.2.1 + * pp 0.4.0 + * pstore 0.1.2 + * psych 5.0.0 + * racc 1.6.1 + * rdoc 6.5.0 + * reline 0.3.1 + * resolv 0.2.2 + * securerandom 0.2.1 + * set 1.0.3 + * stringio 3.0.3 + * syntax_suggest 1.0.1 + * timeout 0.3.1 + * tmpdir 0.1.3 + * tsort 0.1.1 + * un 0.2.1 + * uri 0.12.0 + * win32ole 1.8.9 + * zlib 3.0.0 +* Были обновлены следующие включённые гемы. + * minitest 5.16.3 + * power_assert 2.0.2 + * test-unit 3.5.5 + * net-ftp 0.2.0 + * net-imap 0.3.1 + * net-pop 0.1.2 + * net-smtp 0.3.3 + * rbs 2.8.1 + * typeprof 0.21.3 + * debug 1.7.0 + +Для получения дополнительной информации ознакомьтесь с [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логами коммитов](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}) +с момента Ruby 3.1.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацумото (Юкихиро Мацумото) в 1993 году, +и сейчас развивается как Open Source. Он работает на множестве платформ +и используется по всему миру, особенно в веб-разработке. + + + +[Feature #12005]: https://bugs.ruby-lang.org/issues/12005 +[Feature #12655]: https://bugs.ruby-lang.org/issues/12655 +[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 +[Feature #13110]: https://bugs.ruby-lang.org/issues/13110 +[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 +[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 +[Feature #15357]: https://bugs.ruby-lang.org/issues/15357 +[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 +[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 +[Bug #16466]: https://bugs.ruby-lang.org/issues/16466 +[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 +[Bug #16889]: https://bugs.ruby-lang.org/issues/16889 +[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 +[Feature #16989]: https://bugs.ruby-lang.org/issues/16989 +[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 +[Feature #17391]: https://bugs.ruby-lang.org/issues/17391 +[Bug #17545]: https://bugs.ruby-lang.org/issues/17545 +[Feature #17881]: https://bugs.ruby-lang.org/issues/17881 +[Feature #18639]: https://bugs.ruby-lang.org/issues/18639 +[Feature #18159]: https://bugs.ruby-lang.org/issues/18159 +[Feature #18351]: https://bugs.ruby-lang.org/issues/18351 +[Feature #18481]: https://bugs.ruby-lang.org/issues/18481 +[Bug #18487]: https://bugs.ruby-lang.org/issues/18487 +[Feature #18571]: https://bugs.ruby-lang.org/issues/18571 +[Feature #18585]: https://bugs.ruby-lang.org/issues/18585 +[Feature #18589]: https://bugs.ruby-lang.org/issues/18589 +[Feature #18598]: https://bugs.ruby-lang.org/issues/18598 +[Bug #18625]: https://bugs.ruby-lang.org/issues/18625 +[Bug #18633]: https://bugs.ruby-lang.org/issues/18633 +[Feature #18685]: https://bugs.ruby-lang.org/issues/18685 +[Feature #18776]: https://bugs.ruby-lang.org/issues/18776 +[Bug #18782]: https://bugs.ruby-lang.org/issues/18782 +[Feature #18788]: https://bugs.ruby-lang.org/issues/18788 +[Feature #18809]: https://bugs.ruby-lang.org/issues/18809 +[Bug #19100]: https://bugs.ruby-lang.org/issues/19100 +[Bug #19013]: https://bugs.ruby-lang.org/issues/19013 diff --git a/ru/news/_posts/2022-12-25-ruby-3-2-0-released.md b/ru/news/_posts/2022-12-25-ruby-3-2-0-released.md new file mode 100644 index 0000000000..bc59455be6 --- /dev/null +++ b/ru/news/_posts/2022-12-25-ruby-3-2-0-released.md @@ -0,0 +1,640 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.0" +author: "naruse" +translator: "suban05" +date: 2022-12-25 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.2.0-rc1" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.2 добавляет множество новых функций и улучшений производительности. + +## Поддержка WebAssembly на основе WASI + +Это начальная версия поддержки WebAssembly на основе WASI. Это позволяет бинарному файлу CRuby быть доступным в веб-браузере, серверной среде Serverless Edge и других средах WebAssembly/WASI. В настоящее время этот порт проходит основные и начальные тестовые наборы, не используя API потоков. + +![](https://i.imgur.com/opCgKy2.png) + +### Предыстория + +[WebAssembly (Wasm)](https://webassembly.org/) изначально был представлен для безопасного и быстрого выполнения программ в веб-браузерах. Но его цель - эффективное выполнение программ с безопасностью в различных средах - давно желанна не только для веба, но и для общих приложений. + +[WASI (The WebAssembly System Interface)](https://wasi.dev/) разработан для таких случаев использования. Хотя таким приложениям необходимо взаимодействовать с операционными системами, WebAssembly работает на виртуальной машине, которая не имела системного интерфейса. WASI стандартизирует его. + +Поддержка WebAssembly/WASI в Ruby направлена на использование этих проектов. Это позволяет разработчикам Ruby писать приложения, которые работают на такой обещанной платформе. + +### Пример использования + +Эта поддержка позволяет разработчикам использовать CRuby в среде WebAssembly. Пример использования - поддержка CRuby в [песочнице TryRuby](https://try.ruby-lang.org/playground/). Теперь вы можете попробовать оригинальный CRuby в своем веб-браузере. + +### Технические аспекты + +Сегодняшние WASI и WebAssembly сами по себе имеют некоторые недостающие функции для реализации Fiber, исключений и GC, поскольку они все еще развиваются, а также по соображениям безопасности. Поэтому CRuby заполняет этот пробел, используя Asyncify, что является техникой бинарной трансформации для управления выполнением в пользовательской области. + +Кроме того, мы создали [виртуальную файловую систему поверх WASI](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby), чтобы мы могли легко упаковать Ruby-приложения в один .wasm файл. Это немного упрощает распространение Ruby-приложений. + +### Связанные ссылки + +* [Добавление поддержки WebAssembly на основе WASI #5407](https://github.com/ruby/ruby/pull/5407) +* [Обновление о поддержке WebAssembly/WASI в Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9) + +## Готовность к использованию в продакшене YJIT + +![](https://i.imgur.com/X9ulfac.png) + +* YJIT больше не является экспериментальным + * Был протестирован на продакшен нагрузках более года и показал себя достаточно стабильным. +* YJIT теперь поддерживает процессоры x86-64 и arm64/aarch64 на Linux, MacOS, BSD и других UNIX платформах. + * В этом выпуске добавлена поддержка для Apple M1/M2, AWS Graviton, Raspberry Pi 4 и других. +* Для сборки YJIT теперь требуется Rust 1.58.0+. [[Feature #18481]] + * Чтобы убедиться, что CRuby собирается с YJIT, установите `rustc` >= 1.58.0 + перед запуском скрипта `./configure`. + * Если у вас возникнут проблемы, обратитесь к команде YJIT. +* Версия YJIT 3.2 работает быстрее, чем 3.1, и имеет примерно треть от того же объема памяти. + * В целом YJIT на 41% быстрее (геометрическое среднее) интерпретатора Ruby на [yjit-bench](https://github.com/Shopify/yjit-bench). + * Физическая память для JIT-кода выделяется лениво. В отличие от Ruby 3.1, + RSS процесса Ruby минимизирован, потому что виртуальные страницы памяти, + выделенные параметром `--yjit-exec-mem-size`, не будут сопоставлены с физическими страницами памяти, + пока они не будут использованы JIT-кодом. + * Введена Code GC, которая освобождает все страницы кода, когда потребление памяти JIT-кодом достигает `--yjit-exec-mem-size`. + * `RubyVM::YJIT.runtime_stats` возвращает метрики Code GC, в дополнение к существующим ключам `inline_code_size` и `outlined_code_size`: + `code_gc_count`, `live_page_count`, `freed_page_count` и `freed_code_size`. +* Большинство статистических данных, создаваемых `RubyVM::YJIT.runtime_stats`, теперь доступны в релизных сборках. + * Просто запустите ruby с флагом `--yjit-stats` для вычисления и вывода статистики (сопровождается некоторыми накладными расходами во время выполнения). +* YJIT теперь оптимизирован для использования форм объектов. [[Feature #18776]] +* Используйте более мелкозернистую инвалидацию констант для инвалидации меньшего количества кода при определении новых констант. [[Feature #18589]] +* По умолчанию `--yjit-exec-mem-size` изменен на 64 (MiB). +* По умолчанию `--yjit-call-threshold` изменен на 30. + +## Улучшения Regexp против атак ReDoS + +Известно, что сопоставление Regexp может занимать неожиданно много времени. Если ваш код пытается выполнить сопоставление возможно неэффективного Regexp с ненадежным вводом, злоумышленник может использовать это для эффективного отказа в обслуживании (так называемая регулярная эксплуатация DoS, или ReDoS). + +Мы внесли два улучшения, которые значительно снижают угрозу ReDoS. + +### Улучшенный алгоритм сопоставления Regexp + +С момента Ruby 3.2 алгоритм сопоставления Regexp значительно улучшен за счет использования техники мемоизации. + +``` +# Это сопоставление занимает 10 сек. в Ruby 3.1 и 0.003 сек. в Ruby 3.2 + +/^a*b?a*$/ =~ "a" * 50000 + "x" +``` + +![](https://cache.ruby-lang.org/pub/media/ruby320_regex_1.png) +![](https://cache.ruby-lang.org/pub/media/ruby320_regex_2.png) + +Улучшенный алгоритм сопоставления позволяет выполнять большинство сопоставлений Regexp (примерно 90% в наших экспериментах) за линейное время. + +Эта оптимизация может потреблять память, пропорциональную длине ввода для каждого сопоставления. Мы ожидаем, что практических проблем не возникнет, потому что выделение этой памяти обычно задерживается, и обычное сопоставление Regexp не должно потреблять более чем в 10 раз больше памяти, чем длина ввода. Если у вас возникают проблемы с памятью при сопоставлении Regexp в реальном приложении, пожалуйста, сообщите об этом. + +Оригинальное предложение находится по адресу + +### Таймаут Regexp + +Оптимизация выше не может быть применена к некоторым типам регулярных выражений, таким как те, которые включают сложные функции (например, обратные ссылки или просмотр вперед), или с огромным фиксированным количеством повторений. В качестве запасной меры введена функция тайм-аута для сопоставления Regexp. + +```ruby +Regexp.timeout = 1.0 + +/^a*b?a*()\1$/ =~ "a" * 50000 + "x" +#=> Возникнет исключение Regexp::TimeoutError через одну секунду +``` + +Обратите внимание, что `Regexp.timeout` является глобальной конфигурацией. Если вам нужно использовать разные настройки таймаута для некоторых специальных Regexp, вы можете использовать ключевое слово `timeout` для `Regexp.new`. + +```ruby +Regexp.timeout = 1.0 + +# Это Regexp без таймаута +long_time_re = Regexp.new('^a*b?a*()\1$', timeout: Float::INFINITY) + +long_time_re =~ "a" * 50000 + "x" # никогда не прерывается +``` + +Оригинальное предложение находится по адресу . + +## Другие значимые нововведения + +### SyntaxSuggest + +* Функция `syntax_suggest` (ранее `dead_end`) теперь интегрирована в Ruby. Это помогает вам быстрее находить ошибки, такие как отсутствующие или лишние `end`, как в следующем примере: + + ``` + Не совпадает `end', отсутствует ключевое слово (`do`, `def`, `if` и т. д.) ? + + 1 class Dog + > 2 defbark + > 3 end + 4 end + ``` + + [[Feature #18159]] + +### ErrorHighlight + +* Теперь указываются соответствующие аргументы для TypeError и ArgumentError + +``` +test.rb:2:in `+': nil can't be coerced into Integer (TypeError) + +sum = ary[0] + ary[1] + ^^^^^^ +``` + +### Язык + +* Теперь анонимные остаточные и ключевые остаточные аргументы могут передаваться как аргументы, а не только использоваться в параметрах метода. + [[Feature #18351]] + + ```ruby + def foo(*) + bar(*) + end + def baz(**) + quux(**) + end + ``` + +* Процедура, принимающая один позиционный аргумент и ключи, больше не будет автоматически распаковывать. [[Bug #18633]] + + ```ruby + proc{|a, **k| a}.call([1, 2]) + # Ruby 3.1 и ранее + # => 1 + # Ruby 3.2 и позже + # => [1, 2] + ``` + +* Порядок вычисления присваивания констант для констант, установленных на явных объектах, теперь согласован с порядком вычисления присваивания одиночного атрибута. В этом коде: + + ```ruby + foo::BAR = baz + ``` + + `foo` вызывается перед `baz`. Аналогично, для множественных присваиваний констант используется порядок вычисления слева направо. В этом коде: + + ```ruby + foo1::BAR1, foo2::BAR2 = baz1, baz2 + ``` + + Используется следующий порядок вычисления: + + 1. `foo1` + 2. `foo2` + 3. `baz1` + 4. `baz2` + + [[Bug #15928]] + +* Поиск шаблона больше не является экспериментальным. [[Feature #18585]] + +* Методы, принимающие параметр остаточные параметры (например, `*args`) и желающие делегировать ключевые аргументы через `foo(*args)`, теперь должны быть отмечены `ruby2_keywords` (если это еще не сделано). Другими словами, все методы, желающие делегировать ключевые аргументы через `*args`, теперь должны быть отмечены `ruby2_keywords`, без исключений. Это упростит переход к другим способам делегирования после того, как библиотека сможет требовать Ruby 3+. Ранее флаг `ruby2_keywords` оставался, если метод, принимающий `*args`, делегировал ключевые аргументы, но это была ошибка и несогласованность. Хорошей техникой для обнаружения потенциально отсутствующих `ruby2_keywords` является запуск набора тестов, поиск последнего метода, который должен принимать ключевые аргументы для каждого места, где тестовый набор не проходит, и использование `puts nil, caller, nil` здесь. Затем проверьте, что каждый метод/блок в цепочке вызовов правильно помечен `ruby2_keywords`. [[Bug #18625]] [[Bug #16466]] + + ```ruby + def target(**kw) + end + + # Неожиданно работало без ruby2_keywords в Ruby 2.7-3.1, требуется ruby2_keywords + # в 3.2+. Точно так же, как (*args, **kwargs) или (...) потребуется как на #foo, так и на #bar + # при миграции от ruby2_keywords. + ruby2_keywords def bar(*args) + target(*args) + end + + ruby2_keywords def foo(*args) + bar(*args) + end + + foo(k: 1) + ``` + +## Улучшения производительности + +### MJIT + +* Компилятор MJIT теперь переопределен на Ruby как `ruby_vm/mjit/compiler`. +* Компилятор MJIT выполняется в процессе, созданном с помощью fork, вместо того чтобы выполняться в нативном потоке, называемом MJIT worker. [[Feature #18968]] + * В результате, Microsoft Visual Studio (MSWIN) больше не поддерживается. +* MinGW больше не поддерживается. [[Feature #18824]] +* Переименовано `--mjit-min-calls` в `--mjit-call-threshold`. +* Изменено значение по умолчанию `--mjit-max-cache` с 10000 на 100. + +### PubGrub + +* Bundler 2.4 теперь использует решатель [PubGrub](https://github.com/jhawthorn/pub_grub) вместо [Molinillo](https://github.com/CocoaPods/Molinillo). + + * PubGrub - это алгоритм следующего поколения, используемый менеджером пакетов `pub` для языка программирования Dart. + * После этого изменения вы можете получить различный результат разрешения. Пожалуйста, сообщайте о таких случаях в [RubyGems/Bundler issues](https://github.com/rubygems/rubygems/issues). + +* В Ruby 3.2 RubyGems по-прежнему использует решатель Molinillo. Мы планируем заменить его на PubGrub в будущем. + +## Другие значимые изменения с момента версии 3.1 + +* Data + * Новый встроенный класс для представления простых неизменяемых значений. Класс похож на Struct и частично использует его реализацию, но имеет более лаконичный и строгий API. [[Feature #16122]] + + ```ruby + Measure = Data.define(:amount, :unit) + distance = Measure.new(100, 'km') #=> # + weight = Measure.new(amount: 50, unit: 'kg') #=> # + weight.with(amount: 40) #=> # + weight.amount #=> 50 + weight.amount = 40 #=> NoMethodError: undefined method `amount=' + ``` + +* Hash + * `Hash#shift` теперь всегда возвращает nil, если хэш пуст, вместо того чтобы возвращать значение по умолчанию или вызывать блок по умолчанию. [[Bug #16908]] + +* MatchData + * Добавлен метод `MatchData#byteoffset`. [[Feature #13110]] + +* Module + * Добавлен метод `Module.used_refinements`. [[Feature #14332]] + * Добавлен метод `Module#refinements`. [[Feature #12737]] + * Добавлен метод `Module#const_added`. [[Feature #17881]] + +* Proc + * `Proc#dup` теперь возвращает экземпляр подкласса. [[Bug #17545]] + * `Proc#parameters` теперь принимает ключевое слово lambda. [[Feature #15357]] + +* Refinement + * Добавлен метод `Refinement#refined_class`. [[Feature #12737]] + +* RubyVM::AbstractSyntaxTree + * Добавлена опция `error_tolerant` для методов `parse`, `parse_file` и `of`. [[Feature #19013]] + С этой опцией: + 1. SyntaxError подавляется. + 2. Для недопустимого ввода возвращается AST. + 3. `end` дополняется, когда парсер достигает конца ввода, но `end` недостаточно. + 4. `end` рассматривается как ключевое слово на основе отступа. + + ```ruby + # Без опции error_tolerant + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY) + def m + a = 10 + if + end + RUBY + # => :33:in `parse': syntax error, unexpected `end' (SyntaxError) + + # С опцией error_tolerant + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) + def m + a = 10 + if + end + RUBY + p root # => # + + # `end` рассматривается как ключевое слово на основе отступа + root = RubyVM::AbstractSyntaxTree.parse(<<~RUBY, error_tolerant: true) + module Z + class Foo + foo. + end + + def bar + end + end + RUBY + p root.children[-1].children[-1].children[-1].children[-2..-1] + # => [#, #] + ``` + + * Добавлена опция `keep_tokens` для методов `parse`, `parse_file` и `of`. [[Feature #19070]] + + ```ruby + root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true) + root.tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...] + root.tokens.map{_1[2]}.join # => "x = 1 + 2" + ``` + +* Set + * Set теперь доступен как встроенный класс без необходимости `require "set"`. [[Feature #16989]] + В настоящее время он автоматически загружается через константу `Set` или вызов `Enumerable#to_set`. + +* String + * Добавлены методы `String#byteindex` и `String#byterindex`. [[Feature #13110]] + * Обновление Unicode до версии 15.0.0 и Emoji до версии 15.0. [[Feature #18639]] + (также применяется к Regexp) + * Добавлен метод `String#bytesplice`. [[Feature #18598]] + +* Struct + * Класс Struct теперь может быть инициализирован также с ключевыми аргументами без `keyword_init: true` при `Struct.new`. [[Feature #16806]] + + ```ruby + Post = Struct.new(:id, :name) + Post.new(1, "hello") #=> # + # С Ruby 3.2, следующий код также работает без keyword_init: true. + Post.new(id: 1, name: "hello") #=> # + ``` + +## Проблемы совместимости + +Примечание: Исключены исправления ошибок функциональности. + +### Удаленные константы + +Следующие устаревшие константы были удалены. + +* `Fixnum` и `Bignum` [[Feature #12005]] +* `Random::DEFAULT` [[Feature #17351]] +* `Struct::Group` +* `Struct::Passwd` + +### Удаленные методы + +Следующие устаревшие методы были удалены. + +* `Dir.exists?` [[Feature #17391]] +* `File.exists?` [[Feature #17391]] +* `Kernel#=~` [[Feature #15231]] +* `Kernel#taint`, `Kernel#untaint`, `Kernel#tainted?` + [[Feature #16131]] +* `Kernel#trust`, `Kernel#untrust`, `Kernel#untrusted?` + [[Feature #16131]] + +## Проблемы совместимости в стандартной библиотеке + +### Больше не включаем сторонние исходники + +* Мы больше не включаем сторонние исходники, такие как `libyaml`, `libffi`. + + * Исходный код libyaml был удален из psych. Вам может потребоваться установить `libyaml-dev` на платформе Ubuntu/Debian. Название пакета отличается для каждой платформы. + + * Исходный код bundled libffi также удален из `fiddle`. + +* Psych и fiddle поддерживают статические сборки с определенными версиями исходников libyaml и libffi. Вы можете собрать psych с libyaml-0.2.5 следующим образом: + + ```bash + $ ./configure --with-libyaml-source-dir=/path/to/libyaml-0.2.5 + ``` + + И вы можете собрать fiddle с libffi-3.4.4 так: + + ```bash + $ ./configure --with-libffi-source-dir=/path/to/libffi-3.4.4 + ``` + + [[Feature #18571]] + +## Обновления C API + +### Обновленные C API + +Следующие API были обновлены. + +* Обновление PRNG + * Обновлен и версионирован `rb_random_interface_t`. + Расширения библиотек, использующие этот интерфейс и собранные для старых версий, также требуют определения функции `init_int32`. + +### Удаленные C API + +Следующие устаревшие API были удалены. + +* Переменная `rb_cData`. +* Функции "taintedness" и "trustedness". [[Feature #16131]] + +### Обновления стандартной библиотеки + +* Bundler + + * Добавлена поддержка --ext=rust для команды bundle gem для создания простых гемов с расширениями Rust. + [[GH-rubygems-6149]] + * Ускорена клонирование git-репозиториев. [[GH-rubygems-4475]] + +* RubyGems + + * Добавлена поддержка mswin для сборщика cargo. [[GH-rubygems-6167]] + +* ERB + + * `ERB::Util.html_escape` теперь работает быстрее, чем `CGI.escapeHTML`. + * Больше не выделяет объект String, когда символы не требуют экранирования. + * Пропускает вызов метода `#to_s`, если аргумент уже является строкой. + * Добавлен псевдоним `ERB::Escape.html_escape` для `ERB::Util.html_escape`, который не подвергается monkey-patching'у от Rails. + +* IRB + + * Добавлены интеграционные команды для debug.gem: `debug`, `break`, `catch`, + `next`, `delete`, `step`, `continue`, `finish`, `backtrace`, `info` + * Они работают даже без `gem "debug"` в Gemfile. + * См. также: [Что нового в IRB Ruby 3.2?](https://st0012.dev/whats-new-in-ruby-3-2-irb) + * Добавлены команды и функции, похожие на Pry. + * Добавлены `edit` и `show_cmds` (аналог `help` в Pry). + * Опция `-g` или `-G` добавлена к `ls` для фильтрации вывода. + * `show_source` алиас для `$` и принимает неэкранированный ввод. + * `whereami` алиас для `@`. + +* Обновлены следующие гемы по умолчанию. + + * RubyGems 3.4.1 + * abbrev 0.1.1 + * benchmark 0.2.1 + * bigdecimal 3.1.3 + * bundler 2.4.1 + * cgi 0.3.6 + * csv 3.2.6 + * date 3.3.3 + * delegate 0.3.0 + * did_you_mean 1.6.3 + * digest 3.1.1 + * drb 2.1.1 + * english 0.7.2 + * erb 4.0.2 + * error_highlight 0.5.1 + * etc 1.4.2 + * fcntl 1.0.2 + * fiddle 1.1.1 + * fileutils 1.7.0 + * forwardable 1.3.3 + * getoptlong 0.2.0 + * io-console 0.6.0 + * io-nonblock 0.2.0 + * io-wait 0.3.0 + * ipaddr 1.2.5 + * irb 1.6.2 + * json 2.6.3 + * logger 1.5.3 + * mutex_m 0.1.2 + * net-http 0.3.2 + * net-protocol 0.2.1 + * nkf 0.1.2 + * open-uri 0.3.0 + * open3 0.1.2 + * openssl 3.1.0 + * optparse 0.3.1 + * ostruct 0.5.5 + * pathname 0.2.1 + * pp 0.4.0 + * pstore 0.1.2 + * psych 5.0.1 + * racc 1.6.2 + * rdoc 6.5.0 + * readline-ext 0.1.5 + * reline 0.3.2 + * resolv 0.2.2 + * resolv-replace 0.1.1 + * securerandom 0.2.2 + * set 1.0.3 + * stringio 3.0.4 + * strscan 3.0.5 + * syntax_suggest 1.0.2 + * syslog 0.1.1 + * tempfile 0.1.3 + * time 0.2.1 + * timeout 0.3.1 + * tmpdir 0.1.3 + * tsort 0.1.1 + * un 0.2.1 + * uri 0.12.0 + * weakref 0.1.2 + * win32ole 1.8.9 + * yaml 0.2.1 + * zlib 3.0.0 + +* The following bundled gems are updated. + + * minitest 5.16.3 + * power_assert 2.0.3 + * test-unit 3.5.7 + * net-ftp 0.2.0 + * net-imap 0.3.3 + * net-pop 0.1.2 + * net-smtp 0.3.3 + * rbs 2.8.2 + * typeprof 0.21.3 + * debug 1.7.1 + +Смотрите релизы на GitHub, например [GitHub Releases of logger](https://github.com/ruby/logger/releases) или changelog для подробностей по гемам по умолчанию или включенным гемам. + +Для дополнительной информации ознакомьтесь с [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логами коммитов](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}) +для более подробной информации. + +С учетом этих изменений [изменено {{ release.stats.files_changed }} файлов, {{ release.stats.insertions }} вставок(+), {{ release.stats.deletions }} удалений(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.1.0! + +С наступающим Рождеством, с праздниками и наслаждайтесь программированием с Ruby 3.2! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацумото (Юкихиро Мацумото) в 1993 году, +и сейчас развивается как Open Source. Он работает на множестве платформ +и используется по всему миру, особенно в веб-разработке. + +[Feature #12005]: https://bugs.ruby-lang.org/issues/12005 +[Feature #12084]: https://bugs.ruby-lang.org/issues/12084 +[Feature #12655]: https://bugs.ruby-lang.org/issues/12655 +[Feature #12737]: https://bugs.ruby-lang.org/issues/12737 +[Feature #13110]: https://bugs.ruby-lang.org/issues/13110 +[Feature #14332]: https://bugs.ruby-lang.org/issues/14332 +[Feature #15231]: https://bugs.ruby-lang.org/issues/15231 +[Feature #15357]: https://bugs.ruby-lang.org/issues/15357 +[Bug #15928]: https://bugs.ruby-lang.org/issues/15928 +[Feature #16122]: https://bugs.ruby-lang.org/issues/16122 +[Feature #16131]: https://bugs.ruby-lang.org/issues/16131 +[Bug #16466]: https://bugs.ruby-lang.org/issues/16466 +[Feature #16663]: https://bugs.ruby-lang.org/issues/16663 +[Feature #16806]: https://bugs.ruby-lang.org/issues/16806 +[Bug #16889]: https://bugs.ruby-lang.org/issues/16889 +[Bug #16908]: https://bugs.ruby-lang.org/issues/16908 +[Feature #16989]: https://bugs.ruby-lang.org/issues/16989 +[Feature #17351]: https://bugs.ruby-lang.org/issues/17351 +[Feature #17391]: https://bugs.ruby-lang.org/issues/17391 +[Bug #17545]: https://bugs.ruby-lang.org/issues/17545 +[Bug #17767]: https://bugs.ruby-lang.org/issues/17767 +[Feature #17837]: https://bugs.ruby-lang.org/issues/17837 +[Feature #17881]: https://bugs.ruby-lang.org/issues/17881 +[Feature #18033]: https://bugs.ruby-lang.org/issues/18033 +[Feature #18159]: https://bugs.ruby-lang.org/issues/18159 +[Feature #18239]: https://bugs.ruby-lang.org/issues/18239#note-17 +[Feature #18351]: https://bugs.ruby-lang.org/issues/18351 +[Feature #18367]: https://bugs.ruby-lang.org/issues/18367 +[Bug #18435]: https://bugs.ruby-lang.org/issues/18435 +[Feature #18462]: https://bugs.ruby-lang.org/issues/18462 +[Feature #18481]: https://bugs.ruby-lang.org/issues/18481 +[Bug #18487]: https://bugs.ruby-lang.org/issues/18487 +[Feature #18564]: https://bugs.ruby-lang.org/issues/18564 +[Feature #18571]: https://bugs.ruby-lang.org/issues/18571 +[Feature #18585]: https://bugs.ruby-lang.org/issues/18585 +[Feature #18589]: https://bugs.ruby-lang.org/issues/18589 +[Feature #18595]: https://bugs.ruby-lang.org/issues/18595 +[Feature #18598]: https://bugs.ruby-lang.org/issues/18598 +[Bug #18625]: https://bugs.ruby-lang.org/issues/18625 +[Feature #18630]: https://bugs.ruby-lang.org/issues/18630 +[Bug #18633]: https://bugs.ruby-lang.org/issues/18633 +[Feature #18639]: https://bugs.ruby-lang.org/issues/18639 +[Feature #18685]: https://bugs.ruby-lang.org/issues/18685 +[Bug #18729]: https://bugs.ruby-lang.org/issues/18729 +[Bug #18751]: https://bugs.ruby-lang.org/issues/18751 +[Feature #18774]: https://bugs.ruby-lang.org/issues/18774 +[Feature #18776]: https://bugs.ruby-lang.org/issues/18776 +[Bug #18782]: https://bugs.ruby-lang.org/issues/18782 +[Feature #18788]: https://bugs.ruby-lang.org/issues/18788 +[Feature #18798]: https://bugs.ruby-lang.org/issues/18798 +[Feature #18809]: https://bugs.ruby-lang.org/issues/18809 +[Feature #18821]: https://bugs.ruby-lang.org/issues/18821 +[Feature #18822]: https://bugs.ruby-lang.org/issues/18822 +[Feature #18824]: https://bugs.ruby-lang.org/issues/18824 +[Feature #18832]: https://bugs.ruby-lang.org/issues/18832 +[Feature #18875]: https://bugs.ruby-lang.org/issues/18875 +[Feature #18925]: https://bugs.ruby-lang.org/issues/18925 +[Feature #18944]: https://bugs.ruby-lang.org/issues/18944 +[Feature #18949]: https://bugs.ruby-lang.org/issues/18949 +[Feature #18968]: https://bugs.ruby-lang.org/issues/18968 +[Feature #19008]: https://bugs.ruby-lang.org/issues/19008 +[Feature #19013]: https://bugs.ruby-lang.org/issues/19013 +[Feature #19026]: https://bugs.ruby-lang.org/issues/19026 +[Feature #19036]: https://bugs.ruby-lang.org/issues/19036 +[Feature #19060]: https://bugs.ruby-lang.org/issues/19060 +[Feature #19070]: https://bugs.ruby-lang.org/issues/19070 +[Feature #19071]: https://bugs.ruby-lang.org/issues/19071 +[Feature #19078]: https://bugs.ruby-lang.org/issues/19078 +[Bug #19087]: https://bugs.ruby-lang.org/issues/19087 +[Bug #19100]: https://bugs.ruby-lang.org/issues/19100 +[Feature #19104]: https://bugs.ruby-lang.org/issues/19104 +[Feature #19135]: https://bugs.ruby-lang.org/issues/19135 +[Feature #19138]: https://bugs.ruby-lang.org/issues/19138 +[Feature #19194]: https://bugs.ruby-lang.org/issues/19194 +[Molinillo]: https://github.com/CocoaPods/Molinillo +[PubGrub]: https://github.com/jhawthorn/pub_grub +[GH-net-protocol-14]: https://github.com/ruby/net-protocol/pull/14 +[GH-pathname-20]: https://github.com/ruby/pathname/pull/20 +[GH-6791]: https://github.com/ruby/ruby/pull/6791 +[GH-6868]: https://github.com/ruby/ruby/pull/6868 +[GH-rubygems-4475]: https://github.com/rubygems/rubygems/pull/4475 +[GH-rubygems-6149]: https://github.com/rubygems/rubygems/pull/6149 +[GH-rubygems-6167]: https://github.com/rubygems/rubygems/pull/6167 +[sec-156615]: https://hackerone.com/reports/156615 +[CVE-2021-33621]: https://www.ruby-lang.org/en/news/2022/11/22/http-response-splitting-in-cgi-cve-2021-33621/ +[wasm/README.md]: https://github.com/ruby/ruby/blob/master/wasm/README.md +[ruby.wasm]: https://github.com/ruby/ruby.wasm diff --git a/ru/news/_posts/2023-02-08-ruby-3-2-1-released.md b/ru/news/_posts/2023-02-08-ruby-3-2-1-released.md new file mode 100644 index 0000000000..8a83ce97fe --- /dev/null +++ b/ru/news/_posts/2023-02-08-ruby-3-2-1-released.md @@ -0,0 +1,44 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.1" +author: "naruse" +translator: "suban05" +date: 2023-02-08 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.2.1. + +Это первый релиз версии 3.2 с изменением TEENY. + +Дополнительные подробности смотрите в [релизах на GitHub](https://github.com/ruby/ruby/releases/tag/v3_2_1). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.2.1" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчеты об ошибках, помогли нам сделать этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md b/ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md new file mode 100644 index 0000000000..fb073c4b38 --- /dev/null +++ b/ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md @@ -0,0 +1,46 @@ +--- +layout: news_post +title: "CVE-2023-28755: Уязвимость ReDoS в URI" +author: "hsbt" +translator: "suban05" +date: 2023-03-28 01:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии библиотеки uri: 0.12.1, 0.11.1, 0.10.2 и 0.10.0.1, в которых исправлена уязвимость ReDoS. +Эта уязвимость получила идентификатор CVE [CVE-2023-28755](https://www.cve.org/CVERecord?id=CVE-2023-28755). + +## Подробности + +Была обнаружена проблема ReDoS в компоненте URI. Парсер URI неправильно обрабатывает недопустимые URL-адреса с определёнными символами, что приводит к увеличению времени выполнения при преобразовании строк в объекты URI. + +Уязвимы следующие версии библиотеки `uri`: 0.12.0, 0.11.0, 0.10.1, 0.10.0 и все версии до 0.10.0. + +## Рекомендации + +Мы рекомендуем обновить библиотеку `uri` до версии 0.12.1. Для обеспечения совместимости с встроенной версией в более старых версиях Ruby, вы можете использовать следующие обновления: + +* Для Ruby 2.7: обновите до `uri` 0.10.0.1 +* Для Ruby 3.0: обновите до `uri` 0.10.2 +* Для Ruby 3.1: обновите до `uri` 0.11.1 +* Для Ruby 3.2: обновите до `uri` 0.12.1 + +Вы можете использовать команду `gem update uri` для обновления. Если вы используете Bundler, добавьте `gem "uri", ">= 0.12.1"` (или другую указанную версию) в ваш `Gemfile`. + +## Затронутые версии + +* `uri` версии 0.12.0 +* `uri` версии 0.11.0 +* `uri` версии 0.10.1 +* `uri` версии 0.10.0 и более ранние + +## Благодарности + +Благодарим [Dominic Couture](https://hackerone.com/dee-see?type=user) за обнаружение этой проблемы. + +## История + +* Опубликовано исходно 2023-03-28 01:00:00 (UTC) +* Обновление затронутых версий 2023-03-28 02:00:00 (UTC) +* Обновление идентификатора CVE 2023-03-28 04:00:00 (UTC) diff --git a/ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md b/ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md new file mode 100644 index 0000000000..c015cfa7c6 --- /dev/null +++ b/ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md @@ -0,0 +1,43 @@ +--- +layout: news_post +title: "CVE-2023-28756: Уязвимость ReDoS в Time" +author: "hsbt" +translator: "suban05" +date: 2023-03-30 11:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии библиотеки time: 0.1.1 и 0.2.2, в которых исправлена уязвимость ReDoS. +Эта уязвимость получила идентификатор CVE [CVE-2023-28756](https://www.cve.org/CVERecord?id=CVE-2023-28756). + +## Подробности + +Парсер времени неправильно обрабатывает недопустимые строки с определёнными символами, что приводит к увеличению времени выполнения при преобразовании строк в объекты времени. + +Проблема ReDoS была обнаружена в библиотеке Time версий 0.1.0 и 0.2.1, а также в библиотеке времени Ruby 2.7.7. + +## Рекомендации + +Мы рекомендуем обновить библиотеку time до версии 0.2.2 или более поздней. Для обеспечения совместимости с встроенной версией в более старых версиях Ruby, вы можете использовать следующие обновления: + +* Для пользователей Ruby 3.0: обновите до `time` 0.1.1 +* Для пользователей Ruby 3.1/3.2: обновите до `time` 0.2.2 + +Вы можете использовать команду `gem update time` для обновления. Если вы используете Bundler, добавьте `gem "time", ">= 0.2.2"` в ваш `Gemfile`. + +К сожалению, библиотека time работает только с Ruby версии 3.0 и выше. Если вы используете Ruby 2.7, пожалуйста, обновите до последней версии Ruby. + +## Затронутые версии + +* Ruby 2.7.7 и более ранние +* Библиотека time версии 0.1.0 +* Библиотека time версии 0.2.1 + +## Благодарности + +Благодарим [ooooooo_q](https://hackerone.com/ooooooo_q?type=user) за обнаружение этой проблемы. + +## История + +* Опубликовано исходно 2023-03-30 11:00:00 (UTC) diff --git a/ru/news/_posts/2023-03-30-ruby-2-7-8-released.md b/ru/news/_posts/2023-03-30-ruby-2-7-8-released.md new file mode 100644 index 0000000000..e54c4bd308 --- /dev/null +++ b/ru/news/_posts/2023-03-30-ruby-2-7-8-released.md @@ -0,0 +1,60 @@ +--- +layout: news_post +title: "Выпуск Ruby 2.7.8" +author: "usa" +translator: "suban05" +date: 2023-03-30 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 2.7.8. + +Этот релиз включает исправления безопасности. +Для получения подробной информации ознакомьтесь с следующими темами: + +* [CVE-2023-28755: Уязвимость ReDoS в URI]({%link ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md %}) +* [CVE-2023-28756: Уязвимость ReDoS в Time]({%link ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md %}) + +Этот релиз также включает исправления проблем сборки. +Дополнительные детали доступны в [GitHub релизах](https://github.com/ruby/ruby/releases/tag/v2_7_8). + +После этого релиза Ruby 2.7 достигает конца срока поддержки (EOL). Другими словами, ожидается, что это последний релиз серии Ruby 2.7. +Мы не планируем выпуск Ruby 2.7.9, даже если будет найдена уязвимость безопасности (но можем выпустить, если будет найдена серьезная ошибка в работе). +Мы рекомендуем всем пользователям Ruby 2.7 немедленно начать миграцию на Ruby 3.2, 3.1 или 3.0. + +## Скачать + +{% assign release = site.data.releases | where: "version", "2.7.8" | first %} + +* <{{ release.url.bz2 }}> + + SIZE: {{ release.size.bz2 }} + SHA1: {{ release.sha1.bz2 }} + SHA256: {{ release.sha256.bz2 }} + SHA512: {{ release.sha512.bz2 }} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчёты о багах, помогли нам сделать этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2023-03-30-ruby-3-0-6-released.md b/ru/news/_posts/2023-03-30-ruby-3-0-6-released.md new file mode 100644 index 0000000000..8c5d68cdfb --- /dev/null +++ b/ru/news/_posts/2023-03-30-ruby-3-0-6-released.md @@ -0,0 +1,58 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.0.6" +author: "usa" +translator: +date: 2023-03-30 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.0.6. + +Этот релиз включает исправления безопасности. +Для получения подробной информации ознакомьтесь с следующими темами: + +* [CVE-2023-28755: Уязвимость ReDoS в URI]({%link ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md %}) +* [CVE-2023-28756: Уязвимость ReDoS в Time]({%link ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md %}) + +Этот релиз также включает исправления ошибок. +Дополнительные детали доступны в [GitHub релизах](https://github.com/ruby/ruby/releases/tag/v3_0_6). + +После этого релиза мы завершаем обычную фазу поддержки Ruby 3.0, и Ruby 3.0 входит в фазу поддержки безопасности. +Это означает, что мы больше не будем вносить обратные исправления ошибок в Ruby 3.0, кроме исправлений безопасности. + +Фаза поддержки безопасности запланирована на год. +Поддержка Ruby 3.0 завершается по окончании фазы поддержки безопасности. +Поэтому мы рекомендуем вам начать планирование обновления до Ruby 3.1 или 3.2. + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.0.6" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчёты о багах, помогли нам сделать этот релиз. +Благодарим за их вклад. + +Поддержка Ruby 3.0, включая этот релиз, основана на "Соглашении о стабильной версии Ruby" от Ruby Association. diff --git a/ru/news/_posts/2023-03-30-ruby-3-1-4-released.md b/ru/news/_posts/2023-03-30-ruby-3-1-4-released.md new file mode 100644 index 0000000000..24f115783f --- /dev/null +++ b/ru/news/_posts/2023-03-30-ruby-3-1-4-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.4" +author: "nagachika" +translator: "suban05" +date: 2023-03-30 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.4. + +Этот релиз включает исправления безопасности. +Для получения подробной информации ознакомьтесь с следующими темами: + +* [CVE-2023-28755: Уязвимость ReDoS в URI]({%link ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md %}) +* [CVE-2023-28756: Уязвимость ReDoS в Time]({%link ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md %}) + +Дополнительные детали доступны в [GitHub релизах](https://github.com/ruby/ruby/releases/tag/v3_1_4). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.1.4" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчёты о багах, помогли нам сделать этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2023-03-30-ruby-3-2-2-released.md b/ru/news/_posts/2023-03-30-ruby-3-2-2-released.md new file mode 100644 index 0000000000..354de64505 --- /dev/null +++ b/ru/news/_posts/2023-03-30-ruby-3-2-2-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.2" +author: "naruse" +translator: "suban05" +date: 2023-03-30 12:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.2.2. + +Этот релиз включает исправления безопасности. +Для получения подробной информации ознакомьтесь с следующими темами: + +* [CVE-2023-28755: Уязвимость ReDoS в URI]({%link ru/news/_posts/2023-03-28-redos-in-uri-cve-2023-28755.md %}) +* [CVE-2023-28756: Уязвимость ReDoS в Time]({%link ru/news/_posts/2023-03-30-redos-in-time-cve-2023-28756.md %}) + +Дополнительные детали доступны в [GitHub релизах](https://github.com/ruby/ruby/releases/tag/v3_2_2). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.2.2" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к релизу + +Множество коммитеров, разработчиков и пользователей, предоставивших отчёты о багах, помогли нам сделать этот релиз. +Благодарим за их вклад. diff --git a/ru/news/_posts/2023-05-12-ruby-3-3-0-preview1-released.md b/ru/news/_posts/2023-05-12-ruby-3-3-0-preview1-released.md new file mode 100644 index 0000000000..615a147175 --- /dev/null +++ b/ru/news/_posts/2023-05-12-ruby-3-3-0-preview1-released.md @@ -0,0 +1,160 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.0-preview1" +author: "naruse" +translator: "suban05" +date: 2023-05-12 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.3.0-preview1" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.3 добавляет новый чистый JIT-компилятор на Ruby под названием RJIT, использует Lrama в качестве генератора парсеров и внес множество улучшений производительности, особенно YJIT. + +## RJIT + +* Введен чисто-рубиновый JIT-компилятор на Ruby RJIT, заменивший MJIT. + * RJIT поддерживает только архитектуру x86\_64 на платформах Unix. + * В отличие от MJIT, он не требует компилятора на C во время выполнения. +* RJIT предназначен исключительно для экспериментальных целей. + * В продакшене следует продолжать использовать YJIT. +* Если вас интересует разработка JIT для Ruby, обратитесь к [презентации k0kubun на третий день RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3). + +## Использование Lrama вместо Bison + +* Замена Bison на [генератор парсеров Lrama LALR](https://github.com/yui-knk/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637) + * Если вас это интересует, ознакомьтесь с [Будущим видением парсера Ruby](https://rubykaigi.org/2023/presentations/spikeolaf.html) + +## YJIT + +* Значительные улучшения производительности по сравнению с 3.2 + * Улучшена поддержка расширяемых списков и аргументов rest. + * Регистры выделяются для операций стека виртуальной машины. + * Компилируются больше вызовов с опциональными аргументами. + * `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?`, `Module#===` особенно оптимизированы. + * Переменные экземпляра больше не возвращаются в интерпретатор с мегаморфными формами объектов. +* Метаданные для скомпилированного кода используют гораздо меньше памяти. +* Улучшена генерация кода на ARM64. +* Добавлена опция запуска YJIT в режиме паузы, с возможностью позже вручную его включить + * `--yjit-pause` и `RubyVM::YJIT.resume` + * Это можно использовать, чтобы включить YJIT только после завершения загрузки вашего приложения. +* Опция трассировки выхода теперь поддерживает выборочное отслеживание + * `--trace-exits-sample-rate=N` +* Множество исправлений ошибок + + + +## Другие заметные новые функции + +### Язык + + + +## Улучшения производительности + +* `defined?(@ivar)` оптимизирован с использованием форм объектов. + +## Другие значимые изменения с момента 3.2 + + + +## Проблемы совместимости + +Примечание: Исключая исправления ошибок функций. + +### Удаленные константы + +Следующие устаревшие константы удалены. + + + +### Удаленные методы + +Следующие устаревшие методы удалены. + + + +## Проблемы совместимости со стандартной библиотекой + +### `ext/readline` устарел + +* У нас есть `reline`, которая является реализацией на чистом Ruby, совместимой с API `ext/readline`. В будущем мы будем полагаться на `reline`. Если вам нужно использовать `ext/readline`, вы можете установить `ext/readline` через rubygems.org с помощью `gem install readline-ext`. +* Нам больше не нужно устанавливать библиотеки типа `libreadline` или `libedit`. + +## Обновления C API + +### Обновленные C API + +Следующие API были обновлены. + + + +### Удаленные C API + +Следующие устаревшие API были удалены. + + + +## Обновления стандартной библиотеки + +Следующие стандартные гемы были обновлены. + +* RubyGems 3.5.0.dev +* bigdecimal 3.1.4 +* bundler 2.5.0.dev +* csv 3.2.7 +* fiddle 1.1.2 +* fileutils 1.7.1 +* irb 1.6.4 +* optparse 0.4.0.pre.1 +* psych 5.1.0 +* reline 0.3.3 +* stringio 3.0.7 +* strscan 3.0.7 +* syntax_suggest 1.0.4 +* time 0.2.2 +* timeout 0.3.2 +* uri 0.12.1 + +Следующие пакетные гемы были обновлены. + +* minitest 5.18.0 +* rbs 3.1.0 +* typeprof 0.21.7 +* debug 1.8.0 + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.2.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. diff --git a/ru/news/_posts/2023-06-29-redos-in-uri-CVE-2023-36617.md b/ru/news/_posts/2023-06-29-redos-in-uri-CVE-2023-36617.md new file mode 100644 index 0000000000..8578e9b130 --- /dev/null +++ b/ru/news/_posts/2023-06-29-redos-in-uri-CVE-2023-36617.md @@ -0,0 +1,45 @@ +--- +layout: news_post +title: "CVE-2023-36617: Уязвимость ReDoS в URI" +author: "hsbt" +translator: "suban05" +date: 2023-06-29 01:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии гема `uri` 0.12.2 и 0.10.3, в которых исправлена уязвимость ReDoS. +Эта уязвимость получила идентификатор CVE [CVE-2023-36617](https://www.cve.org/CVERecord?id=CVE-2023-36617). + +## Детали + +Была обнаружена проблема ReDoS в компоненте URI до версии 0.12.1 для Ruby. Парсер URI неправильно обрабатывает недопустимые URL-адреса с определенными символами. Это приводит к увеличению времени выполнения при парсинге строк в объекты URI с использованием rfc2396_parser.rb и rfc3986_parser.rb. + +ПРИМЕЧАНИЕ: эта проблема существует из-за неполного исправления для [CVE-2023-28755](https://www.ruby-lang.org/en/news/2023/03/28/redos-in-uri-cve-2023-28755/). + +Версия гема `uri` 0.12.1 и все предыдущие версии до 0.12.1 уязвимы для данной уязвимости. + +## Рекомендуемые действия + +Мы рекомендуем обновить гем `uri` до версии 0.12.2. Для обеспечения совместимости с встроенной версией в старых сериях Ruby вы можете выполнить следующие действия: + +* Для Ruby 3.0: Обновите до `uri` 0.10.3 +* Для Ruby 3.1: Обновите до `uri` 0.12.2 +* Для Ruby 3.2: Обновите до `uri` 0.12.2 или обновите до Ruby 3.2.3 + +Вы можете использовать `gem update uri` для обновления. Если вы используете Bundler, добавьте `gem "uri", ">= 0.12.2"` (или другую упомянутую версию) в ваш `Gemfile`. + +## Затронутые версии + +* Гем `uri` версии 0.12.1 или ранее + +## Благодарности + +Благодарим [ooooooo_q](https://hackerone.com/ooooooo_q) за обнаружение этой проблемы. + +Благодарим [nobu](https://github.com/nobu) за исправление этой проблемы. + +## История + +* Добавлено новое рекомендуемое действие для Ruby 3.2 18 января 2024 года в 12:00:00 (UTC) +* Опубликовано первоначально 29 июня 2023 года в 01:00:00 (UTC) diff --git a/ru/news/_posts/2023-09-14-ruby-3-3-0-preview2-released.md b/ru/news/_posts/2023-09-14-ruby-3-3-0-preview2-released.md new file mode 100644 index 0000000000..a058f615eb --- /dev/null +++ b/ru/news/_posts/2023-09-14-ruby-3-3-0-preview2-released.md @@ -0,0 +1,183 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.0-preview2" +author: "naruse" +translator: "suban05" +date: 2023-09-14 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.3.0-preview2" | first %} + +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.3 добавляет новый чистый JIT-компилятор на Ruby под названием RJIT, использует Lrama в качестве генератора парсеров, а также внесено множество улучшений производительности, особенно YJIT. + +## RJIT + +* Введен чисто-рубиновый JIT-компилятор RJIT и заменен MJIT. + * RJIT поддерживает только архитектуру x86\_64 на платформах Unix. + * В отличие от MJIT, он не требует компилятора C во время выполнения. +* RJIT существует только в экспериментальных целях. + * В производственных условиях рекомендуется продолжать использовать YJIT. +* Если вас интересует разработка JIT для Ruby, ознакомьтесь с [презентацией k0kubun на 3-й день RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3). + +## Использование Lrama вместо Bison + +* Заменить Bison на [Lrama LALR генератор парсеров](https://github.com/yui-knk/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637) + * Если вас это интересует, ознакомьтесь с [будущим видением парсера Ruby](https://rubykaigi.org/2023/presentations/spikeolaf.html) + +## YJIT + +* Основные улучшения производительности по сравнению с 3.2 + * Улучшена поддержка аргументов splat и rest. + * Выделяются регистры для операций со стеком виртуальной машины. + * Компилируются больше вызовов с опциональными аргументами. + * Также компилируются обработчики исключений. + * Переменные экземпляра больше не возвращаются в интерпретатор с мегаморфными Object Shapes. + * Неподдерживаемые типы вызовов больше не возвращаются в интерпретатор. + * Особенно оптимизированы `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?`, `Module#===`. + * Теперь более чем в 3 раза быстрее интерпретатора на тестах с optcarrot! +* Метаданные для скомпилированного кода используют гораздо меньше памяти. +* Генерация более компактного кода на ARM64. +* Возможность запуска YJIT в приостановленном режиме и позднее вручную его активировать + * `--yjit-pause` и `RubyVM::YJIT.resume` + * Это можно использовать для активации YJIT только после загрузки вашего приложения. +* Статистика `ratio_in_yjit`, получаемая с помощью `--yjit-stats`, теперь доступна в релизных сборках, не требуется специальная сборка для разработки или статистики. +* Опция трассировки выходов теперь поддерживает выборку + * `--trace-exits-sample-rate=N` +* Более тщательное тестирование и множество исправлений ошибок. + +## Другие значимые нововведения + +### Язык + + + +## Улучшения производительности + +* Оптимизирован `defined?(@ivar)` с использованием Object Shapes. + +## Другие значимые изменения с версии 3.2 + +### IRB + +IRB получил несколько улучшений, включая, но не ограничиваясь: + +- Расширенная интеграция `irb:rdbg`, предоставляющая опыт отладки, аналогичный `pry-byebug` ([документация](https://github.com/ruby/irb#debugging-with-irb)). +- Поддержка пейджера для команд типа `ls` и `show_cmds`. +- Более точная и полезная информация, предоставляемая командами `ls` и `show_source`. + +Кроме того, IRB также претерпел обширную рефакторизацию и получил десятки исправлений ошибок для облегчения будущих улучшений. + +## Проблемы совместимости + +Примечание: Исключены исправления ошибок, касающиеся функциональности. + +### Удаленные константы + +Были удалены следующие устаревшие константы. + + + +### Удаленные методы + +Были удалены следующие устаревшие методы. + + + +## Проблемы совместимости в стандартной библиотеке + +### `ext/readline` уходит на пенсию + +* У нас есть `reline`, чистая Ruby-реализация совместимая с API `ext/readline`. Мы полагаемся на `reline` в будущем. Если вам нужно использовать `ext/readline`, вы можете установить `ext/readline` через rubygems.org с помощью `gem install readline-ext`. +* Нам больше не нужно устанавливать библиотеки типа `libreadline` или `libedit`. + +## Обновления C API + +### Обновленные C API + +Следующие API были обновлены. + + + +### Удаленные C API + +Были удалены следующие устаревшие API. + + + +## Обновления стандартной библиотеки + +RubyGems и Bundler предупреждают пользователей, если они требуют гем, который запланирован быть включенным в будущую версию Ruby. + +Были обновлены следующие гемы по умолчанию. + +* RubyGems 3.5.0.dev +* bigdecimal 3.1.4 +* bundler 2.5.0.dev +* csv 3.2.8 +* erb 4.0.3 +* fiddle 1.1.2 +* fileutils 1.7.1 +* irb 1.7.4 +* nkf 0.1.3 +* optparse 0.4.0.pre.1 +* psych 5.1.0 +* reline 0.3.8 +* stringio 3.0.9 +* strscan 3.0.7 +* syntax_suggest 1.1.0 +* time 0.2.2 +* timeout 0.4.0 +* uri 0.12.2 +* yarp 0.9.0 + +Были обновлены следующие включенные гемы. + +* minitest 5.19.0 +* test-unit 3.6.1 +* rexml 3.2.6 +* rss 0.3.0 +* net-imap 0.3.7 +* rbs 3.2.1 +* typeprof 0.21.8 +* debug 1.8.0 + +Был добавлен следующий гем по умолчанию. + +* racc 1.7.1 + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.2.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. diff --git a/ru/news/_posts/2023-11-12-ruby-3-3-0-preview3-released.md b/ru/news/_posts/2023-11-12-ruby-3-3-0-preview3-released.md new file mode 100644 index 0000000000..4b11b6ff64 --- /dev/null +++ b/ru/news/_posts/2023-11-12-ruby-3-3-0-preview3-released.md @@ -0,0 +1,282 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.0-preview3" +author: "naruse" +translator: "suban05" +date: 2023-11-12 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.3.0-preview3" | first %} +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.3 добавляет новый парсер под названием Prism, использует Lrama в качестве генератора парсеров, добавляет новый чисто-руби компилятор JIT под названием RJIT и множество улучшений производительности, особенно YJIT. + +## Prism + +* Введен [парсер Prism](https://github.com/ruby/prism) в качестве гема по умолчанию + * Prism - это переносимый, устойчивый к ошибкам и поддерживаемый рекурсивный спуск парсер для языка Ruby. +* Prism готов к использованию в продакшене и активно поддерживается, его можно использовать вместо Ripper. + * Есть [обширная документация](https://ruby.github.io/prism/) по использованию Prism. + * Prism представляет собой как C-библиотеку, которая будет использоваться внутренне CRuby, так и Ruby гем, который может быть использован любыми инструментами, нуждающимися в парсинге Ruby кода. + * Известные методы в API Prism: + * `Prism.parse(source)` - возвращает AST как часть ParseResult. + * `Prism.dump(source)` - возвращает сериализованный AST в виде строки. + * `Prism.parse_comments(source)` - возвращает комментарии. +* Вы можете создавать pull request'ы или открывать issues напрямую на [репозитории Prism](https://github.com/ruby/prism), если вам интересно внести вклад. + +## Использование Lrama вместо Bison + +* Заменен Bison на [Lrama LALR генератор парсеров](https://github.com/yui-knk/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637) + * Если вас интересует, ознакомьтесь с [Будущее визионера Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html) + * Внутренний парсер Lrama заменен на LR парсер, сгенерированный Racc для лучшей поддерживаемости. + * Поддерживаются параметры правил `(?, *, +)`, они будут использоваться в Ruby parse.y. + +## RJIT + +* Введен чисто-рубиновый компилятор JIT RJIT, заменивший MJIT. + * RJIT поддерживает только архитектуру x86-64 на Unix платформах. + * В отличие от MJIT, он не требует наличия компилятора C во время выполнения. +* RJIT существует только в экспериментальных целях. + * Для продакшена следует продолжать использовать YJIT. + * Если вас интересует разработка JIT для Ruby, ознакомьтесь с [презентацией k0kubun на Day 3 RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3). + +## YJIT + +* Значительные улучшения производительности по сравнению с 3.2 + * Улучшена поддержка splat и rest аргументов. + * Регистры выделяются для операций стека виртуальной машины. + * Компилируются больше вызовов с необязательными аргументами. + * Также компилируются обработчики исключений. + * Переменные экземпляра больше не выходят в интерпретатор с мегаморфными формами объектов. + * Неподдерживаемые типы вызовов больше не выходят в интерпретатор. + * `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`, + `Kernel#instance_of?`, `Module#===` специально оптимизированы. + * Теперь более чем в 3 раза быстрее интерпретатора на optcarrot! +* Значительно улучшено использование памяти по сравнению с 3.2 + * Метаданные для скомпилированного кода используют намного меньше памяти. + * Генерируется более компактный код на ARM64. +* Скорость компиляции теперь немного выше, чем в 3.2. +* Добавлена возможность `RubyVM::YJIT.enable`, которая может включать YJIT во время выполнения. + * Вы можете запустить YJIT без изменения аргументов командной строки или переменных окружения. + * Это также может быть использовано для включения YJIT только после загрузки вашего приложения. `--yjit-disable` может использоваться, если вы хотите использовать другие параметры YJIT при отключении YJIT при загрузке. +* Добавлена опция для отключения GC кода и рассмотрения `--yjit-exec-mem-size` как жесткого лимита. + * Может обеспечить лучшее поведение копирования при записи на серверах с использованием unicorn и forking. +* Статистика `ratio_in_yjit`, произведенная `--yjit-stats`, теперь доступна в релизных сборках, для доступа к большинству статистических данных больше не требуется специальная статистическая или dev сборка. +* Опция трассировки выхода теперь поддерживает выборку + * `--trace-exits-sample-rate=N` +* `--yjit-perf` добавлен для упрощения профилирования с помощью Linux perf. +* Более тщательное тестирование и множество исправлений ошибок + +### Планировщик потоков M:N + +* Введен планировщик потоков M:N. [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842) + * Потоки Ruby M управляются N нативными потоками (потоками ОС), что снижает затраты на создание и управление потоками. + * Это может нарушить совместимость с C-расширениями, поэтому планировщик потоков M:N по умолчанию отключен в основном Ractor. + * Переменная среды `RUBY_MN_THREADS=1` включает потоки M:N в основном Ractor. + * Потоки M:N включены в неосновных Ractor. + * Переменная среды `RUBY_MAX_CPU=n` устанавливает максимальное количество `N` (максимальное число нативных потоков). Значение по умолчанию — 8. + * Поскольку одновременно может выполняться только один поток Ruby на Ractor, будет использоваться меньшее из числа, указанного в `RUBY_MAX_CPU`, и количества запущенных Ractor. Таким образом, приложения с одним Ractor будут использовать 1 нативный поток. + * Для поддержки блокирующих операций можно использовать более `N` нативных потоков. + +## Другие заметные новые функции + + + +### Улучшения производительности + +* `defined?(@ivar)` оптимизирован с помощью Object Shapes. +* Разрешение имен, такое как `Socket.getaddrinfo`, теперь можно прерывать (в средах, где доступны pthreads). [Feature #19965](https://bugs.ruby-lang.org/issues/19965) + * В этом случае pthread создается при каждом вызове getaddrinfo или getnameinfo. Это влечет за собой некоторые накладные расходы на разрешение имен (примерно в 2,5 раза по нашим экспериментам). Мы не ожидаем, что эти накладные расходы на разрешение имен будут проблемой для большинства приложений, но если вы заметите такие проблемы или увидите неожиданные эффекты, которые, по вашему мнению, связаны с этим изменением, пожалуйста, сообщите об этом. +* Добавлена переменная среды `RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO`. [Feature #19571](https://bugs.ruby-lang.org/issues/19571) +* Дети старых объектов теперь не сразу перемещаются в старшее поколение в сборщике мусора. [Feature #19678](https://bugs.ruby-lang.org/issues/19678) +* Поддержка слабых ссылок добавлена в сборщик мусора. [Feature #19783](https://bugs.ruby-lang.org/issues/19783) + +## Другие значимые изменения с версии 3.2 + +### IRB + +IRB получил несколько улучшений, включая, но не ограничиваясь: + +- Расширенная интеграция `irb:rdbg`, обеспечивающая опыт отладки, эквивалентный `pry-byebug` ([документация](https://github.com/ruby/irb#debugging-with-irb)). +- Поддержка страницы для команд `ls`, `show_source` и `show_cmds`. +- Более точная и полезная информация, предоставляемая командами `ls` и `show_source`. +- Экспериментальное автодополнение с использованием анализа типов ([документация](https://github.com/ruby/irb#type-based-completion)). +- Теперь возможно изменять цвет текста и стиль шрифта в диалоге автодополнения с помощью введенного класса Reline::Face ([документация](https://github.com/ruby/ruby/blob/master/doc/reline/face.md)) + +Кроме того, IRB также претерпел обширную рефакторизацию и получил десятки исправлений ошибок для облегчения будущих улучшений. + +## Проблемы совместимости + +Примечание: Исключая исправления ошибок функций. + +### Удаленные константы + +Следующие устаревшие константы удалены. + + + +### Удаленные методы + +Следующие устаревшие методы удалены. + +### Удаленные переменные среды + +Следующие устаревшие переменные среды удалены. + +* Переменная среды `RUBY_GC_HEAP_INIT_SLOTS` устарела и не работает. Вместо нее используйте переменные среды `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`. [Feature #19785](https://bugs.ruby-lang.org/issues/19785) + +## Проблемы совместимости стандартной библиотеки + +### `ext/readline` устарел + +* У нас есть `reline`, чистая реализация на Ruby, совместимая с API `ext/readline`. Мы полагаемся на `reline` в будущем. Если вам нужно использовать `ext/readline`, вы можете установить `ext/readline` через rubygems.org с помощью `gem install readline-ext`. +* Теперь больше не нужно устанавливать библиотеки типа `libreadline` или `libedit`. + +## Обновления C API + +### Обновленные C API + +Следующие API обновлены. + + + +### Удаленные C API + +Следующие устаревшие API удалены. + + + +## Обновления стандартной библиотеки + +RubyGems и Bundler предупреждают пользователей, если требуется гем, который запланирован для включения в будущих версиях Ruby. + +Целевые библиотеки: + + * abbrev + * base64 + * bigdecimal + * csv + * drb + * getoptlong + * mutex_m + * nkf + * observer + * racc + * resolv-replace + * rinda + * syslog + +Следующий гем по умолчанию добавлен. + +* prism 0.15.1 + +Следующие гемы по умолчанию обновлены. + +* RubyGems 3.5.0.dev +* base64 0.2.0 +* benchmark 0.3.0 +* bigdecimal 3.1.5 +* bundler 2.5.0.dev +* cgi 0.4.0 +* csv 3.2.8 +* date 3.3.4 +* delegate 0.3.1 +* drb 2.2.0 +* english 0.8.0 +* erb 4.0.3 +* etc 1.4.3.dev.1 +* fcntl 1.1.0 +* fiddle 1.1.2 +* fileutils 1.7.2 +* find 0.2.0 +* getoptlong 0.2.1 +* io-console 0.6.1.dev +* irb 1.8.3 +* logger 1.6.0 +* mutex_m 0.2.0 +* net-http 0.4.0 +* net-protocol 0.2.2 +* nkf 0.1.3 +* observer 0.1.2 +* open-uri 0.4.0 +* open3 0.2.0 +* openssl 3.2.0 +* optparse 0.4.0 +* ostruct 0.6.0 +* pathname 0.3.0 +* pp 0.5.0 +* prettyprint 0.2.0 +* pstore 0.1.3 +* psych 5.1.1.1 +* rdoc 6.6.0 +* reline 0.3.9 +* rinda 0.2.0 +* securerandom 0.3.0 +* shellwords 0.2.0 +* singleton 0.2.0 +* stringio 3.0.9 +* strscan 3.0.7 +* syntax_suggest 1.1.0 +* tempfile 0.2.0 +* time 0.3.0 +* timeout 0.4.1 +* tmpdir 0.2.0 +* tsort 0.2.0 +* un 0.3.0 +* uri 0.13.0 +* weakref 0.1.3 +* win32ole 1.8.10 +* yaml 0.3.0 +* zlib 3.1.0 + +Следующий гем, включенный по умолчанию, продвигается из гемов по умолчанию. + +* racc 1.7.3 + +Следующие гемы, включенные по умолчанию, обновлены. + +* minitest 5.20.0 +* rake 13.1.0 +* test-unit 3.6.1 +* rexml 3.2.6 +* rss 0.3.0 +* net-imap 0.4.4 +* net-smtp 0.4.0 +* rbs 3.2.2 +* typeprof 0.21.8 +* debug 1.8.0 + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.2.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. diff --git a/ru/news/_posts/2023-12-11-ruby-3-3-0-rc1-released.md b/ru/news/_posts/2023-12-11-ruby-3-3-0-rc1-released.md new file mode 100644 index 0000000000..308be2e0ae --- /dev/null +++ b/ru/news/_posts/2023-12-11-ruby-3-3-0-rc1-released.md @@ -0,0 +1,293 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.0-rc1" +author: "naruse" +translator: "suban05" +date: 2023-12-11 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.3.0-rc1" | first %} +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.3 добавляет новый парсер под названием Prism, использует Lrama в качестве генератора парсеров, вводит новый чисто-рубиновый JIT-компилятор под названием RJIT и множество улучшений производительности, особенно YJIT. + +После выпуска RC1 мы постараемся избегать введения несовместимостей ABI, где это возможно. Если нам придется это сделать, мы объявим об этом в примечании к релизу. + +## Prism + +* Введен [парсер Prism](https://github.com/ruby/prism) в качестве гема по умолчанию. + * Prism — переносимый, толерантный к ошибкам и поддерживаемый рекурсивный спускающийся парсер для языка Ruby. +* Prism готов к использованию в продакшене и активно поддерживается, его можно использовать вместо Ripper. + * Есть [обширная документация](https://ruby.github.io/prism/), посвященная использованию Prism. + * Prism представляет собой как библиотеку на C, которая будет использоваться внутри CRuby, так и Ruby-гем, который может использоваться любыми инструментами, нуждающимися в разборе Ruby-кода. + * Примечательные методы в API Prism: + * `Prism.parse(source)`, возвращающий AST в качестве части ParseResult. + * `Prism.dump(source)`, возвращающий сериализованный AST в виде строки. + * `Prism.parse_comments(source)`, возвращающий комментарии. +* Вы можете создавать pull request или issues напрямую на [репозитории Prism](https://github.com/ruby/prism), если хотите внести вклад. + +## Использование Lrama вместо Bison + +* Заменен Bison на [Lrama LALR генератор парсеров](https://github.com/ruby/lrama) [Feature #19637](https://bugs.ruby-lang.org/issues/19637). + * Если вас это интересует, пожалуйста, ознакомьтесь с [будущим видением парсера Ruby](https://rubykaigi.org/2023/presentations/spikeolaf.html). + * Внутренний парсер Lrama заменен на LR парсер, сгенерированный Racc для обеспечения удобства поддержки. + * Поддерживаются параметризованные правила `(?, *, +)`, они будут использоваться в Ruby parse.y. + +## RJIT + +* Введен чисто-рубиновый JIT-компилятор RJIT, заменивший MJIT. + * RJIT поддерживает только архитектуру x86-64 на платформах Unix. + * В отличие от MJIT, он не требует компилятора C во время выполнения. +* RJIT существует исключительно в экспериментальных целях. + * В продакшене рекомендуется продолжать использовать YJIT. +* Если вас интересует разработка JIT для Ruby, обратитесь к [презентации k0kubun на Day 3 RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3). + +## YJIT + +* Значительные улучшения производительности по сравнению с 3.2. + * Улучшена поддержка splat и rest аргументов. + * Регистры выделяются для операций со стеком виртуальной машины. + * Компилируются больше вызовов с опциональными аргументами. + * Компилируются обработчики исключений. + * Переменные экземпляра больше не выходят в интерпретатор с мегаморфными формами объектов. + * Неподдерживаемые типы вызовов больше не возвращаются в интерпретатор. + * `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?`, `Module#===` оптимизированы специальным образом. + * Теперь YJIT более чем в 3 раза быстрее интерпретатора на optcarrot! +* Значительно улучшено использование памяти по сравнению с 3.2. + * Метаданные для скомпилированного кода используют гораздо меньше памяти. + * Генерируется более компактный код на ARM64. +* Скорость компиляции теперь немного выше, чем в 3.2. +* Добавлен `RubyVM::YJIT.enable`, который позволяет включать YJIT во время выполнения. + * Вы можете запустить YJIT без изменения аргументов командной строки или переменных среды. + * Это также можно использовать для включения YJIT только после загрузки вашего приложения. `--yjit-disable` можно использовать, если вы хотите использовать другие параметры YJIT при отключенном YJIT при запуске. +* Код GC теперь отключен по умолчанию, и `--yjit-exec-mem-size` рассматривается как жесткий предел, где компиляция нового кода прекращается. + * Лучшее поведение copy-on-write на серверах, использующих unicorn и forking. + * Нет резких снижений производительности из-за GC кода. + * Вы всё ещё можете включить код GC по желанию с помощью `--yjit-code-gc`. +* Статистика `ratio_in_yjit`, производимая `--yjit-stats`, теперь доступна в релизных сборках, для доступа к большинству статистик больше не требуется специальная статистическая или dev сборка. +* Опция трассировки выходов теперь поддерживает выборочное сэмплирование `--trace-exits-sample-rate=N`. +* Добавлен `--yjit-perf` для упрощения профилирования с помощью Linux perf. +* Проведено более тщательное тестирование и многочисленные исправления ошибок. + +### Планировщик потоков M:N + +* Введен планировщик потоков M:N. [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842) + * Потоки M Ruby управляются N нативными потоками (потоками ОС), что снижает затраты на создание и управление потоками. + * Это может нарушить совместимость с C-расширениями, поэтому планировщик потоков M:N по умолчанию отключен в основном Ractor. + * Переменная среды `RUBY_MN_THREADS=1` активирует потоки M:N в основном Ractor. + * Потоки M:N включены в неосновных Ractor. + * Переменная среды `RUBY_MAX_CPU=n` устанавливает максимальное количество `N` (максимальное количество нативных потоков). По умолчанию это значение равно 8. + * Поскольку только один Ruby-поток на Ractor может работать одновременно, будет использовано меньшее из числа, указанного в `RUBY_MAX_CPU`, и числа запущенных Ractor. Таким образом, большинство приложений с одним Ractor будут использовать 1 нативный поток. + * Для поддержки блокирующих операций может использоваться больше `N` нативных потоков. + +## Другие значимые нововведения + + + +### Язык + + +## Улучшения производительности + +* Оптимизирована конструкция `defined?(@ivar)` с помощью объектных форм. +* Разрешение имен, такое как `Socket.getaddrinfo`, теперь может быть прервано (в средах, где доступны pthreads). [Feature #19965](https://bugs.ruby-lang.org/issues/19965) + * Для этой цели теперь создается pthread при каждом вызове getaddrinfo или getnameinfo. Это сопряжено с некоторыми накладными расходами на разрешение имен (приблизительно в 2.5 раза по нашим экспериментам). Мы не ожидаем, что эти накладные расходы на разрешение имен станут проблемой для большинства приложений, однако если вы заметите такое или увидите неожиданные эффекты, которые, по вашему мнению, связаны с этим изменением, пожалуйста, сообщите об этом. +* Несколько улучшений производительности сборщика мусора + * Молодые объекты, на которые ссылаются старые объекты, больше не сразу перемещаются в старшее поколение. Это значительно снижает частоту основных сборок мусора. [[Feature #19678]](https://bugs.ruby-lang.org/issues/19678) + * Введена новая настройка `REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO`, чтобы контролировать количество незащищенных объектов, вызывающих сборку основного поколения. По умолчанию установлено значение `0.01` (1%). Это значительно снижает частоту основных сборок мусора. [[Feature #19571]](https://bugs.ruby-lang.org/issues/19571) + * Для многих основных типов были внедрены барьеры записи, в частности для `Time`, `Enumerator`, `MatchData`, `Method`, `File::Stat`, `BigDecimal` и нескольких других. Это значительно снижает время минорных сборок мусора и частоту основных сборок мусора. + * Большинство основных классов теперь используют переменную ширину выделения памяти, в частности `Hash`, `Time`, `Thread::Backtrace`, `Thread::Backtrace::Location`, `File::Stat`, `Method`. Это делает эти классы быстрее для выделения и освобождения, использует меньше памяти и снижает фрагментацию кучи. + * Добавлена поддержка слабых ссылок в сборщике мусора. [[Feature #19783]](https://bugs.ruby-lang.org/issues/19783) + + +## Другие значимые изменения с момента версии 3.2 + +### IRB + +IRB получил ряд улучшений, включая, но не ограничиваясь: + +- Расширенная интеграция `irb:rdbg`, предоставляющая аналогичный опыт отладки как `pry-byebug` ([документация](https://github.com/ruby/irb#debugging-with-irb)). +- Поддержка пейджера для команд `ls`, `show_source` и `show_cmds`. +- Более точная и полезная информация, предоставляемая командами `ls` и `show_source`. +- Экспериментальное автодополнение с использованием анализа типов ([документация](https://github.com/ruby/irb#type-based-completion)). +- Теперь возможно изменять цвет шрифта и стиль шрифта в диалоге автодополнения с помощью нового класса Reline::Face ([документация](https://github.com/ruby/ruby/blob/master/doc/reline/face.md)) + +Кроме того, IRB претерпел обширную рефакторизацию и получил десятки исправлений ошибок для облегчения будущих улучшений. + +## Проблемы совместимости + +Примечание: Исключены исправления ошибок функционала. + +* Вызовы `it` без аргументов в блоке без обычных параметров устаревают. В Ruby 3.4 `it` будет ссылаться на первый параметр блока. [Feature #18980](https://bugs.ruby-lang.org/issues/18980) + +### Удаленные константы + +Следующие устаревшие константы удалены. + + + +### Удаленные методы + +Следующие устаревшие методы удалены. + +### Удаленные переменные среды + +Следующие устаревшие переменные среды удалены. + +* Переменная среды `RUBY_GC_HEAP_INIT_SLOTS` устарела и не работает. Вместо нее используйте переменные среды `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`. [Feature #19785](https://bugs.ruby-lang.org/issues/19785) + +## Проблемы совместимости стандартной библиотеки + +### `ext/readline` устарел + +* У нас есть `reline`, чистая реализация на Ruby, совместимая с API `ext/readline`. Мы полагаемся на `reline` в будущем. Если вам нужно использовать `ext/readline`, вы можете установить `ext/readline` через rubygems.org с помощью `gem install readline-ext`. +* Теперь больше не нужно устанавливать библиотеки типа `libreadline` или `libedit`. + +## Обновления C API + +### Обновленные C API + +Следующие API обновлены. + + + +### Удаленные C API + +Следующие устаревшие API удалены. + + + +## Обновления стандартной библиотеки + +RubyGems и Bundler предупреждают пользователей, если требуется гем, который запланирован для включения в будущих версиях Ruby. + +Целевые библиотеки: + + * abbrev + * base64 + * bigdecimal + * csv + * drb + * getoptlong + * mutex_m + * nkf + * observer + * racc + * resolv-replace + * rinda + * syslog + +Следующий гем по умолчанию добавлен. + +* prism 0.15.1 + +Следующие гемы по умолчанию обновлены. + +* RubyGems 3.5.0.dev +* base64 0.2.0 +* benchmark 0.3.0 +* bigdecimal 3.1.5 +* bundler 2.5.0.dev +* cgi 0.4.0 +* csv 3.2.8 +* date 3.3.4 +* delegate 0.3.1 +* drb 2.2.0 +* english 0.8.0 +* erb 4.0.3 +* etc 1.4.3.dev.1 +* fcntl 1.1.0 +* fiddle 1.1.2 +* fileutils 1.7.2 +* find 0.2.0 +* getoptlong 0.2.1 +* io-console 0.6.1.dev +* irb 1.8.3 +* logger 1.6.0 +* mutex_m 0.2.0 +* net-http 0.4.0 +* net-protocol 0.2.2 +* nkf 0.1.3 +* observer 0.1.2 +* open-uri 0.4.0 +* open3 0.2.0 +* openssl 3.2.0 +* optparse 0.4.0 +* ostruct 0.6.0 +* pathname 0.3.0 +* pp 0.5.0 +* prettyprint 0.2.0 +* pstore 0.1.3 +* psych 5.1.1.1 +* rdoc 6.6.0 +* reline 0.3.9 +* rinda 0.2.0 +* securerandom 0.3.0 +* shellwords 0.2.0 +* singleton 0.2.0 +* stringio 3.0.9 +* strscan 3.0.7 +* syntax_suggest 1.1.0 +* tempfile 0.2.0 +* time 0.3.0 +* timeout 0.4.1 +* tmpdir 0.2.0 +* tsort 0.2.0 +* un 0.3.0 +* uri 0.13.0 +* weakref 0.1.3 +* win32ole 1.8.10 +* yaml 0.3.0 +* zlib 3.1.0 + +Следующий гем, включенный по умолчанию, продвигается из гемов по умолчанию. + +* racc 1.7.3 + +Следующие гемы, включенные по умолчанию, обновлены. + +* minitest 5.20.0 +* rake 13.1.0 +* test-unit 3.6.1 +* rexml 3.2.6 +* rss 0.3.0 +* net-imap 0.4.4 +* net-smtp 0.4.0 +* rbs 3.2.2 +* typeprof 0.21.8 +* debug 1.8.0 + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.2.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. diff --git a/ru/news/_posts/2023-12-25-ruby-3-3-0-released.md b/ru/news/_posts/2023-12-25-ruby-3-3-0-released.md new file mode 100644 index 0000000000..d1c9456f58 --- /dev/null +++ b/ru/news/_posts/2023-12-25-ruby-3-3-0-released.md @@ -0,0 +1,301 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.0" +author: "naruse" +translator: "suban05" +date: 2023-12-25 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.3.0" | first %} +Мы рады объявить о выпуске Ruby {{ release.version }}. Ruby 3.3 добавляет новый парсер под названием Prism, использует Lrama в качестве генератора парсеров, вводит новый чисто-рубиновый JIT-компилятор под названием RJIT и множество улучшений производительности, особенно YJIT. + +## Prism + +* Введен [парсер Prism](https://github.com/ruby/prism) в качестве гема по умолчанию + * Prism является портативным, терпимым к ошибкам и поддерживаемым рекурсивным спуском парсером для языка Ruby +* Prism готов к использованию в продакшн и активно поддерживается, его можно использовать вместо Ripper + * Доступна [обширная документация](https://ruby.github.io/prism/) о том, как использовать Prism + * Prism представляет собой как C-библиотеку, которая будет использоваться внутренне CRuby, так и Ruby гем, который может использоваться любыми инструментами, требующими разбора Ruby-кода + * Заметные методы в API Prism: + * `Prism.parse(source)`, который возвращает AST как часть объекта результата разбора + * `Prism.parse_comments(source)`, который возвращает комментарии + * `Prism.parse_success?(source)`, который возвращает true, если ошибок нет +* Если вас интересует внесение вклада, вы можете создать pull request или issue напрямую в [репозитории Prism](https://github.com/ruby/prism) +* Теперь вы можете использовать `ruby --parser=prism` или `RUBYOPT="--parser=prism"` для экспериментов с компилятором Prism. Обратите внимание, что этот флаг предназначен только для отладки. + +## Использование Lrama вместо Bison + +* Замена Bison на [генератор парсера Lrama LALR](https://github.com/ruby/lrama) [[Feature #19637]](https://bugs.ruby-lang.org/issues/19637) + * Если вас интересует, пожалуйста, ознакомьтесь с [Будущим видением парсера Ruby](https://rubykaigi.org/2023/presentations/spikeolaf.html) + * Внутренний парсер Lrama заменен на LR парсер, сгенерированный Racc для улучшения поддерживаемости + * Поддерживаются параметризованные правила `(?, *, +)`, которые будут использоваться в Ruby parse.y + +## YJIT + +* Существенные улучшения производительности по сравнению с Ruby 3.2 + * Поддержка распаковки и оставшихся аргументов была значительно улучшена. + * Регистры выделяются для операций со стеком виртуальной машины. + * Компилируются больше вызовов с необязательными аргументами. Также компилируются обработчики исключений. + * Неподдерживаемые типы вызовов и мегаморфные сайты вызовов больше не переходят к интерпретатору. + * Основные методы, такие как Rails `#blank?` и [специализированный `#present?`](https://github.com/rails/rails/pull/49909), встраиваются. + * `Integer#*`, `Integer#!=`, `String#!=`, `String#getbyte`, + `Kernel#block_given?`, `Kernel#is_a?`, `Kernel#instance_of?`, и `Module#===` + особенно оптимизированы. + * Скорость компиляции теперь немного выше, чем в Ruby 3.2. + * Теперь более чем в 3 раза быстрее интерпретатора на Optcarrot! +* Значительно улучшено использование памяти по сравнению с Ruby 3.2 + * Метаданные для скомпилированного кода используют гораздо меньше памяти. + * `--yjit-call-threshold` автоматически повышается с 30 до 120 + при наличии более 40 000 ISEQs в приложении. + * Добавлен `--yjit-cold-threshold`, чтобы пропускать компиляцию холодных ISEQ. + * На Arm64 генерируется более компактный код. +* Кодовый GC теперь отключен по умолчанию + * `--yjit-exec-mem-size` рассматривается как жесткий лимит, при котором компиляция нового кода прекращается. + * Нет резких падений производительности из-за кодового GC. + Лучшее поведение при копировании при перезапуске серверов с + [Pitchfork](https://github.com/shopify/pitchfork). + * Вы все еще можете включить кодовый GC при необходимости с помощью `--yjit-code-gc` +* Добавлена возможность `RubyVM::YJIT.enable`, которая позволяет включить YJIT во время выполнения + * Вы можете запустить YJIT, не изменяя аргументов командной строки или переменных среды. + Rails 7.2 будет [включать YJIT по умолчанию](https://github.com/rails/rails/pull/49947) + с использованием этого метода. + * Это также можно использовать для включения YJIT только после завершения загрузки вашего приложения. + `--yjit-disable` можно использовать, если вы хотите использовать другие параметры YJIT, отключив его при загрузке. +* Дополнительные статистики YJIT теперь доступны по умолчанию + * `yjit_alloc_size` и несколько других статистик, связанных с метаданными, теперь доступны по умолчанию. + * Статистика `ratio_in_yjit`, получаемая с помощью `--yjit-stats`, теперь доступна в релизных сборках, + для доступа к большинству статистик больше не требуется специальная статистическая или разработочная сборка. +* Добавлены дополнительные возможности профилирования + * Добавлено `--yjit-perf` для упрощения профилирования с использованием Linux perf. + * `--yjit-trace-exits` теперь поддерживает выборку с `--yjit-trace-exits-sample-rate=N` +* Проведено более тщательное тестирование и множество исправлений ошибок + +## RJIT + +* Введен чисто-рубиновый JIT-компилятор RJIT, заменивший MJIT. + * RJIT поддерживает только архитектуру x86-64 на платформах Unix. + * В отличие от MJIT, он не требует компилятора C во время выполнения. +* RJIT существует исключительно в экспериментальных целях. + * В продакшене рекомендуется продолжать использовать YJIT. +* Если вас интересует разработка JIT для Ruby, обратитесь к [презентации k0kubun на Day 3 RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3). + +### Планировщик потоков M:N + +* Введен планировщик потоков M:N. [[Feature #19842]](https://bugs.ruby-lang.org/issues/19842) + * Потоки M Ruby управляются N нативными потоками (потоками ОС), что снижает затраты на создание и управление потоками. + * Это может нарушить совместимость с C-расширениями, поэтому планировщик потоков M:N по умолчанию отключен в основном Ractor. + * Переменная среды `RUBY_MN_THREADS=1` активирует потоки M:N в основном Ractor. + * Потоки M:N включены в неосновных Ractor. + * Переменная среды `RUBY_MAX_CPU=n` устанавливает максимальное количество `N` (максимальное количество нативных потоков). По умолчанию это значение равно 8. + * Поскольку только один Ruby-поток на Ractor может работать одновременно, будет использовано меньшее из числа, указанного в `RUBY_MAX_CPU`, и числа запущенных Ractor. Таким образом, большинство приложений с одним Ractor будут использовать 1 нативный поток. + * Для поддержки блокирующих операций может использоваться больше `N` нативных потоков. + +## Улучшения производительности + +* `defined?(@ivar)` оптимизирован с использованием объектных форм. +* Разрешение имени, такое как `Socket.getaddrinfo`, теперь может быть прервано (в средах, где доступны pthreads). [[Feature #19965]](https://bugs.ruby-lang.org/issues/19965) +* Несколько улучшений производительности для сборщика мусора + * Молодые объекты, на которые ссылаются старые объекты, больше не сразу + переводятся в старшее поколение. Это значительно снижает частоту + основных сборок мусора. [[Feature #19678]](https://bugs.ruby-lang.org/issues/19678) + * Введена новая настройка `REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO` + для контроля числа незащищенных объектов, вызывающих основную сборку мусора. + По умолчанию установлено значение `0.01` (1%). Это значительно + снижает частоту основной сборки мусора. [[Feature #19571]](https://bugs.ruby-lang.org/issues/19571) + * Для многих основных типов были введены барьеры записи, которых ранее не было, + особенно для `Time`, `Enumerator`, `MatchData`, `Method`, `File::Stat`, `BigDecimal` + и нескольких других. Это значительно сокращает время минорных сборок мусора и частоту + основных сборок мусора. + * Большинство основных классов теперь используют переменную ширину выделения, в частности `Hash`, `Time`, + `Thread::Backtrace`, `Thread::Backtrace::Location`, `File::Stat`, `Method`. + Это делает эти классы быстрее для выделения и освобождения памяти, уменьшает использование памяти и снижает + фрагментацию кучи. + * Добавлена поддержка слабых ссылок в сборщик мусора. [[Feature #19783]](https://bugs.ruby-lang.org/issues/19783) + +## Другие значимые изменения с момента версии 3.2 + +### IRB + +IRB получил несколько улучшений, включая, но не ограничиваясь: + +* Расширенная интеграция `irb:rdbg`, обеспечивающая аналогичный опыт отладки, как в `pry-byebug` ([документация](https://github.com/ruby/irb#debugging-with-irb)). +* Поддержка пейджера для команд `ls`, `show_source` и `show_cmds`. +* Более точная и полезная информация от команд `ls` и `show_source`. +* Экспериментальное автодополнение с использованием анализа типов ([документация](https://github.com/ruby/irb#type-based-completion)). +* Теперь возможно изменять цвет шрифта и стиль шрифта в диалоге автодополнения с помощью введенного недавно класса Reline::Face ([документация](https://github.com/ruby/ruby/blob/master/doc/reline/face.md)) + +Кроме того, IRB также претерпел обширную рефакторизацию и получил десятки исправлений ошибок для упрощения будущих улучшений. + +Для более подробных обновлений обратитесь к статье [Раскрытие большого прорыва в IRB для Ruby 3.3](https://railsatscale.com/2023-12-19-irb-for-ruby-3-3/). + +## Проблемы совместимости + +Примечание: Исключая исправления ошибок функций. + +* Вызовы `it` без аргументов в блоке без обычных параметров считаются устаревшими. В Ruby 3.4 `it` будет ссылаться на первый параметр блока. [[Feature #18980]](https://bugs.ruby-lang.org/issues/18980) + +* `Regexp::new` теперь принимает только до 2 аргументов вместо 3. Это было устаревшим с Ruby 3.2. [[Bug #18797]](https://bugs.ruby-lang.org/issues/18797) + +### Удаленные переменные среды + +Следующие устаревшие методы среды удалены. + +* Переменная среды `RUBY_GC_HEAP_INIT_SLOTS` была устаревшей и не выполняла никаких действий. Вместо нее теперь используются переменные среды `RUBY_GC_HEAP_{0,1,2,3,4}_INIT_SLOTS`. [[Feature #19785]](https://bugs.ruby-lang.org/issues/19785) + +## Проблемы совместимости в стандартной библиотеке + +### `ext/readline` устарел + +* Мы имеем `reline`, чистую реализацию на Ruby, совместимую с API `ext/readline`. Мы будем полагаться на `reline` в будущем. Если вам нужно использовать `ext/readline`, вы можете установить `ext/readline` через rubygems.org с помощью `gem install readline-ext`. +* Нам больше не нужно устанавливать библиотеки типа `libreadline` или `libedit`. + +## Обновления стандартной библиотеки + +RubyGems и Bundler предупреждают, если пользователи используют `require` для следующих гемов без добавления их в Gemfile или gemspec. Это связано с тем, что они станут встроенными гемами в будущих версиях Ruby. + +Это предупреждение подавляется при использовании гема bootsnap. Мы рекомендуем запустить ваше приложение хотя бы один раз с переменной среды `DISABLE_BOOTSNAP=1`. Это ограничение текущей версии. + +Список целевых библиотек: + * abbrev + * base64 + * bigdecimal + * csv + * drb + * getoptlong + * mutex_m + * nkf + * observer + * racc + * resolv-replace + * rinda + * syslog + +Добавлен следующий встроенный гем: + +* prism 0.19.0 + +Обновлены следующие встроенные гемы: + +* RubyGems 3.5.3 +* abbrev 0.1.2 +* base64 0.2.0 +* benchmark 0.3.0 +* bigdecimal 3.1.5 +* bundler 2.5.3 +* cgi 0.4.1 +* csv 3.2.8 +* date 3.3.4 +* delegate 0.3.1 +* drb 2.2.0 +* english 0.8.0 +* erb 4.0.3 +* error_highlight 0.6.0 +* etc 1.4.3 +* fcntl 1.1.0 +* fiddle 1.1.2 +* fileutils 1.7.2 +* find 0.2.0 +* getoptlong 0.2.1 +* io-console 0.7.1 +* io-nonblock 0.3.0 +* io-wait 0.3.1 +* ipaddr 1.2.6 +* irb 1.11.0 +* json 2.7.1 +* logger 1.6.0 +* mutex_m 0.2.0 +* net-http 0.4.0 +* net-protocol 0.2.2 +* nkf 0.1.3 +* observer 0.1.2 +* open-uri 0.4.1 +* open3 0.2.1 +* openssl 3.2.0 +* optparse 0.4.0 +* ostruct 0.6.0 +* pathname 0.3.0 +* pp 0.5.0 +* prettyprint 0.2.0 +* pstore 0.1.3 +* psych 5.1.2 +* rdoc 6.6.2 +* readline 0.0.4 +* reline 0.4.1 +* resolv 0.3.0 +* rinda 0.2.0 +* securerandom 0.3.1 +* set 1.1.0 +* shellwords 0.2.0 +* singleton 0.2.0 +* stringio 3.1.0 +* strscan 3.0.7 +* syntax_suggest 2.0.0 +* syslog 0.1.2 +* tempfile 0.2.1 +* time 0.3.0 +* timeout 0.4.1 +* tmpdir 0.2.0 +* tsort 0.2.0 +* un 0.3.0 +* uri 0.13.0 +* weakref 0.1.3 +* win32ole 1.8.10 +* yaml 0.3.0 +* zlib 3.1.0 + +Следующий встроенный гем перенесен из списка встроенных гемов: + +* racc 1.7.3 + +Обновлены следующие встроенные гемы: + +* minitest 5.20.0 +* rake 13.1.0 +* test-unit 3.6.1 +* rexml 3.2.6 +* rss 0.3.0 +* net-ftp 0.3.3 +* net-imap 0.4.9 +* net-smtp 0.4.0 +* rbs 3.4.0 +* typeprof 0.21.9 +* debug 1.9.1 + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.2.0! + +Счастливого Рождества, счастливых праздников и наслаждайтесь программированием на Ruby 3.3! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. diff --git a/ru/news/_posts/2024-01-18-ruby-3-2-3-released.md b/ru/news/_posts/2024-01-18-ruby-3-2-3-released.md new file mode 100644 index 0000000000..96721d3e71 --- /dev/null +++ b/ru/news/_posts/2024-01-18-ruby-3-2-3-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.3" +author: "nagachika" +translator: "suban05" +date: 2024-01-18 09:00:00 +0000 +lang: ru +--- + +Выпущен Ruby 3.2.3. + +Этот выпуск включает множество исправлений ошибок. +Дополнительные сведения см. в разделе [GitHub releases](https://github.com/ruby/ruby/releases/tag/v3_2_3). + +Этот выпуск также включает обновление uri.gem до версии 0.12.2, содержащей исправление безопасности. +Пожалуйста, ознакомьтесь с подробностями по следующим темам. + +* [CVE-2023-36617: Уязвимость ReDoS в URI]({%link en/news/_posts/2023-06-29-redos-in-uri-CVE-2023-36617.md %}) + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.2.3" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие участники, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам сделать этот выпуск. +Благодарим их за их вклад. diff --git a/ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md b/ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md new file mode 100644 index 0000000000..e846764ed8 --- /dev/null +++ b/ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md @@ -0,0 +1,46 @@ +--- +layout: news_post +title: "CVE-2024-27280: Уязвимость переполнения буфера в StringIO" +author: "hsbt" +translator: "suban05" +date: 2024-03-21 4:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии StringIO gem 3.0.1.1 и 3.0.1.2, которые содержат исправление уязвимости переполнения буфера. +Этой уязвимости присвоен идентификатор CVE [CVE-2024-27280](https://www.cve.org/CVERecord?id=CVE-2024-27280). + +## Подробности + +Проблема была обнаружена в StringIO 3.0.1, распространяемой в Ruby версий 3.0.x до 3.0.6 и 3.1.x до 3.1.4. + +Методы `ungetbyte` и `ungetc` в StringIO могут читать за пределами строки, и последующий вызов `StringIO.gets` может вернуть значение из памяти. + +Эта уязвимость не затрагивает StringIO версии 3.0.3 и выше, а также Ruby версии 3.2.x и выше. + +## Рекомендуемые действия + +Рекомендуем обновить StringIO gem до версии 3.0.3 или выше. Для обеспечения совместимости с версией, включенной в более старые серии Ruby, вы можете обновить следующим образом: + +* Для пользователей Ruby 3.0: Обновите до `stringio` версии 3.0.1.1 +* Для пользователей Ruby 3.1: Обновите до `stringio` версии 3.0.1.2 + +Обратите внимание: StringIO 3.0.1.2 содержит не только исправление этой уязвимости, но и исправление ошибки для [[Bug #19389]](https://github.com/ruby/ruby/commit/1d24a931c458c93463da1d5885f33edef3677cc2). + +Вы можете использовать команду `gem update stringio` для обновления. Если вы используете bundler, добавьте `gem "stringio", ">= 3.0.1.2"` в ваш `Gemfile`. + +## Затронутые версии + +* Ruby 3.0.6 или ниже +* Ruby 3.1.4 или ниже +* StringIO gem 3.0.1 или ниже + +## Благодарности + +Благодарим [david_h1](https://hackerone.com/david_h1?type=user) за обнаружение этой проблемы. + +## История + +* Исправлена затронутая версия StringIO (3.0.2 -> 3.0.1) 2024-04-11 12:50:00 (UTC) +* Изначально опубликовано 2024-03-21 4:00:00 (UTC) diff --git a/ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md b/ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md new file mode 100644 index 0000000000..c3b5cf9d8b --- /dev/null +++ b/ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "CVE-2024-27281: Уязвимость RCE с .rdoc_options в RDoc" +author: "hsbt" +translator: "suban05" +date: 2024-03-21 4:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии RDoc gem 6.3.4.1, 6.4.1.1, 6.5.1.1 и 6.6.3.1, содержащие исправление уязвимости RCE. +Этой уязвимости присвоен идентификатор CVE [CVE-2024-27281](https://www.cve.org/CVERecord?id=CVE-2024-27281). + +## Подробности + +Проблема была обнаружена в RDoc версий с 6.3.3 по 6.6.2, распространяемой в Ruby версий 3.x до 3.3.0. + +При разборе файла `.rdoc_options` (используемого для конфигурации в RDoc) как YAML-файла возможна инъекция объектов и, как следствие, удаленное выполнение кода, так как нет ограничений на классы, которые могут быть восстановлены. + +При загрузке кэша документации также возможна инъекция объектов и последующее удаленное выполнение кода, если кэш был специально создан. + +## Рекомендуемые действия + +Рекомендуем обновить RDoc gem до версии 6.6.3.1 или выше. Для обеспечения совместимости с версией, включенной в более старые серии Ruby, вы можете обновить следующим образом: + +* Для пользователей Ruby 3.0: Обновите до `rdoc` версии 6.3.4.1 +* Для пользователей Ruby 3.1: Обновите до `rdoc` версии 6.4.1.1 +* Для пользователей Ruby 3.2: Обновите до `rdoc` версии 6.5.1.1 + +Вы можете использовать команду `gem update rdoc` для обновления. Если вы используете bundler, добавьте `gem "rdoc", ">= 6.6.3.1"` в ваш `Gemfile`. + +Обратите внимание: версии 6.3.4, 6.4.1, 6.5.1 и 6.6.3 содержат некорректное исправление. Рекомендуем обновиться до 6.3.4.1, 6.4.1.1, 6.5.1.1 и 6.6.3.1 вместо них. + +## Затронутые версии + +* Ruby 3.0.6 или ниже +* Ruby 3.1.4 или ниже +* Ruby 3.2.3 или ниже +* Ruby 3.3.0 +* RDoc gem 6.3.3 или ниже, 6.4.0 до 6.6.2 без патч-версий (6.3.4, 6.4.1, 6.5.1) + +## Благодарности + +Благодарим [ooooooo_q](https://hackerone.com/ooooooo_q?type=user) за обнаружение этой проблемы. + +## История + +* Изначально опубликовано 2024-03-21 4:00:00 (UTC) diff --git a/ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md b/ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md new file mode 100644 index 0000000000..fe412568f3 --- /dev/null +++ b/ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md @@ -0,0 +1,42 @@ +--- +layout: news_post +title: "CVE-2024-27282: Уязвимость чтения произвольного адреса памяти при поиске по регулярному выражению" +author: "hsbt" +translator: "suban05" +date: 2024-04-23 10:00:00 +0000 +tags: security +lang: ru +--- + +Мы выпустили версии Ruby 3.0.7, 3.1.5, 3.2.4 и 3.3.1, содержащие исправление уязвимости чтения произвольного адреса памяти при поиске по регулярному выражению. +Этой уязвимости присвоен идентификатор CVE [CVE-2024-27282](https://www.cve.org/CVERecord?id=CVE-2024-27282). + +## Подробности + +Проблема была обнаружена в Ruby версий 3.x до 3.3.0. + +Если данные, предоставленные атакующим, передаются в компилятор регулярных выражений Ruby, возможно извлечение произвольных данных кучи относительно начала текста, включая указатели и конфиденциальные строки. + +## Рекомендуемые действия + +Рекомендуем обновить Ruby до версии 3.3.1 или выше. Для обеспечения совместимости с более старыми версиями Ruby вы можете обновить следующим образом: + +* Для пользователей Ruby 3.0: Обновите до версии 3.0.7 +* Для пользователей Ruby 3.1: Обновите до версии 3.1.5 +* Для пользователей Ruby 3.2: Обновите до версии 3.2.4 +* Для пользователей Ruby 3.3: Обновите до версии 3.3.1 + +## Затронутые версии + +* Ruby 3.0.6 или ниже +* Ruby 3.1.4 или ниже +* Ruby 3.2.3 или ниже +* Ruby 3.3.0 + +## Благодарности + +Благодарим [sp2ip](https://hackerone.com/sp2ip?type=user) за обнаружение этой проблемы. + +## История + +* Изначально опубликовано 2024-04-23 10:00:00 (UTC) diff --git a/ru/news/_posts/2024-04-23-ruby-3-0-7-released.md b/ru/news/_posts/2024-04-23-ruby-3-0-7-released.md new file mode 100644 index 0000000000..ac37d4b549 --- /dev/null +++ b/ru/news/_posts/2024-04-23-ruby-3-0-7-released.md @@ -0,0 +1,52 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.0.7" +author: "hsbt" +translator: "suban05" +date: 2024-04-23 10:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.0.7. + +Этот выпуск включает исправления уязвимостей. Пожалуйста, ознакомьтесь с темами ниже для получения подробностей. + +* [CVE-2024-27282: Уязвимость чтения произвольного адреса памяти при поиске по регулярному выражению]({%link ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md %}) +* [CVE-2024-27281: Уязвимость RCE с .rdoc_options в RDoc]({%link ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md %}) +* [CVE-2024-27280: Уязвимость переполнения буфера в StringIO]({%link ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md %}) + +Дополнительные подробности смотрите в [релизах GitHub](https://github.com/ruby/ruby/releases/tag/v3_0_7). + +После этого выпуска Ruby 3.0 достигает конца своего жизненного цикла (EOL). Другими словами, это, вероятно, последний выпуск серии Ruby 3.0. +Мы не будем выпускать Ruby 3.0.8 даже в случае обнаружения уязвимости безопасности (но возможно, выпустим, если будет обнаружена серьезная регрессия). +Рекомендуем всем пользователям Ruby 3.0 начать миграцию на Ruby 3.3, 3.2 или 3.1 немедленно. + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.0.7" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад. diff --git a/ru/news/_posts/2024-04-23-ruby-3-1-5-released.md b/ru/news/_posts/2024-04-23-ruby-3-1-5-released.md new file mode 100644 index 0000000000..980efb3a47 --- /dev/null +++ b/ru/news/_posts/2024-04-23-ruby-3-1-5-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.5" +author: "hsbt" +translator: "suban05" +date: 2024-04-23 10:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.5. + +Этот выпуск включает исправления уязвимостей. Пожалуйста, ознакомьтесь с темами ниже для получения подробностей. + +* [CVE-2024-27282: Уязвимость чтения произвольного адреса памяти при поиске по регулярному выражению]({%link ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md %}) +* [CVE-2024-27281: Уязвимость RCE с .rdoc_options в RDoc]({%link ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md %}) +* [CVE-2024-27280: Уязвимость переполнения буфера в StringIO]({%link ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md %}) + +Дополнительные подробности смотрите в [релизах GitHub](https://github.com/ruby/ruby/releases/tag/v3_1_5). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.1.5" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад. diff --git a/ru/news/_posts/2024-04-23-ruby-3-2-4-released.md b/ru/news/_posts/2024-04-23-ruby-3-2-4-released.md new file mode 100644 index 0000000000..0d29fe5dbe --- /dev/null +++ b/ru/news/_posts/2024-04-23-ruby-3-2-4-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.2.4" +author: "hsbt" +translator: "suban05" +date: 2024-04-23 10:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.2.4. + +Этот выпуск включает исправления уязвимостей. Пожалуйста, ознакомьтесь с темами ниже для получения подробностей. + +* [CVE-2024-27282: Уязвимость чтения произвольного адреса памяти при поиске по регулярному выражению]({%link ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md %}) +* [CVE-2024-27281: Уязвимость RCE с .rdoc_options в RDoc]({%link ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md %}) +* [CVE-2024-27280: Уязвимость переполнения буфера в StringIO]({%link ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md %}) + +Дополнительные подробности смотрите в [релизах GitHub](https://github.com/ruby/ruby/releases/tag/v3_2_4). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.2.4" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад. diff --git a/ru/news/_posts/2024-04-23-ruby-3-3-1-released.md b/ru/news/_posts/2024-04-23-ruby-3-3-1-released.md new file mode 100644 index 0000000000..a2d4c011b2 --- /dev/null +++ b/ru/news/_posts/2024-04-23-ruby-3-3-1-released.md @@ -0,0 +1,48 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.1" +author: "hsbt" +translator: "suban05" +date: 2024-04-23 10:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.3.1. + +Этот выпуск включает исправления уязвимостей. Пожалуйста, ознакомьтесь с темами ниже для получения подробностей. + +* [CVE-2024-27282: Уязвимость чтения произвольного адреса памяти при поиске по регулярному выражению]({%link ru/news/_posts/2024-04-23-arbitrary-memory-address-read-regexp-cve-2024-27282.md %}) +* [CVE-2024-27281: Уязвимость RCE с .rdoc_options в RDoc]({%link ru/news/_posts/2024-03-21-rce-rdoc-cve-2024-27281.md %}) +* [CVE-2024-27280: Уязвимость переполнения буфера в StringIO]({%link ru/news/_posts/2024-03-21-buffer-overread-cve-2024-27280.md %}) + +Дополнительные подробности смотрите в [релизах GitHub](https://github.com/ruby/ruby/releases/tag/v3_3_1). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.3.1" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад. diff --git a/ru/news/_posts/2024-05-16-dos-rexml-cve-2024-35176.md b/ru/news/_posts/2024-05-16-dos-rexml-cve-2024-35176.md new file mode 100644 index 0000000000..3e5d748450 --- /dev/null +++ b/ru/news/_posts/2024-05-16-dos-rexml-cve-2024-35176.md @@ -0,0 +1,29 @@ +--- +layout: news_post +title: "CVE-2024-35176: Уязвимость DoS в REXML" +author: "kou" +translator: "suban05" +date: 2024-05-16 05:00:00 +0000 +tags: security +lang: ru +--- + +В gem REXML обнаружена уязвимость DoS. Этой уязвимости присвоен идентификатор CVE [CVE-2024-35176](https://www.cve.org/CVERecord?id=CVE-2024-35176). Мы настоятельно рекомендуем обновить gem REXML. + +## Подробности + +При разборе XML-документа, содержащего много символов `<` в значении атрибута, gem REXML может занять много времени. + +Пожалуйста, обновите gem REXML до версии 3.2.7 или более поздней. + +## Уязвимые версии + +* gem REXML версии 3.2.6 и более ранние + +## Благодарности + +Благодарим [mprogrammer](https://hackerone.com/mprogrammer) за обнаружение этой проблемы. + +## История + +* Первоначально опубликовано 2024-05-16 05:00:00 (UTC) diff --git a/ru/news/_posts/2024-05-16-ruby-3-4-0-preview1-released.md b/ru/news/_posts/2024-05-16-ruby-3-4-0-preview1-released.md new file mode 100644 index 0000000000..9289e3285d --- /dev/null +++ b/ru/news/_posts/2024-05-16-ruby-3-4-0-preview1-released.md @@ -0,0 +1,129 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.4.0 preview1" +author: "naruse" +translator: "suban05" +date: 2024-05-16 00:00:00 +0000 +lang: ru +--- + +{% assign release = site.data.releases | where: "version", "3.4.0-preview1" | first %} +Мы рады объявить о выпуске Ruby {{ release.version }}. + +## Изменения в языке + +* Строковые литералы в файлах без комментария `frozen_string_literal` теперь ведут себя как замороженные. + Если они изменены, выдается предупреждение об устаревании. + Эти предупреждения можно включить с помощью `-W:deprecated` или установив `Warning[:deprecated] = true`. + Чтобы отключить это изменение, можно запустить Ruby с аргументом командной строки `--disable-frozen-string-literal`. [[Feature #20205]] + +* Добавлен `it` для ссылки на параметр блока. [[Feature #18980]] + +* Поддерживается распаковка ключевых слов `nil` при вызове методов. + `**nil` трактуется аналогично `**{}`, не передавая никаких ключевых слов и не вызывая методы преобразования. [[Bug #20064]] + +* Передача блока более не допускается в индексе. [[Bug #19918]] + +* Ключевые аргументы больше не допускаются в индексе. [[Bug #20218]] + +## Обновления основных классов + +Примечание: За исключением исправления ошибок. + +* Exception + + * Exception#set_backtrace теперь принимает массивы `Thread::Backtrace::Location`. + `Kernel#raise`, `Thread#raise` и `Fiber#raise` также принимают этот новый формат. [[Feature #13557]] + +* Range + + * Range#size теперь вызывает TypeError, если диапазон не итерируемый. [[Misc #18984]] + +## Проблемы совместимости + +Примечание: исключены исправления ошибок функций. + +* Сообщения об ошибках и отображение трассировок изменены. + * Используется одинарная кавычка вместо обратной для открытия кавычек. [[Feature #16495]] + * Отображение имени класса перед именем метода (только если у класса есть постоянное имя). [[Feature #19117]] + * Методы `Kernel#caller`, `Thread::Backtrace::Location` и другие изменены соответственно. + + ``` + Старый вариант: + test.rb:1:in `foo': undefined method `time' for an instance of Integer + from test.rb:2:in `
' + + Новый вариант: + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer + from test.rb:2:in `
' + ``` + +## Обновления C API + +* `rb_newobj` и `rb_newobj_of` (и соответствующие макросы `RB_NEWOBJ`, `RB_NEWOBJ_OF`, `NEWOBJ`, `NEWOBJ_OF`) удалены. [[Feature #20265]] +* Удалена устаревшая функция `rb_gc_force_recycle`. [[Feature #18290]] + +## Улучшения реализации + +* `Array#each` переписан на Ruby для повышения производительности [[Feature #20182]]. + +## Прочие изменения + +* Передача блока методу, который не использует переданный блок, будет показывать предупреждение в режиме verbose (`-w`). + [[Feature #15554]] + +* Повторное определение некоторых основных методов, специально оптимизированных интерпретатором + и JIT, таких как `String.freeze` или `Integer#+`, теперь вызывает предупреждение о производительности + (`-W:performance` или `Warning[:performance] = true`). + [[Feature #20429]] + +Для получения дополнительной информации о стандартных и пакетных гемах обратитесь к GitHub-релизам, таким как [Logger](https://github.com/ruby/logger/releases) или к изменениям в журнале изменений. + +Подробности о новостях смотрите в [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) +или [логах коммитов](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}) +для получения дополнительной информации. + +С учетом этих изменений, [{{ release.stats.files_changed }} файлов изменено, {{ release.stats.insertions }} добавлено(+), {{ release.stats.deletions }} удалено(-)](https://github.com/ruby/ruby/compare/v3_3_0...{{ release.tag }}#file_bucket) +с момента Ruby 3.3.0! + +## Скачать + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Что такое Ruby + +Ruby был разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас развивается как открытое программное обеспечение. Он работает на множестве платформ и широко используется по всему миру, особенно в веб-разработке. + +[Feature #13557]: https://bugs.ruby-lang.org/issues/13557 +[Feature #15554]: https://bugs.ruby-lang.org/issues/15554 +[Feature #16495]: https://bugs.ruby-lang.org/issues/16495 +[Feature #18290]: https://bugs.ruby-lang.org/issues/18290 +[Feature #18980]: https://bugs.ruby-lang.org/issues/18980 +[Misc #18984]: https://bugs.ruby-lang.org/issues/18984 +[Feature #19117]: https://bugs.ruby-lang.org/issues/19117 +[Bug #19918]: https://bugs.ruby-lang.org/issues/19918 +[Bug #20064]: https://bugs.ruby-lang.org/issues/20064 +[Feature #20182]: https://bugs.ruby-lang.org/issues/20182 +[Feature #20205]: https://bugs.ruby-lang.org/issues/20205 +[Bug #20218]: https://bugs.ruby-lang.org/issues/20218 +[Feature #20265]: https://bugs.ruby-lang.org/issues/20265 +[Feature #20429]: https://bugs.ruby-lang.org/issues/20429 diff --git a/ru/news/_posts/2024-05-29-ruby-3-1-6-released.md b/ru/news/_posts/2024-05-29-ruby-3-1-6-released.md new file mode 100644 index 0000000000..d23723e533 --- /dev/null +++ b/ru/news/_posts/2024-05-29-ruby-3-1-6-released.md @@ -0,0 +1,49 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.1.6" +author: "hsbt" +translator: "suban05" +date: 2024-05-29 9:00:00 +0000 +lang: ru +--- + +Вышел Ruby 3.1.6. + +Серия Ruby 3.1 теперь находится в фазе поддержки безопасности. В общем, на этом этапе мы будем исправлять только проблемы с безопасностью. Однако после выпуска Ruby 3.1.5 возникли несколько проблем со сборкой. Мы решили выпустить Ruby 3.1.6, чтобы исправить эти проблемы. + +Пожалуйста, ознакомьтесь с деталями ниже. + +* [Ошибка #20151: Невозможно собрать Ruby 3.1 на FreeBSD 14.0](https://bugs.ruby-lang.org/issues/20151) +* [Ошибка #20451: Плохой backport Ruby 3.1.5 вызывает сбой сборки fiddle](https://bugs.ruby-lang.org/issues/20451) +* [Ошибка #20431: Сбой сборки Ruby 3.3.0 с make: *** \[io_buffer.o\] Error 1](https://bugs.ruby-lang.org/issues/20431) + +Подробности смотрите в [релизах на GitHub](https://github.com/ruby/ruby/releases/tag/v3_1_6). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.1.6" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, предоставившие отчеты об ошибках, помогли нам выпустить эту версию. Спасибо за их вклад. diff --git a/ru/news/_posts/2024-05-30-datadog-oss-program.md b/ru/news/_posts/2024-05-30-datadog-oss-program.md new file mode 100644 index 0000000000..8c9b3002ec --- /dev/null +++ b/ru/news/_posts/2024-05-30-datadog-oss-program.md @@ -0,0 +1,28 @@ +--- +layout: news_post +title: "Datadog предоставляет поддержку сообщества с открытым исходным кодом для ruby-lang.org" +author: "hsbt" +translator: "suban05" +date: 2024-05-30 00:00:00 +0000 +lang: ru +--- + +Мы рады объявить, что официальный сайт Ruby, ruby-lang.org, начал использовать Datadog для мониторинга благодаря [поддержке сообщества с открытым исходным кодом от Datadog](https://opensource.datadoghq.com/projects/oss-program/). + +Это позволяет нам эффективно мониторить производительность и доступность сайта в реальном времени для пользователей Ruby. Основные преимущества использования Datadog включают следующее. + +## Видимость CDN + +cache.ruby-lang.org, предоставляемый Fastly, является важнейшей инфраструктурой экосистемы Ruby. Datadog позволяет мониторить производительность сети доставки контента (CDN). Он отслеживает охват кэша, уровень ошибок, улучшая пользовательский опыт. + +## Единая визуализация данных + +У нас есть различные веб-сервисы для ruby-lang.org. Datadog позволяет визуализировать данные аналитики логов вместе с метриками и данными мониторинга производительности приложений (APM) на одних и тех же панелях. + +## Видимость трассировки JIT + +Используя возможности трассировки Datadog, мы можем захватывать трассы, когда запросы проходят через веб-серверы и базы данных. Это помогает выявлять узкие места и проблемные запросы. + +Мы опубликовали [публичную панель мониторинга](https://p.ap1.datadoghq.com/sb/1271b83e-af90-11ee-9072-da7ad0900009-01633a8fa8c0b0c0051f1889afdf55dc) наших ключевых метрик. Мы будем обновлять панель по мере улучшения нашего мониторинга, особенно производительности YJIT. + +Мы надеемся, что внедрение Datadog поспособствует улучшению производительности сайта для сообщества Ruby. Пожалуйста, продолжайте использовать ruby-lang.org и наслаждайтесь улучшенным пользовательским опытом. diff --git a/ru/news/_posts/2024-05-30-ruby-3-3-2-released.md b/ru/news/_posts/2024-05-30-ruby-3-3-2-released.md new file mode 100644 index 0000000000..591456af5b --- /dev/null +++ b/ru/news/_posts/2024-05-30-ruby-3-3-2-released.md @@ -0,0 +1,43 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.2" +author: "k0kubun" +translator: "suban05" +date: 2024-05-30 03:50:00 +0000 +lang: ru +--- + +Вышел Ruby 3.3.2. + +Этот выпуск включает множество исправлений ошибок. +См. подробности на [GitHub releases](https://github.com/ruby/ruby/releases/tag/v3_3_2). + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.3.2" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, которые предоставляли отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад. diff --git a/ru/news/_posts/2024-06-12-ruby-3-3-3-released.md b/ru/news/_posts/2024-06-12-ruby-3-3-3-released.md new file mode 100644 index 0000000000..2360ce436b --- /dev/null +++ b/ru/news/_posts/2024-06-12-ruby-3-3-3-released.md @@ -0,0 +1,53 @@ +--- +layout: news_post +title: "Выпуск Ruby 3.3.3" +author: "k0kubun" +translator: "suban05" +date: 2024-06-12 00:30:00 +0000 +lang: ru +--- + +Вышел Ruby 3.3.3. + +Этот релиз включает: + +* RubyGems 3.5.11 +* Bundler 2.5.11 +* REXML 3.2.8 +* strscan 3.0.9 +* `--dump=prism_parsetree` заменен на `--parser=prism --dump=parsetree` +* Недопустимые символы кодировки вызывают `SyntaxError` вместо `EncodingError` +* Исправлена утечка памяти при разборе в Ripper +* Исправления ошибок для YJIT, `**{}`, `Ripper.tokenize`, `RubyVM::InstructionSequence#to_binary`, `--with-gmp` и некоторых сборочных окружений + +Пожалуйста, ознакомьтесь с [релизами на GitHub](https://github.com/ruby/ruby/releases/tag/v3_3_3) для получения дополнительных деталей. + +## Скачать + +{% assign release = site.data.releases | where: "version", "3.3.3" | first %} + +* <{{ release.url.gz }}> + + SIZE: {{ release.size.gz }} + SHA1: {{ release.sha1.gz }} + SHA256: {{ release.sha256.gz }} + SHA512: {{ release.sha512.gz }} + +* <{{ release.url.xz }}> + + SIZE: {{ release.size.xz }} + SHA1: {{ release.sha1.xz }} + SHA256: {{ release.sha256.xz }} + SHA512: {{ release.sha512.xz }} + +* <{{ release.url.zip }}> + + SIZE: {{ release.size.zip }} + SHA1: {{ release.sha1.zip }} + SHA256: {{ release.sha256.zip }} + SHA512: {{ release.sha512.zip }} + +## Комментарий к выпуску + +Многие коммитеры, разработчики и пользователи, которые предоставляли отчеты об ошибках, помогли нам в создании этого выпуска. +Благодарим их за вклад.