Выпущен Руби 3.4.0

Мы рады сообщить о выпуске 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 эти методы последовательно выполняли разрешение имен и попытки подключения. По этому алгоритму они теперь действуют следующим образом:

  1. Одновременно выполняет разрешение имен IPv6 и IPv4.
  2. Попытка подключения к разрешенным IP-адресам с приоритетом IPv6, параллельные попытки выполняются с интервалом 250 мс.
  3. Вернуть первое успешное соединение, отменяя все остальные.

Это обеспечивает минимальные задержки соединения, даже если определенный протокол или IP-адрес задерживается или недоступен. Эта функция включена по умолчанию, поэтому для ее использования не требуется дополнительная настройка. Чтобы отключить его глобально, установите переменную среды RUBY_TCP_NO_FAST_FALLBACK=1 или позвоните Socket.tcp_fast_fallback=false. Или, чтобы отключить его для каждого метода, используйте аргумент ключевого слова fast_fallback: false.

ЮЖИТ

ТЛ;ДР

  • Более высокая производительность в большинстве тестов на платформах x86-64 и Arm64.
  • Сокращение использования памяти за счет сжатых метаданных и единого ограничения памяти.
  • Различные исправления ошибок: YJIT теперь более надежен и тщательно протестирован.
Read more:  Официально выпущен электрический мотоцикл Tailing F5, дальность полета 100 км и скорость 70 км/ч, подходит для ежедневного использования! - Радар Тулунгагунг

Новые возможности

  • Параметры командной строки
    • --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]

Read more:  В день жертв министра Народного суда Георгия Георгиев с личной историей

Обновления основных классов

Примечание. Мы перечисляем только заметные обновления класса 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]
Read more:  Пэтси Хайнс - Радио Среднего Запада

Проблемы совместимости стандартной библиотеки

  • Вы имели в виду

    • DidYouMean::SPELL_CHECKERS[]= и DidYouMean::SPELL_CHECKERS.merge! удаляются.
  • Сеть:: HTTP

  • Тайм-аут

    • Отклонить отрицательные значения для Timeout.timeout. [Bug #20795]
  • URI

    • Синтаксический анализатор по умолчанию переключен на совместимый с RFC 3986 с RFC 2396.
      [Bug #19266]

Обновления 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

Продолжение темы

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.