Вийшов реліз версії Ruby 3.0.0 — розробники з 2015 року йшли до реалізації Ruby 3, яка була б зосереджена на продуктивності, типізації та паралелізмі. П'ять років тому автор проєкту запропонував концепцію Ruby 3x3 — мову втричі швидшу, ніж Ruby 2. Завдяки JIT-компіляції цього зрештою вдалось досягнути.
Ключові оновлення у Ruby 3.0.0
Покращена продуктивність під час робочих навантажень, зокрема ігор (тест Optcarrot), AI (Rubykon) чи інших застосунків, які більшість часу витрачають на багаторазові виклики кількох методів.
У Ruby 3.0 помітно зменшився обсяг JIT-коду. Щоправда, JIT ще не готовий для оптимізацій застосунків через Rails, але це хочуть виправити у випуску Ruby 3.1.
З'явилась підтримка actor-моделі Ractor, поки експериментальна. Це абстракція для паралельного виконання застосунків, під час якого не виникає проблем із безпекою потоків. Можна робити кілька таких ракторів та запускати їх паралельно.
Планувальник Fiber#scheduler
, який може перехоплювати операції блокування. Це допомагає полегшити паралелізм без змін у коді. Підтримує такі класи й методи:
-
Mutex#lock
,Mutex#unlock
,Mutex#sleep
-
ConditionVariable#wait
-
Queue#pop
,SizedQueue#push
-
Thread#join
-
Kernel#sleep
-
Process.wait
-
IO#wait
,IO#read
,IO#write
та суміжні методи (на кшталт#wait_readable
,#gets
,#puts
), але не підтримуєIO#select
.
RBS — засіб для анотації типів, який підтримує найбільш поширені патерни у Ruby-застосунках. Зазначено, що інструментам перевірки типів (на кшталт TypeProf) легше аналізувати програми з анотаціями RBS. Можна описувати класи й модулі: зокрема методи, визначені в класі, змінні екземплярів та їхні типи, а також зв'язки між модулями (змішування й успадкування, inheritance/mix-in).
TypeProf — інструмент для аналізу типів. Він читає простий код на Ruby (без анотацій), аналізує використані методи, а тоді генерує прототип анотації типів у RBS-форматі. Також можна скористатись онлайн-версією TypeProf.
Серед інших функцій:
- Доданий оператор
=>
(значення => змінна).
0 => a
p a #=> 0
{b: 0, c: 1} => {b:}
p b #=> 0
-
in
тепер може повертатиtrue
іfalse
.
# version 3.0
0 in 1 #=> false
# version 2.7
0 in 1 #=> raise NoMatchingPatternError
-
Вбудований метод
Hash#except
. -
З'явився експериментальний шаблон для пошуку:
case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
in [*pre, String => x, String => y, *post]
p pre #=> ["a", 1]
p x #=> "b"
p y #=> "c"
p post #=> [2, "d", "e", "f", 3]
end
Також у випуску Ruby 3.0.0 оптимізували продуктивність інтерпретатора IRB, він став у 53 рази швидшим, ніж у версії Ruby 2.7.0. Детальніше про це та інші оновлення Ruby можна прочитати на сторінці релізу.
Ще немає коментарів