Ruby программалоо тилинин чыгарылышы 3.1

Ruby 3.1.0 чыгарылды, динамикалык объектиге багытталган программалоо тили, программаны иштеп чыгууда жогорку эффективдүү жана Perl, Java, Python, Smalltalk, Eiffel, Ada жана Lispдин эң мыкты мүмкүнчүлүктөрүн камтыган. Долбоордун коду BSD (“2-пункттуу 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), может использоваться для отладки многопоточных и многопроцессных приложений, предоставляет интерфейс выполнения кода REPL, предлагает расширенные возможности трассировки, может записывать и повторно воспроизводить отрывки кода. Ранее предлагавшийся отладчик lib/debug.rb удалён из базовой поставки.
    Ruby программалоо тилинин чыгарылышы 3.1
  • Реализовано наглядное выделение ошибок в отчётах обратной трассировки вызовов. Пометка ошибок обеспечивается при помощи встроенного и включённого по умолчанию gem-пакета error_highlight. Для отключения пометки ошибок можно использовать настройку «—disable-error_highlight». $ ruby test.rb test.rb:1:in «<main>»: undefined method «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.

Source: opennet.ru

Комментарий кошуу