Випуск мови програмування Ruby 3.1

Відбувся реліз Ruby 3.1.0, динамічної об'єктно-орієнтованої мови програмування, що відрізняється високою ефективністю розробки програм і увібрала в себе кращі риси Perl, Java, Python, Smalltalk, Eiffel, Ada та Lisp. Код проекту розповсюджується під ліцензіями BSD («2-clause BSDL») та «Ruby», яка посилається на останній варіант ліцензії GPL та повністю сумісна з GPLv3.

Основні покращення:

  • Доданий новий експериментальний внутрішньопроцесний JIT-компілятор YJIT, створений розробниками платформи електронної комерції Shopify в рамках ініціативи щодо збільшення продуктивності Ruby-програм, що використовують фреймворк Rails і викликають багато методів. Ключовою відмінністю від раніше використовуваного JIT-компілятора MJIT, що базується на обробці методів цілком і використовує зовнішній компілятор мовою Сі, є те, що YJIT застосовує версіонування базових блоків (LBBV - Lazy Basic Block Versioning) і містить інтегрований JIT-компілятор. Завдяки LBBV, JIT спочатку компілює тільки початок методу, а частину, що залишилася, компілює через деякий час, після того як у процесі виконання буде визначено типи використовуваних змінних і аргументів. При використанні YJIT зафіксовано збільшення продуктивності при виконанні тесту railsbench на 22%, а тесту liquid-render на 39%. YJIT поки що обмежений підтримкою unix-подібних ОС на системах з архітектурою x86-64 і відключений за замовчуванням (для активації слід вказати в командному стоку прапор "-yjit").
  • Підвищено продуктивність старого JIT-компілятора MJIT. Для проектів, які використовують Rails, максимальний розмір кешу (jit-max-cache) за замовчуванням збільшений зі 100 до 10000 інструкцій. Припинено незастосування JIT для методів, що включають понад 1000 інструкцій. Для підтримки Zeitwerk of Rails сформований JIT код більше не відкидається, якщо для подій класу включений TracePoint.
  • До складу включений повністю переписаний налагоджувач debug.gem, який підтримує віддалену налагодження, не сповільнює роботу програми, що налагоджується, підтримує інтеграцію з просунутими налагоджувальними інтерфейсами (VSCode і Chrome), може використовуватися для налагодження багатопоточних і багатопроцесних додатків, надає інтерфейс виконання коду можливості трасування, може записувати та повторно відтворювати уривки коду. Відладчик lib/debug.rb, що раніше пропонувався, видалений з базової поставки.
    Випуск мови програмування Ruby 3.1
  • Реалізовано наочне виділення помилок у звітах зворотного трасування дзвінків. Помітка помилок забезпечується за допомогою вбудованого та включеного за замовчуванням gem-пакета error_highlight. Для вимкнення позначки помилок можна використовувати налаштування «disable-error_highlight». $ ruby ​​test.rb test.rb:1:in « »: undefined метод «time» for 1:Integer (NoMethodError) 1.time {} ^^^^^ Did you mean? times
  • В оболонці інтерактивних обчислень IRB(REPL, Read-Eval-Print-Loop) реалізовано автоматичне доповнення коду, що вводиться (у міру набору виводиться підказка з варіантами продовження введення, між якими можна переміщатися клавішею Tab або Shift+Tab). Після вибору варіанта продовження поряд забезпечено виведення діалогу, в якому відображається документація, пов'язана з вибраним елементом. Для переходу до повної документації можна використовувати клавіатурну комбінацію Alt+d.
    Випуск мови програмування Ruby 3.1
  • Синтаксис мови тепер дозволяє пропускати значення у літералах хешів і аргументи ключових слів під час виклику функцій. Наприклад, замість виразу "{x: x, y: y}" тепер можна вказувати "{x:, y:}", а замість "foo(x: x, y: y)" - foo(x:, y: )».
  • Стабілізована підтримка однорядкових зіставлень із зразком (ary => [x, y, z]), які більше не мають ознаки експериментальних.
  • Оператор «^» у порівнянні зі зразком тепер може містити довільні вирази, наприклад: Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a #=> ? [[3, 5], [5, 7], [11, 13]]
  • В однорядкових зіставленнях зі зразком можна не вказувати дужки: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
  • У мову анотації типів RBS, яка дозволяє визначати структуру програми та типів, додана підтримка вказівки верхньої межі параметрів типу за допомогою символу «<«, додана підтримка псевдонімів узагальнених типів, реалізована підтримка колекцій для управління gem-ами, підвищена продуктивність і реалізовано багато нових сигнатур для вбудованих та стандартних бібліотек.
  • Статичний аналізатор типів TypePro, що генерує RBS-анотації на основі аналізу коду без явної інформації про типи, додано експериментальну підтримку інтегрованих середовищ розробки (наприклад, підготовлено додаток для інтеграції TypePro з редактором VSCode).
  • Змінено порядок обробки множинних привласнень. Наприклад, раніше складові виразу «foo[0], bar[0] = baz, qux» оброблялися в порядку baz, qux, foo, bar, а тепер foo, bar, baz, qux.
  • Додано експериментальну підтримку виділення пам'яті рядків з використанням механізму VWA (Variable Width Allocation).
  • Оновлено версії вбудованих та вхідних до стандартної бібліотеки gem-модулів. Вбудовані пакети net-ftp, net-imap, net-pop, net-smtp, matrix, prime та debug.

Джерело: opennet.ru

Додати коментар або відгук