Макросы в Rust

3 просмотров Комментарии Выкл.

Одним из преимуществ использования макросов является то, что они не  оценивают свои аргументы с энтузиазмом, как это делают функции, что является одной из причин использования макросов, отличных от функций.

Что такое макросы Rust?

В Rust отличная поддержка макросов, подробнее на сайте doomxtf.com/macrolibrary/macro-rust.html. Макросы позволяют вам писать код, который пишет другой код, что называется метапрограммированием.

Макросы предоставляют функциональные возможности, аналогичные функциям, но без затрат времени выполнения. Однако есть некоторые затраты на время компиляции, поскольку макросы расширяются во время компиляции.

Макросы Rust сильно отличаются от макросов C. Макросы Rust применяются к дереву токенов, тогда как макросы C представляют собой подстановку текста.

Типы макросов в Rust

Декларативные макросы позволяют вам написать что-то похожее на выражение соответствия, которое работает с кодом Rust, который вы предоставляете в качестве аргументов. Он использует предоставленный вами код для создания кода, который заменяет вызов макроса.
Процедурные макросы позволяют вам работать с абстрактным синтаксическим деревом (AST) кода Rust, которое ему задано. Макрос proc — это функция от одного TokenStream(или двух) к другому TokenStream, где вывод заменяет вызов макроса.

Декларативные макросы в Rust
Эти макросы объявляются с использованием . Декларативные макросы немного менее эффективны, но предоставляют простой в использовании интерфейс для создания макросов для удаления повторяющегося кода. Одним из распространенных декларативных макросов является . Декларативные макросы предоставляют аналогичный интерфейс, в котором при совпадении макрос заменяется кодом внутри согласованной руки.

Часто несколько макросов необходимо сгруппировать в один макрос. В этих случаях используются внутренние правила макросов. Это помогает манипулировать вводом макросов и писать чистые TT-манчеры.

Чтобы создать внутреннее правило, добавьте имя правила, начинающееся с @в качестве аргумента. Теперь макрос никогда не будет соответствовать внутреннему правилу, пока он не будет явно указан в качестве аргумента.

Похожие статьи