¿Por qué en Rust println! y otras macros tienen un signo de exclamación?
¡Hola a todos! Empecé a aprender Rust hace apenas una semana y me encontré con una pregunta que me confunde un poco. ¿Por qué en Rust, al imprimir en consola, escribimos `println!` con un signo de exclamación? Estoy acostumbrado a Python, Java y C++, donde las llamadas a funciones siempre son sin signo de exclamación, por ejemplo, `print()`, `System.out.println()` o `std::cout <<`.
Miré ejemplos — en todas partes escriben `println!("Hello, world!");`. Intenté escribir simplemente `println("Hello");` — el compilador dio un error:
```
error[E0423]: expected function, found macro `println`
--> src/main.rs:2:5
|
2 | println("Hello");
| ^^^^^^^ not a function
```
¿Por qué es así? ¿Es alguna función especial? ¿O es una característica del lenguaje? Leí que en Rust hay macros, pero no entiendo bien en qué se diferencian de las funciones normales. Y también: `format!`, `vec!` — también con signo de exclamación. ¿Son todas macros? ¿Cuándo necesito usar el signo de exclamación y cuándo no?
Explíquenme, por favor, en palabras simples para un principiante.