Опубликовано нарусе 25 декабря 2024 г.
Мы рады сообщить о выпуске Ruby 3.4.0. Рубиновый 3.4 добавляет it ссылка на параметры блока, изменение Prism в качестве анализатора по умолчанию, добавление поддержки Happy Eyeballs версии 2 в библиотеку сокетов, улучшение YJIT, добавление Modular GC и т. д.
it представлен
it добавляется для ссылки на параметр блока без имени переменной. [Feature #18980]
ary = ["foo", "bar", "baz"]
p ary.map { it.upcase } #=> ["FOO", "BAR", "BAZ"]
it во многом ведет себя так же, как _1. Когда намерение состоит в том, чтобы использовать только _1 в блоке потенциал для других пронумерованных параметров, таких как _2 появление также налагает на читателей дополнительную когнитивную нагрузку. Так it был представлен как удобный псевдоним. Использовать it в простых случаях, когда it говорит само за себя, например, в однострочных блоках.
Prism теперь является парсером по умолчанию.
Переключите парсер по умолчанию с parse.y на Prism. [Feature #20564]
Это внутреннее улучшение, и пользователю не должно быть заметно никаких изменений. Если вы заметили какие-либо проблемы с совместимостью, сообщите нам о них.
Чтобы использовать обычный синтаксический анализатор, используйте аргумент командной строки --parser=parse.y.
Библиотека сокетов теперь включает версию 2 Happy Eyeballs (RFC 8305).
В библиотеке сокетов теперь есть Счастливые глазные яблоки, версия 2 (RFC 8305)новейшая стандартизированная версия широко распространенного подхода для улучшения взаимодействия во многих языках программирования, в TCPSocket.new (TCPSocket.open) и Socket.tcp. Это улучшение позволяет Ruby обеспечивать эффективные и надежные сетевые соединения, адаптированные к современной интернет-среде.
До Ruby 3.3 эти методы последовательно выполняли разрешение имен и попытки подключения. По этому алгоритму они теперь действуют следующим образом:
- Одновременно выполняет разрешение имен IPv6 и IPv4.
- Попытка подключения к разрешенным IP-адресам с приоритетом IPv6, параллельные попытки выполняются с интервалом 250 мс.
- Вернуть первое успешное соединение, отменяя все остальные.
Это обеспечивает минимальные задержки соединения, даже если определенный протокол или IP-адрес задерживается или недоступен. Эта функция включена по умолчанию, поэтому для ее использования не требуется дополнительная настройка. Чтобы отключить его глобально, установите переменную среды RUBY_TCP_NO_FAST_FALLBACK=1 или позвоните Socket.tcp_fast_fallback=false. Или, чтобы отключить его для каждого метода, используйте аргумент ключевого слова fast_fallback: false.
ЮЖИТ
ТЛ;ДР
- Более высокая производительность в большинстве тестов на платформах x86-64 и Arm64.
- Сокращение использования памяти за счет сжатых метаданных и единого ограничения памяти.
- Различные исправления ошибок: YJIT теперь более надежен и тщательно протестирован.
Новые возможности
- Параметры командной строки
--yjit-mem-sizeвводит единый лимит памяти (по умолчанию 128 МБ) для отслеживания общего использования памяти YJIT, обеспечивая более интуитивную альтернативу старому--yjit-exec-mem-sizeвариант.--yjit-logвключает журнал компиляции для отслеживания того, что компилируется.
- Рубиновый API
RubyVM::YJIT.logобеспечивает доступ к хвосту журнала компиляции во время выполнения.
- Статистика YJIT
RubyVM::YJIT.runtime_statsтеперь всегда предоставляет дополнительную статистику по аннулированию, встраиванию и кодированию метаданных.
Новые оптимизации
- Сжатый контекст уменьшает объем памяти, необходимой для хранения метаданных YJIT.
- Выделите регистры для локальных переменных и аргументов метода Ruby.
- Когда YJIT включен, используйте больше примитивов Core, написанных на Ruby:
Array#each,Array#select,Array#mapпереписан на Ruby для лучшей производительности [Feature #20182].
- Возможность встраивания небольших/тривиальных методов, таких как:
- Пустые методы
- Методы, возвращающие константу
- Методы, возвращающие
self - Методы, непосредственно возвращающие аргумент
- Специализированный кодогенератор для многих других методов времени выполнения.
- Оптимизировать
String#getbyte,String#setbyteи другие строковые методы - Оптимизация побитовых операций для ускорения низкоуровневых манипуляций с битами и байтами.
- Поддержка общих констант в многофакторном режиме
- Различные другие дополнительные оптимизации
Модульный ГХ
-
Альтернативные реализации сборщика мусора (GC) можно загружать динамически с помощью функции модульного сборщика мусора. Чтобы включить эту функцию, настройте Ruby с помощью
--with-modular-gcво время сборки. Библиотеки GC можно загружать во время выполнения с использованием переменной среды.RUBY_GC_LIBRARY.
[Feature #20351] -
Встроенный сборщик мусора Ruby был выделен в отдельный файл по адресу
gc/default/default.cи взаимодействует с Ruby, используя API, определенный в
gc/gc_impl.h. Встроенный сборщик мусора теперь можно собрать как библиотеку, используяmake modular-gc MODULAR_GC=defaultи включен с помощью переменной средыRUBY_GC_LIBRARY=default. [Feature #20470] -
Предоставляется экспериментальная библиотека GC на основе ММТк. Эту библиотеку GC можно собрать с помощью
make modular-gc MODULAR_GC=mmtkи включен с помощью переменной средыRUBY_GC_LIBRARY=mmtk. Для этого требуется набор инструментов Rust на машине сборки. [Feature #20860]
Языковые изменения
-
Строковые литералы в файлах без
frozen_string_literalкомментарий теперь выдает предупреждение об устаревании при изменении. Эти предупреждения можно включить с помощью-W:deprecatedили установивWarning[:deprecated] = true. Чтобы отключить это изменение, вы можете запустить Ruby с командой--disable-frozen-string-literal
аргумент командной строки. [Feature #20205] -
Распределение ключевых слов
nilпри вызове методов теперь поддерживается.
**nilрассматривается аналогично**{}не передавая ключевые слова и не вызывая никаких методов преобразования. [Bug #20064] -
Передача блоков больше не разрешена в index. [Bug #19918]
-
Аргументы ключевого слова больше не допускаются в index. [Bug #20218]
-
Имя верхнего уровня
::Rubyсейчас зарезервировано, и определение будет предупреждено, когдаWarning[:deprecated]. [Feature #20884]
Обновления основных классов
Примечание. Мы перечисляем только заметные обновления класса Core.
-
Исключение
Exception#set_backtraceтеперь принимает массивThread::Backtrace::Location.
Kernel#raise,Thread#raiseиFiber#raiseтакже принять этот новый формат. [Feature #13557]
-
ГК
-
GC.configдобавлено, чтобы разрешить настройку переменных конфигурации в сборщике мусора. [Feature #20443] -
Параметр конфигурации ГХ
rgengc_allow_full_markпредставил. Когдаfalse
GC будет отмечать только молодые объекты. По умолчаниюtrue. [Feature #20443]
-
-
Рактор
-
requireв Ractor разрешено. Требуемый процесс будет запущен на главном Ractor.
Ractor._require(feature)добавлен для запуска требующего процесса на главном Ractor.
[Feature #20627] -
Ractor.main?добавляется. [Feature #20627] -
Ractor.[]иRactor.[]=добавляются для доступа к локальному хранилищу текущего Ractor. [Feature #20715] -
Ractor.store_if_absent(key){ init }добавлен для инициализации локальных переменных ractor в потокобезопасном режиме. [Feature #20875]
-
-
Диапазон
Range#sizeтеперь поднимаетTypeErrorесли диапазон не повторяется. [Misc #18984]
Обновления стандартной библиотеки
Примечание. Мы перечисляем только заметные обновления стандартных библиотек.
- RubyGems
- Добавлять
--attestationвозможность толкать драгоценные камни. Это позволило хранить подпись в sigstore.dev
- Добавлять
- Бандлер
- Добавить
lockfile_checksumsконфигурация для включения контрольных сумм в новые файлы блокировки - Добавить блокировку пакета
--add-checksumsдобавить контрольные суммы в существующий файл блокировки
- Добавить
-
JSON
- Улучшения производительности
JSON.parseпримерно в 1,5 раза быстрее, чем json-2.7.x.
- Улучшения производительности
-
Темпфайл
- Аргумент ключевого слова
anonymous: trueреализован для Tempfile.create.
Tempfile.create(anonymous: true)немедленно удаляет созданный временный файл. Таким образом, приложениям не нужно удалять файл.
[Feature #20497]
- Аргумент ключевого слова
-
win32/sspi.rb
Проблемы совместимости
Примечание. За исключением исправлений ошибок функций.
- Сообщения об ошибках и отображение обратной трассировки были изменены.
- Используйте одинарную кавычку вместо обратной кавычки в качестве вступительной цитаты. [Feature #16495]
- Отображайте имя класса перед именем метода (только если у класса есть постоянное имя). [Feature #19117]
Kernel#caller,Thread::Backtrace::Locationметоды и т. д. также изменяются соответствующим образом.
Old: test.rb:1:in `foo': undefined method `time' for an instance of Integer from test.rb:2:in `' New: test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer from test.rb:2:in ' ' -
Рендеринг Hash#inspect был изменен. [[Bug #20433]]
- Символьные клавиши отображаются с использованием современного синтаксиса символьных клавиш:
"{user: 1}" - Вокруг других клавиш теперь есть пробелы.
=>:'{"user" => 1}'хотя раньше этого не было:'{"user"=>1}'
- Символьные клавиши отображаются с использованием современного синтаксиса символьных клавиш:
-
Kernel#Float() теперь принимает десятичную строку с опущенной десятичной частью. [Feature #20705]
Float("1.") #=> 1.0 (previously, an ArgumentError was raised) Float("1.E-1") #=> 0.1 (previously, an ArgumentError was raised) -
String#to_f теперь принимает десятичную строку с опущенной десятичной частью. Обратите внимание, что результат меняется, если указан показатель степени. [Feature #20705]
"1.".to_f #=> 1.0 "1.E-1".to_f #=> 0.1 (previously, 1.0 was returned) - Уточнение#refined_class было удалено. [Feature #19714]
Проблемы совместимости стандартной библиотеки
-
Вы имели в виду
DidYouMean::SPELL_CHECKERS[]=иDidYouMean::SPELL_CHECKERS.merge!удаляются.
-
Сеть:: HTTP
-
Тайм-аут
- Отклонить отрицательные значения для Timeout.timeout. [Bug #20795]
-
URI
- Синтаксический анализатор по умолчанию переключен на совместимый с RFC 3986 с RFC 2396.
[Bug #19266]
- Синтаксический анализатор по умолчанию переключен на совместимый с RFC 3986 с RFC 2396.
Обновления C API
rb_newobjиrb_newobj_of(и соответствующие макросыRB_NEWOBJ,RB_NEWOBJ_OF,NEWOBJ,NEWOBJ_OF) были удалены. [Feature #20265]- Удалена устаревшая функция
rb_gc_force_recycle. [Feature #18290]
Разные изменения
-
При передаче блока методу, который не использует переданный блок, будет показано предупреждение о подробном режиме (
-w).
[Feature #15554] -
Переопределение некоторых основных методов, которые специально оптимизированы интерпретатором и JIT, например
String.freezeилиInteger#+теперь выдает предупреждение о классе производительности (-W:performanceилиWarning[:performance] = true).
[Feature #20429]
Видеть НОВОСТИ
или фиксировать журналы
для более подробной информации.
С этими изменениями, Изменено 4942 файла, вставлено 202244(+), удалено 255528(-)
начиная с Руби 3.3.0!
Счастливого Рождества, счастливых праздников и наслаждайтесь программированием на Ruby 3.4!
Скачать
-
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.tar.gz
SIZE: 23153022 SHA1: 8ccb561848a7c460ae08e1a120a47c4a88a79335 SHA256: 068c8523442174bd3400e786f4a6952352c82b1b9f6210fd17fb4823086d3379 SHA512: bc70ecba27d1cdea00879f03487cad137a7d9ab2ad376cfb7a65780ad14da637fa3944eeeede2c04ab31eeafb970c64ccfeeb854c99c1093937ecc1165731562 -
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.tar.xz
SIZE: 17215572 SHA1: eb25447cc404e8d2e177c62550d0224ebd410e68 SHA256: 0081930db22121eb997207f56c0e22720d4f5d21264b5907693f516c32f233ca SHA512: 776a2cf3e9ccc77c27500240f168aa3e996b0c7c1ee1ef5a7afc291a06c118444016fde38b5b139c0b800496b8eb1b5456562d833f0edc0658917164763b1af7 -
https://cache.ruby-lang.org/pub/ruby/3.4/ruby-3.4.0.zip
SIZE: 28310193 SHA1: 26254ca5d3decc28a4e5faec255995265e5270b5 SHA256: c120228038af04554f6363e716b0a32cbf53cf63c6adf9f2c22a24f43dc8b555 SHA512: 4d535ed10db76a6aa74f8a025df319deb28483a7a781c24045906ee7663f1cff9d9f9e71dbc993c9e050113a34b37c7fa2143c355a0a6e1e1029bf2c92213ecc
Что такое Руби
Ruby был впервые разработан Мацем (Юкихиро Мацумото) в 1993 году и сейчас разрабатывается как Open Source. Он работает на нескольких платформах и используется во всем мире, особенно для веб-разработки.
2024-12-25 06:40:00
1735121730
#Выпущен #Руби #3.4.0
Продолжение темы