Macros are a form of metaprogramming in Rust. Macros are able to take in a variable number of parameters (like println!) and generate Rust code to satisfy the listed parameters.
eprintln! does the same thing as println!, but prints to stderr instead.