Avatar ·

Por que em Rust o println! e outras macros têm um ponto de exclamação?

Olá a todos! Comecei a estudar Rust literalmente há uma semana e me deparei com uma questão que me deixa um pouco confuso. Por que em Rust, ao imprimir no console, escrevemos `println!` com um ponto de exclamação? Estou acostumado com Python, Java e C++, onde a chamada de funções é sempre sem ponto de exclamação, por exemplo, `print()`, `System.out.println()` ou `std::cout <<`. Olhei para os exemplos — em todos os lugares escrevem `println!("Hello, world!");`. Tentei escrever apenas `println("Hello");` — o compilador deu um erro: ``` error[E0423]: expected function, found macro `println` --> src/main.rs:2:5 | 2 | println("Hello"); | ^^^^^^^ not a function ``` Por que isso? É alguma função especial? Ou é uma característica da linguagem? Li que em Rust existem macros, mas não entendo bem como elas diferem de funções comuns. E também: `format!`, `vec!` — também têm ponto de exclamação. Todas essas são macros? Quando preciso usar o ponto de exclamação e quando não? Expliquem, por favor, em palavras simples para um iniciante.