They're not.
fn main() { unsafe { COUNTER += 1; println!("COUNTER = {}", COUNTER); } unsafe { COUNTER += 10; println!("COUNTER = {}", COUNTER); } }
use std::sync::Mutex; static LIST: Mutex<Vec<String>> = Mutex::new(Vec::new()); fn main() -> Result<(), Box<dyn std::error::Error>> { LIST.lock()?.push("hello world".to_string()); println!("{}", LIST.lock()?[0]); Ok(()) }
reply
It doesn't increment anything for starters. The example would be more convoluted if it did the same thing.
And strings in rust always delivers the WTFs I need o na Friday:
"hello world".to_string()
use std::sync::Mutex; fn main() -> Result<(), Box<dyn std::error::Error>> { static PEDANTRY: Mutex<u64> = Mutex::new(0); *PEDANTRY.lock()? += 1; println!("{}", PEDANTRY.lock()?); Ok(()) }
And declaring a static variable inside a function, even if in main, smells.
They're not.
Global mutable variables are as easy in Rust as in any other language. Unlike other languages, Rust also provides better things that you can use instead.