Релиз Rust 1.99.0

1 октября 2026 года состоялся релиз языка программирования Rust 1.99. Вклад в разработку этого обновления внесли 506 программистов со всего мира. Предыдущая стабильная версия решения состоялась в августе 2026 года. Версия проекта Rust 1.80 вышла в июле 2024 года. Релиз Rust 1.85.0 (Rust 2024) состоялся 20 февраля. Выпуск Rust 1.87.0 и празднование десяти лет после выхода Rust 1.0 произошло в мае 2025 года.

Текущий релиз включает в себя ряд стабилизированных API, доработанную стандартную библиотеку, в проекте добавлены средства контроля предупреждений Cargo и отображаются сообщения компоновщика.

Язык Rust сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Основные изменения и дополнения в Rust 1.99 (Rust, Cargo и Clippy):

  • функции с переменным числом аргументов в стиле extern C. В версии Rust 1.99.0 стабилизирована возможность определения функций с переменным числом аргументов (variadic functions), использующих ABI C и C‑unwind. Такие функции используют список аргументов переменной длины (…) и принимают произвольное количество аргументов. Ранее Rust уже позволял вызывать внешние функции с переменным числом аргументов (например, libc::printf), а начиная с версии 1.99 их можно писать непосредственно на самом Rust:

/// SAFETY: must be called with (at least) 2 i32 arguments.unsafe extern "C" fn sum(mut args: ...) -> i32 { // SAFETY: guaranteed by the caller. let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b}fn foo() -> i32 { unsafe { sum(0i32, 2i32) }}

Тип … — это VaList, который является ABI-совместимым с типом va_list языка C на всех целевых платформах. Допустимые типы для чтения из VaList определяются трейтом VaArgSafe. Подробную информацию о функциях с переменным числом аргументов в стиле C (c-variadic functions) можно найти в справочном руководстве (Reference). В этом выпуске также стабилизирована поддержка определения функций с переменным числом аргументов типа naked и ABI, отличным от C; такие функции должны реализовываться с использованием встроенного ассемблера.

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

    • Layout::for_value_raw

    • mem::size_of_val_raw

    • mem::align_of_val_raw

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

  • в разряд стабильных переведена новая порция API:

    • IntoIterator for Box

    • IntoIterator for &Box

    • IntoIterator for &mut Box

    • VecDeque::retain_back

    • core::ffi::VaList

    • Box::into_non_null

    • Box::from_non_null

    • Vec::into_parts

    • Vec::from_parts

    • core::mem::size_of_val_raw

    • core::mem::align_of_val_raw

    • core::alloc::Layout::for_value_raw

    • String::from_utf8_lossy_owned

    • string::FromUtf8Error::into_utf8_lossy

    • FusedIterator for StepBy

    • std::fs::set_times

    • std::fs::set_times_nofollow

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев