The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Выпуск языка программирования Rust 1.67"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Выпуск языка программирования Rust 1.67" +1 +/
Сообщение от freecoder (ok), 27-Янв-23, 11:31 
Атрибут must_use стабильный, вы дали ссылку на функцию hint::must_use, которая не стабильна, а не на атрибут.

Почему возникла необходимость дорабатывать поведение этого атрибута для асинхронных функций? Дело в том, что сигнатура async-функции


async fn foo() -> Bar
Это синтаксический сахар для сигнатуры примерно такого вида:

fn foo() -> impl Future<Output = Bar>

Если на такую функцию повесить атрибут must_use

#[must_use]
fn foo() -> impl Future<Output = Bar>
то получится, что он применяется к возвращаемому типу impl Future, который и так всегда must use. На самом деле, в рамках синтаксиса async-функции, программист ожидает, что must_use применится к значению типа Bar, которое возвращает не функция, а футура, которую вернет функция:

#[must_use]
async fn foo() -> Bar
Понятно, что с точки зрения внутреннего представления это особый случай поведения #[must_use], который отличен от предыдущего, применимого для объявлений типов и значений, возвращаемых из функций напрямую.
Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Выпуск языка программирования Rust 1.67, opennews, 26-Янв-23, 22:14  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру