зарезервированное ключевое слово, т. е. нигде не используется в стабильном Rust, но недопустимо как идентификатор.
вместе с abstract, become, box, do, final, macro, override, priv, typeof, unsized, virtual и try
А есть где-нибудь список RFC по каждому из них, объясняющие, для чего они зарезервированы?
спасибо. меня прост поставило в ступор что его подсвечивает как ключевое, как например, тут https://docs.rs/async-stream/latest/async_stream/
box используется для создания Box<T> минуя стек, become для хвостовой рекурсии, macro для новых декларативных макросов, yield для генераторов, остальное хз есть общий список всех RFC, по которому можно искать — github.com/rust-lang/rfcs
а, override для специализации, наверное, а priv как модификатор публичности в некоем контексте, где «приватный» это не дефолт
Что значит "минуя стек" касательно Box<T>?.. Боксы же как раз для аллокации в динамической памяти...
Без алокации на стеке объекта?
представим себе let x = Box::new([0; VERY_BIG_CONST]); как это компилируется: мы кладём гигантский массив на стек (потенциально переполняя его), потом аллоцируем место в куче, потом копируем в кучу box-синтаксис решает эту проблему: let x = box [0; VERY_BIG_CONST]; сразу аллоцирует на куче, без промежуточной аллокации на стеке
placement new
Странно, что это компилятор сам не оптимизирует
иногда оптимизирует, но это не гарантируется
Обсуждают сегодня