Выпуск языка программирования Ruby 3.1
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Состоялся релиз 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), может использоваться для отладки многопоточных и многопроцессных приложений, предоставляет интерфейс выполнения кода REPL, предлагает расширенные возможности трассировки, может записывать и повторно воспроизводить отрывки кода.
Ранее предлагавшийся отладчик lib/debug.rb удалён из базовой поставки.
- Реализовано наглядное выделение ошибок в отчётах обратной трассировки вызовов. Пометка ошибок обеспечивается при помощи встроенного и включённого по умолчанию 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.
- Синтаксис языка теперь разрешает пропускать значения в литералах хэшей и аргументы ключевых слов при вызове функций. Например, вместо выражения "{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
===========
Похожие новости
- Главная ссылка к новости (https://www.ruby-lang.org/en/n...)
- OpenNews: Выпуск языка программирования Ruby 3.0
- OpenNews: Устранение нарушения GPL в библиотеке mimemagic привело к сбою в Ruby on Rails
- OpenNews: В RubyGems выявлено 724 вредоносных пакета
- OpenNews: Релиз 19.3.0 виртуальной машины GraalVM и реализаций Python, JavaScript, Ruby и R на её основе
- OpenNews: Открыт код Sorbet, системы статической проверки типов для Ruby
Похожие новости:
- Уязвимости в LibreCAD, Ruby, TensorFlow, Mailman и Vim
- Шутка про возраст женщин привела к изменению кодекса поведения Ruby
- [Ruby, Python, TDD, Разработка игр, Алгоритмы] Реализация алгоритма Минимакс на примере игры «Крестики-Нолики» (перевод)
- [Ruby on Rails] Joomla on Rails, или особенности национального веб-программирования
- [Тестирование IT-систем, PHP, Программирование] «Дело было вечером, делать было нечего» или краткая история о сравнении производительности языков программирования
- [Ruby, Python, Программирование, Будущее здесь] Почему за интерпретируемыми языками будущее
- [Perl, Ruby, PHP, Python, JavaScript] Насколько вам наплевать на фичи последней версии языка?
- [Perl, Ruby, Python, Программирование, Node.JS] Сервер в одну строку на 17 языках (перевод)
- [Ruby, Ruby on Rails] Каперство в IT. В подражание Киплингу
- Интервью с Джереми Эвансом, ведущим разработчиком Sequel и Roda
Теги для поиска: #_ruby
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:12
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Состоялся релиз Ruby 3.1.0, динамического объектно-ориентированного языка программирования, отличающегося высокой эффективностью разработки программ и вобравшего в себя лучшие черты Perl, Java, Python, Smalltalk, Eiffel, Ada и Lisp. Код проекта распространяется под лицензиями BSD ("2-clause BSDL") и "Ruby", которая ссылается на последний вариант лицензии GPL и полностью совместима с GPLv3. Основные улучшения:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 01:12
Часовой пояс: UTC + 5