Mutable Static Variables
It is safe to read an immutable static variable:
static HELLO_WORLD: &str = "Hello, world!"; fn main() { println!("HELLO_WORLD: {}", HELLO_WORLD); }
However, since data races can occur, it is unsafe to read and write mutable static variables:
static mut COUNTER: u32 = 0; fn add_to_counter(inc: u32) { unsafe { COUNTER += inc; } // Potential data race! } fn main() { add_to_counter(42); unsafe { println!("COUNTER: {}", COUNTER); } // Potential data race! }
Using a mutable static is generally a bad idea, but there are some cases where it might make sense
in low-level no_std code, such as implementing a heap allocator or working with some C APIs.
no_std is used to prevent Rust from loading the standard library. This is used for bare metal development for example. no_std in the Embedded Rust Book