Вийшов Ruby 3.1.0 Preview 1
Опублікував naruse 09-11-2021
Переклав: Andrii Furmanets
Ми раді оголосити випуск Ruby 3.1.0-preview1.
YJIT: Новий експериментальний in-process JIT компілятор
Ruby 3.1 об’єднує YJIT, новий in-process JIT компілятор, розроблений Shopify.
З того часу, як Ruby 2.6 ввів MJIT у 2018, його продуктивність значно покращилася, і нарешті ми досягли Ruby3x3 минулого року. Але навіть незважаючи на те, що 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 для детального вступу.
З цією технологією YJIT досягає як швидкого часу прогріву, так і покращень продуктивності на більшості реального програмного забезпечення, до 22% на railsbench, 39% на liquid-render.
YJIT все ще є експериментальною функцією, і як така, вона вимкнена за замовчуванням. Якщо ви хочете використати це, вкажіть опцію командного рядка --yjit, щоб увімкнути YJIT. Вона також обмежена macOS & Linux на платформах x86-64 зараз.
- https://bugs.ruby-lang.org/issues/18229
- https://shopify.engineering/yjit-just-in-time-compiler-cruby
- https://www.youtube.com/watch?v=PBVLf3yfMs8
debug gem: Новий дебагер
Новий дебагер debug.gem включено. debug.gem - це швидка реалізація дебагера, і вона надає багато функцій, таких як віддалений дебагінг, кольоровий REPL, інтеграція IDE (VSCode) та інше. Він замінює стандартну бібліотеку lib/debug.rb.
error_highlight: Детальне розташування помилки в backtrace
Вбудований gem, error_highlight, введено. Він включає детальне розташування помилки в backtrace:
$ ruby test.rb
test.rb:1:in `<main>': undefined method `time' for 1:Integer (NoMethodError)
1.time {}
^^^^^
Did you mean? times
Цей gem увімкнено за замовчуванням. Ви можете вимкнути його, використовуючи опцію командного рядка --disable-error_highlight. Див. репозиторій детально.
Покращення Irb
Буде описано в наступному preview.
Інші помітні нові функції
Мова
- Значення в літералах Hash та ключових аргументах можуть бути пропущені. [Функція #14579]
{x:, y:}є синтаксичним цукром для{x: x, y: y}.foo(x:, y:)є синтаксичним цукром дляfoo(x: x, y: y).
- Оператор pin в pattern matching тепер приймає вираз. [Функція #17411]
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. Див. репозиторій для деталей.
Оновлення з Ruby 3.0.0:
rbs collectionвведено для управління RBS gems. doc- Багато підписів для вбудованих та стандартних бібліотек було додано/оновлено.
- Він також включає багато виправлень помилок та покращень продуктивності.
Див. CHANGELOG.md для більше інформації.
TypeProf
TypeProf - це статичний аналізатор типів для Ruby. Він генерує прототип RBS з коду Ruby без анотацій типів. Див. документ для деталей.
Оновлення з Ruby 3.0.0:
- Експериментальна підтримка IDE реалізовано.
- Багато виправлень помилок та покращень продуктивності.
Покращення продуктивності
- MJIT
- Для навантажень, таких як Rails, значення за замовчуванням
--jit-max-cacheзмінено з 100 на 10000. JIT компілятор більше не пропускає компіляцію методів довших за 1000 інструкцій. - Для підтримки Zeitwerk з Rails, JIT-компільований код більше не скасовується коли TracePoint для подій класу увімкнено.
- Для навантажень, таких як Rails, значення за замовчуванням
Інші помітні зміни з 3.0
- Однолінійний pattern matching, наприклад,
ary => [x, y, z], більше не є експериментальним. - Порядок оцінки множинного присвоєння змінено трохи. [Помилка #4443]
foo[0], bar[0] = baz, quxоцінювався в порядкуbaz,qux,foo, а потімbarв Ruby 3.0. В Ruby 3.1, він оцінюється в порядкуfoo,bar,baz, а потімqux.
- Variable Width Allocation: Strings (експериментально) [Помилка #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
- Наступні включені gems оновлено.
- 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
- Наступні default gems тепер є bundled gems.
- net-ftp
- net-imap
- net-pop
- net-smtp
- matrix
- prime
Див. NEWS або логи комітів для більше деталей.
З цими змінами, 2963 файлів змінено, 529321 додано(+), 92305 видалено(-) з Ruby 3.0.0!
Завантаження
-
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.gz
РОЗМІР: 20821221 SHA1: 40dfd3db076a49fab9a0eee51e89d9b3d16a4e23 SHA256: 540f49f4c3aceb1a5d7fb0b8522a04dd96bc4a22f9660a6b59629886c8e010d4 SHA512: 63f528f20905827d03649ed9804e4a4e5c15078f9c6c8efcfb306baa7baafa17a406eb09a2c08b42e151e14af33b1aadbd9fb1cc84f9353d070b54bbf1ff950d -
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.tar.xz
РОЗМІР: 15742844 SHA1: 22aa861b17031cd1b163b7443f5f2f5897c5895e SHA256: 86a836ad42f6a7a469fce71ffec48fd3184af55bf79e488b568a4f64adee551d SHA512: bdbd7c624197ca478658280d84123a8c12ae72425bc566dcc75989c5b5ef114dd57e64efc09e2413ed615d9b47621a70ace0f3612e8ca7ba853822ad9e88c0b0 -
https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0-preview1.zip
РОЗМІР: 25019629 SHA1: ef5fa22890e55935db4b96b3089a8aea1335bd85 SHA256: 4e8d118b2365164873148ac545a8fa36c098b846a9b19ebb9037f8ee9adb4414 SHA512: 917803aac0848e00871614a09740b5c9cca26f200d68580dde61666633f1b7fee506e25ea4ed0c38eb20149417bf9f1ed449a4d2aec5b726de670e7177e5c07a
Що таке 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