What is the difference between macros and functions in Rust?

后端 未结 3 1433
一个人的身影
一个人的身影 2020-12-18 20:00

Quoted from the Rust blog:

One last thing to mention: Rust’s macros are significantly different from C macros, if you’ve used those

3条回答
  •  甜味超标
    2020-12-18 20:42

    Keep on reading the documentation, specifically the chapter on macros!

    Rust functions vs Rust macros

    Macros are executed at compile time. They generally expand into new pieces of code that the compiler will then need to further process.

    Rust macros vs C macros

    The biggest difference to me is that Rust macros are hygenic. The book has an example that explains what hygiene prevents, and also says:

    Each macro expansion happens in a distinct ‘syntax context’, and each variable is tagged with the syntax context where it was introduced.

    It uses this example:

    For example, this C program prints 13 instead of the expected 25.

    #define FIVE_TIMES(x) 5 * x
    
    int main() {
        printf("%d\n", FIVE_TIMES(2 + 3));
        return 0;
    }
    

    Beyond that, Rust macros

    • Can be distributed with the compiled code
    • Can be overloaded in argument counts
    • Can match on syntax patterns like braces or parenthesis or commas
    • Can require a repeated input pattern
    • Can be recursive
    • Operate at the syntax level, not the text level

提交回复
热议问题