Вийшов Ruby 3.2.0 Preview 1
Опублікував naruse 03-04-2022
Переклав: Andrii Furmanets
Ми раді оголосити випуск Ruby 3.2.0-preview1. Ruby 3.2 додає багато функцій та покращень продуктивності.
Підтримка WASI на основі WebAssembly
Це початковий порт підтримки WASI на основі WebAssembly. Це дозволяє бінарному файлу CRuby бути доступним у веб-браузері, середовищі Serverless Edge та інших вбудовувачах WebAssembly/WASI. Зараз цей порт проходить базові та bootstrap тестові набори, які не використовують Thread API.

Передісторія
WebAssembly (Wasm) спочатку введено для запуску програм безпечно та швидко у веб-браузерах. Але його мета - запуск програм ефективно з безпекою на різних середовищах - довго бажана не лише вебом, але й загальними додатками.
WASI (The WebAssembly System Interface) розроблено для таких випадків використання. Хоча такі додатки потребують спілкування з операційними системами, WebAssembly працює на віртуальній машині, яка не мала системного інтерфейсу. WASI стандартизує це.
Підтримка WebAssembly/WASI в Ruby має на меті використати ці проекти. Вона дозволяє розробникам Ruby писати додатки, які працюють на такій обіцяній платформі.
Випадок використання
Ця підтримка дозволяє розробникам використовувати CRuby в середовищі WebAssembly. Приклад випадку використання - підтримка CRuby TryRuby playground. Тепер ви можете спробувати оригінальний CRuby у вашому веб-браузері.
Технічні моменти
Сьогоднішні WASI та WebAssembly самі мають деякі відсутні функції для реалізації Fiber, винятків та GC, оскільки вони все ще розвиваються, а також з міркувань безпеки. Тому CRuby заповнює прогалину, використовуючи Asyncify, який є технікою бінарного перетворення для контролю виконання в userland.
Крім того, ми побудували VFS поверх WASI, щоб ми могли легко упакувати додатки Ruby в один .wasm файл. Це робить розповсюдження додатків Ruby трохи простішим.
Пов’язані посилання
Regexp timeout
Введено функцію таймауту для зіставлення Regexp.
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError піднімається за одну секунду
Відомо, що зіставлення Regexp може зайняти несподівано довго. Якщо ваш код намагається зіставити можливо неефективний Regexp з ненадійним вводом, зловмисник може використати це для ефективної Denial of Service (так звана Regular expression DoS, або ReDoS).
Ризик DoS може бути запобігнутий або значно пом’якшений налаштуванням Regexp.timeout відповідно до вимог вашого додатку Ruby. Будь ласка, спробуйте це у вашому додатку та вітаємо ваш відгук.
Зауважте, що Regexp.timeout є глобальною конфігурацією. Якщо ви хочете використовувати різні налаштування таймауту для деяких спеціальних Regexps, ви можете використати ключове слово timeout для Regexp.new.
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
Інші помітні нові функції
Більше не включати джерела 3-х сторін
-
Ми більше не включаємо джерела 3-х сторін, такі як
libyaml,libffi.-
Джерело libyaml було видалено з psych. Вам може знадобитися встановити
libyaml-devна платформі Ubuntu/Debian. Назва пакета може відрізнятися на інших платформах. -
libffi буде видалено з
fiddleна preview2
-
Мова
- Find pattern більше не є експериментальним.
Покращення продуктивності
Інші помітні зміни з 3.1
- Hash
- Hash#shift тепер завжди повертає nil, якщо hash порожній, замість повернення значення за замовчуванням або виклику default proc. [[Помилка #16908]]
- MatchData
- MatchData#byteoffset додано. [[Функція #13110]]
- Module
- Module.used_refinements додано. [[Функція #14332]]
- Module#refinements додано. [[Функція #12737]]
- Module#const_added додано. [[Функція #17881]]
- Proc
- Proc#dup повертає екземпляр підкласу. [[Помилка #17545]]
- Proc#parameters тепер приймає ключове слово lambda. [[Функція #15357]]
- Refinement
- Refinement#refined_class додано. [[Функція #12737]]
- Set
- Set тепер доступний як вбудований клас без необхідності
require "set". [[Функція #16989]] Він зараз автозавантажується через константуSetабо викликEnumerable#to_set.
- Set тепер доступний як вбудований клас без необхідності
- String
- String#byteindex та String#byterindex додано. [[Функція #13110]]
- Оновлено Unicode до Версії 14.0.0 та Emoji Версії 14.0. [[Функція #18037]] (також застосовується до Regexp)
- String#bytesplice додано. [[Функція #18598]]
- Struct
- Клас Struct також може бути ініціалізований з ключовими аргументами
без
keyword_init: trueнаStruct.new[[Функція #16806]]
- Клас Struct також може бути ініціалізований з ключовими аргументами
без
Оновлення стандартних бібліотек
-
Наступні default gem оновлено.
- TBD
-
Наступні включені gems оновлено.
- TBD
-
Наступні default gems тепер є bundled gems. Вам потрібно додати наступні бібліотеки до
Gemfileв середовищі bundler.- TBD
Див. NEWS або логи комітів для більше деталей.
З цими змінами, 1058 файлів змінено, 34946 додано(+), 29962 видалено(-) з Ruby 3.1.0!
Завантаження
-
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.tar.gz
РОЗМІР: 20728782 SHA1: 7c4197e67f230b0c5d011f4efb9b9158743a61c8 SHA256: 6946b966c561d5dfc2a662b88e8211be30bfffc7bb2f37ce3cc62d6c46a0b818 SHA512: d24e77161996c2085f613a86d1ed5ef5c5bf0e18eb459f6a93a0014a5d2ce41079283b4283d24cb96448a0986c8c6c52a04584abd4e73911ea59cefeb786836e -
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.tar.xz
РОЗМІР: 15011400 SHA1: 6bcc30ac670ab391997e0d68ba97b451db078934 SHA256: 6d28477f7fa626b63bf139afd37bcfeb28fce6847b203fa10f37cb3615d0c35d SHA512: 0eca2c346b995d265df2659b4215ff96e515c29926c2a6256caad99db9c4c51fec1a2d899ca63a00010d4111060dc0fdd4f591be84c0a2c43b6303879de3c5de -
https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.0-preview1.zip
РОЗМІР: 25370458 SHA1: 3c93c2e775366eec6e93cf670fc8677934cb4e48 SHA256: 24f8ae73d56366453defb0654de624bd1c063921a1d7ac780e4da56bb8fbf7e4 SHA512: 9754f11aa167df167d1b336e5c660aab1bd9e12421c093e0fe96e9a2da4ffb9859b7ea5263473bbc7b57ac8b5568cf7ac3116c0abdc647e1ff97a8d060ff7eae
Що таке Ruby
Ruby вперше розроблено Matz (Yukihiro Matsumoto) у 1993 році, і зараз розробляється як Open Source. Він працює на кількох платформах та використовується по всьому світу, особливо для веб-розробки.
Останні новини
Вийшов Ruby 4.0.0
Ми раді повідомити про випуск Ruby 4.0.0. Ruby 4.0 представляє “Ruby Box” та “ZJIT”, а також додає багато покращень.
Опублікував naruse 25-12-2025
Новий вигляд документації Ruby
Слідом за ре-дизайном ruby-lang.org, ми маємо більше новин, щоб відсвяткувати 30-річчя Ruby: docs.ruby-lang.org має повністю новий вигляд завдяки Aliki — новій темі за замовчуванням для...
Опублікував Stan Lo 23-12-2025
Оновлення айдентики нашого сайту
Раді оголосити про комплексне оновлення нашого сайту. Дизайн для цього оновлення створила Taeko Akatsuka.
Опублікував Hiroshi SHIBATA 22-12-2025
Вийшов Ruby 4.0.0 preview3
Раді повідомити про вихід Ruby 4.0.0-preview3. Ruby 4.0 вводить Ruby::Box і “ZJIT” та додає багато покращень.
Опублікував naruse 18-12-2025