What Is the Difference Between Declarative and Procedural Macros?
Declarative macros use macro_rules! to match patterns and expand code, while procedural macros are Rust functions that programmatically generate code for custom derives, attributes, or function-like calls. Declarative macros are defined with macro_rules! and work like pattern matching, whereas procedural macros require a separate crate and the proc_macro crate to manipulate tokens directly.
// Declarative macro using macro_rules!
macro_rules! say_hello {
() => {
println!("Hello!");
};
}
fn main() {
say_hello!();
}
// Procedural macro requires a separate crate with #[proc_macro_derive]
// and the proc_macro crate to define custom derive logic.