макросы на стероидах
Jan. 15th, 2026 06:50 pmВо Рже (Rust) макросы являются частью языка, и работают на самом деле не на исходном тексте программы, а уже на синтаксическом дереве разбора. Причем там есть два вида макросов - один определяется попроще, через pattern matching аргументов, другой заморачивается деревом как оно есть. Вот так выглядит определение макроса assert! (макросы там все вызываются восклицательным знаком) через два возможных паттерна, с одним аргументом и многими аргументами (в дополнительных аргументах можно дать сообщение об ошибке):
Через двоеточие в определении аргумента в паттерне указывается его тип.
У меня есть ощущение, что такими макросами наверное можно сделать аналог темплейтов из C++.
macro_rules! assert {
($cond:expr $(,)?) => {
if !$cond {
panic!("assertion failed: {}", stringify!($cond));
}
};
($cond:expr, $($arg:tt)+) => {
if !$cond {
panic!($($arg)+);
}
};
}
Через двоеточие в определении аргумента в паттерне указывается его тип.
У меня есть ощущение, что такими макросами наверное можно сделать аналог темплейтов из C++.