Вийшов Ruby 2.7.0-preview1

Опублікував naruse 30-05-2019
Переклав: Andrii Furmanets

Ми раді оголосити випуск Ruby 2.7.0-preview1.

Preview версія випущена для збору відгуків для фінального випуску, запланованого на грудень. Вона вводить ряд нових функцій та покращень продуктивності, найбільш помітні:

  • Compaction GC
  • Pattern Matching
  • Покращення REPL

Compaction GC

Цей випуск вводить Compaction GC, який може дефрагментувати фрагментований простір пам’яті.

Деякі багатопотокові програми Ruby можуть спричинити фрагментацію пам’яті, що призводить до високого використання пам’яті та погіршення швидкості.

Метод GC.compact введено для компактування купи. Ця функція компактує живі об’єкти в купі, щоб використовувалося менше сторінок, та купа може бути більш CoW дружньою. #15626

Pattern Matching [Експериментально]

Pattern matching, широко використовувана функція в функціональних мовах програмування, введена як експериментальна функція. #14912 Вона може обходити заданий об’єкт та призначати його значення, якщо воно відповідає шаблону.

case JSON.parse('{...}', symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
  p age
  ...
end

Для більше деталей, будь ласка, див. Pattern matching - Нова функція в Ruby 2.7.

Покращення REPL

irb, включене інтерактивне середовище (REPL; Read-Eval-Print-Loop), тепер підтримує багаторядкове редагування. Воно працює завдяки reline, сумісній з readline реалізації на чистому Ruby. Воно також надає інтеграцію rdoc. В irb ви можете відобразити довідку для заданого класу, модуля або методу. #14683, #14787, #14918 Крім того, рядки джерела, показані в binding.irb, та результати inspect для об’єктів core-класів тепер кольорові.

Інші помітні нові функції

  • Оператор посилання на метод, .:, введено як експериментальну функцію. #12125, #13581

  • Нумерований параметр як параметр блоку за замовчуванням введено як експериментальну функцію. #4475

  • Безпочатковий діапазон експериментально введено. Він може бути не таким корисним як нескінченний діапазон, але буде хорошим для цілей DSL. #14799

    ary[..3]  # ідентично до ary[0..3]
    rel.where(sales: ..100)
    
  • Enumerable#tally додано. Він підраховує появу кожного елемента.

    ["a", "b", "c", "b"].tally
    #=> {"a"=>1, "b"=>2, "c"=>1}
    

Покращення продуктивності

  • JIT [Експериментально]

    • JIT-компільований код перекомпілюється до менш оптимізованого коду, коли припущення оптимізації стає недійсним.

    • Інлайнінг методів виконується, коли метод вважається чистим. Ця оптимізація все ще експериментальна, і багато методів ще НЕ вважаються чистими.

    • Значення за замовчуванням --jit-min-calls змінено з 5 на 10,000

    • Значення за замовчуванням --jit-max-cache змінено з 1,000 на 100

Інші помітні зміни з 2.6

  • Proc.new та proc без блоку в методі, викликаному з блоком, тепер попереджають.

  • lambda без блоку в методі, викликаному з блоком, помиляється.

  • Оновлено версію Unicode та Emoji з 11.0.0 до 12.0.0. [Функція #15321]

  • Оновлено версію Unicode до 12.1.0, додаючи підтримку для U+32FF SQUARE ERA NAME REIWA. [Функція #15195]

  • Date.jisx0301, Date#jisx0301, та Date.parse тимчасово підтримують нову японську еру як неформальне розширення, до випуску нового JIS X 0301. [Функція #15742]

  • Вимагаємо підтримки C99 компіляторами [Misc #15347]

Див. NEWS або логи комітів для більше деталей.

З цими змінами, 1727 файлів змінено, 76022 додано(+), 60286 видалено(-) з Ruby 2.6.0!

Насолоджуйтеся програмуванням з Ruby 2.7!

Завантаження

Що таке Ruby

Ruby вперше розроблено Matz (Yukihiro Matsumoto) у 1993 році, і зараз розробляється як Open Source. Він працює на кількох платформах та використовується по всьому світу, особливо для веб-розробки.

Останні новини

Більше новин...