use std::sync::Mutex; // Globale Konstanten, können außerhalb von Funktionen deklariert werden const ANTWORT_AUF_ALLES: i32 = 42; // Const sind echte Konstanten, die nicht verändert werden könne und auch nicht überschattet werden können // Dies haben keinen festen Speicherplatz, sondern werden überall eingebettet, wo diese verwendet werden // Sie können in jedem Scope definiert werden, auch in Funktionen wie Variablen static mut PRAESENTIERER: &str = "Semih"; // Bei static ist es anders, diese existieren genau einmal im Speicher und haben somit eine feste Speicheradresse // Können mit mut versehen werden, diese können dann verändert werden in unsafe Blöcken // Dies sollte eher vermieden werden, um veränderbare static Konstanten zu erzeugen sollten Mutex verwendet werden static COUNTER: Mutex = Mutex::new(0); // Nun ist es sicher dank Mutex fn main() { println!("x = {ANTWORT_AUF_ALLES}"); static x: i32 = 3; // Da static mut unsafe ist, können sie nur in solchen unsafe Blöcken verändert und gelesen werden, anders nicht unsafe { println!("Aktueller Präsentierer ist: {PRAESENTIERER}"); PRAESENTIERER = "Lukas"; println!("Der nächste Präsentierer ist: {PRAESENTIERER}"); } // Das hier in Advanced { // Hier erstellen wir eine veränderliche Variable, die wir dannn locken, dann unwrappen, und dann um eins erhöhen können // Für die Basics ist das zu komplex zum erklären, wir nehmen das mal so hin // Man muss es in dem Fall nicht nochmal unlocken, dass geschieht beim Verlassen des Blocks automatisch let mut c = COUNTER.lock().unwrap(); println!("{c}"); *c += 1; } { let c = COUNTER.lock().unwrap(); println!("{c}"); } }