Как стать автором
Обновить

Rust 1.71.0: C-unwind ABI, атрибуты визуализации отладчика и константная инициализация thread local

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.4K
Автор оригинала: The Rust Release Team

Команда Rust рада сообщить о новой версии языка — 1.71.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.71.0 вам достаточно выполнить команду:


rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.


Что стабилизировано в 1.71.0


C-unwind ABI


В версии 1.71.0 стабилизированы C-unwind (и другие варианты ABI с суффиксом -unwind[^1]).


Поведение для принудительного разматывания (в типичном сценарии) описано в этой таблице из RFC, где и была предложена эта функция. Вкратце:


Каждый ABI почти полностью эквивалентен тому же ABI без -unwind — за исключением того, что поведение с -unwind определено как безопасное. Это полезно, например, когда операция разматывания (возникающая при panic или исключении в стиле C++) пересекает границу ABI. Для panic=unwind это допустимый способ разрешить исключениям одного языка разматывать стек другого языка без завершения процесса (при условии, что исключение перехвачено тем же языком, который его породил). Для panic=abort же это обычно немедленно прерывает процесс.


На первом этапе стабилизации мы не вносим никаких изменений в существующие ABI-интерфейсы (например, "C"). Развёртывание между ними также остаётся с неопределённым поведением. Следующий выпуск Rust сыграет заключительную часть в стабилизации этих ABI, и их поведение будет соответствовать описанному в RFC (обычно это прерывание на границе). Пользователям рекомендуется начать использовать новые варианты ABI размотки в своём коде уже сейчас, если им требуется размотать стек через границу ABI.


Атрибуты визуализации отладчика


Версия 1.71.0 стабилизирует поддержку нового атрибута #[debug_visualizer(natvis_file = "...")] и #[debug_visualizer(gdb_script_file = "...")], который позволяет встраивать описания Natvis и скрипты GDB в библиотеки Rust для улучшения работы отладчика при проверке структур данных, созданных этими библиотеками. Раньше Rust сам упаковывал аналогичные скрипты для стандартной библиотеки, но эта функция позволит авторам библиотек самим предоставлять аналогичные возможности конечным пользователям.


Более подробно об использовании можно узнать тут.


Линковка raw-dylib


На платформе Windows Rust теперь поддерживает использование функций динамических библиотек, не требуя при этом, чтобы они были доступны во время сборки. Для этого используется новая опция kind="raw-dylib" для #[link].


Это позволяет избежать необходимости устанавливать эти библиотеки (что особенно сложно при кросс-компиляции) и избавляет от необходимости отправлять заглушки версий библиотек в крейтах для привязки к ним. Также это упрощает создание крейтов, обеспечивающих привязки к библиотекам Windows.


Также Rust поддерживает привязку к символам из библиотек DLL по порядковому, а не именованному символу при помощи нового атрибута #[link_ordinal].


Обновление musl до 1.2


Как ранее сообщалось, Rust 1.71 обновляет версию musl до 1.2.3. Большинство пользователей не будет затронуто этим изменением.


Константная инициализация thread local


В Rust 1.59.0 была стабилизирована const-инициализация поддержки локальных потоков в стандартной библиотеке, что позволяет генерировать более оптимальный код. Однако до сих пор эта функция отсутствовала в примечаниях к выпуску и документации. Обратите внимание, что эта стабилизация не делает const { ... } допустимым выражением или синтаксисом в других контекстах — это отдельная и пока ещё нестабильная функция.


use std::cell::Cell;

thread_local! {
    pub static FOO: Cell<u32> = const { Cell::new(1) };
}

Стабилизированные API



Следующие API теперь возможно использовать в контексте const:



Прочие изменения


Проверьте всё, что изменилось в Rust, Cargo и Clippy.


Участники 1.71.0


Многие люди собрались вместе, чтобы создать Rust 1.71.0. Без вас мы бы не справились. Спасибо!


[^1]: Список стабилизированных ABI можно найти в отчёте по стабилизации


От переводчиков


С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков.


Данную статью совместными усилиями перевели TelegaOvoshey, kunansy и funkill.

Теги:
Хабы:
Всего голосов 9: ↑8 и ↓1+7
Комментарии1

Публикации

Истории

Работа

Rust разработчик
6 вакансий

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань