Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

[Перевод] Rust 1.99.0: функции с переменным числом аргументов, информация о схеме размещения типа

Дата публикации: 02-10-2026 13:53:45

Команда Rust рада сообщить о новой версии языка — 1.99.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.99.0 вам достаточно выполнить команду:$ rustup update stable Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску 1.99.0.Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках! Читать далее

Основное содержимое страницы с новостью.

Уровень сложностиПростой

Время на прочтение3 мин

Охват и читатели4.2K

Дайджест

Перевод

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

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

$ rustup update stable

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

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

Что стабилизировано в 1.99.0Функции с переменным числом аргументов в extern “C”

В Rust 1.99.0 стабилизировано определение функций с переменным числом аргументов (variadic functions) с C-ABI для “C” и “C-unwind” ABI. Определённые таким образом вариативные функции используют список аргументов переменной длины (...) и принимают произвольное количество аргументов. Ранее Rust уже мог вызывать вариативные функции, определённые во внешнем коде (например, libc::printf). Начиная с Rust 1.99, такие функции можно писать непосредственно на самом Rust:

/// SAFETY: функция должна вызываться как минимум с 2 аргументами типа i32.
unsafe extern "C" fn sum(mut args: ...) -> i32 {
    // SAFETY: гарантируется вызывающей стороной.
    let a = unsafe { args.next_arg::<i32>() };
    let b = unsafe { args.next_arg::<i32>() };
    a + b
}

fn foo() -> i32 {
    unsafe { sum(0i32, 2i32) }
}

Типом для ... является VaList, который на всех целевых платформах ABI-совместим с типом va_list в C. Допустимые для чтения из VaList типы ограничиваются типажом VaArgSafe.

Более подробную информацию о C-вариативных функциях см. в Reference. Также в этом выпуске стабилизирована поддержка определения naked-функций с переменным числом аргументов с отличными от C-ABI, которые должны быть написаны с помощью встроенных ассемблерных вставок.

Информация о схеме размещения типа из “сырых” указателей

В этом выпуске определены требования безопасности для получения размера и выравнивания по “сырым” указателям как для типов Sized (тривиальная безопасность, уже была доступна в stable), так и для типов !Sized.

Для этого были стабилизированы три функции:

Рекомендации по освобождению памяти после Box::leak

Хотя семантика языка в Rust 1.99 не изменилась, мы обновили документацию к Box::leak, добавив рекомендацию отказаться от шаблонов, в которых эта память в дальнейшем освобождается. Это связано с тем, что подобный код проблемно взаимодействует с текущими и будущими потенциальными оптимизациями компилятора, а также особенно проблематичен на фоне предстоящей стабилизации пользовательских аллокаторов памяти. Вместо этого рекомендуется отдавать предпочтение Box::into_non_null или Box::into_raw.

Эта рекомендация распространяется и на другие leak-функции в стандартной библиотеке.

Стабилизированные APIПрочие изменения

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

Кто работал над 1.99.0

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

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Чудеса nightly, часть 1: на чём тайком держится stable Rust08.5529-09-2026
2Rust на вырост. Почему мы изучаем язык, который не входит в наш основной стек-17.2410-09-2026
3[Перевод] Rewrite It in Rust: когда переписывание действительно оправдано07.9919-09-2026
4lang/rust188 - 1.88.0_108.102-10-2026
5Rust для микроконтроллеров: что он даёт по сравнению с С16.629-09-2026
6900 гипотез об уязвимостях и 12 миллиардов токенов08.9901-10-2026
7Задача взяла lock() и остановила весь рантайм: пять ошибок с блокировками в async Rust06.5707-09-2026
8Декларативные макросы в Rust: полное руководство06.8314-09-2026
9Typing в Python 3.11–3.14: что изменилось и как это использовать уже сейчас09.3202-10-2026
10devel/tabby - 0.32.0_207.902-10-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 11.43. Источник: habr.com.