One of the most useful Rust functionalities is its macro ecosystem. You probably already know the println!() macro, but there are many more. These macros allow you to write complex boilerplate code (such as stdio handling in the println!() case) in a simple way and without having to add a ton of boilerplate code. Let's check out some of the most used ones.
Macros
Console printing
When you need to lock the standard I/O interface, then write bytes to it, and finally flush it for each call, the print!() and println!() macros allow you to do that by just giving them a formatting static string and a series of parameters. Not only that, you can use the whole std::fmt module to specify number precision, format things in debug...