Реліз Ruby 3.0.0

3 хв. читання

Вийшов реліз версії Ruby 3.0.0 — розробники з 2015 року йшли до реалізації Ruby 3, яка була б зосереджена на продуктивності, типізації та паралелізмі. П'ять років тому автор проєкту запропонував концепцію Ruby 3x3 — мову втричі швидшу, ніж Ruby 2. Завдяки JIT-компіляції цього зрештою вдалось досягнути.

ruby3x3

Ключові оновлення у 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 можна прочитати на сторінці релізу.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 5.8K
Приєднався: 8 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація