Avatar ·

Como criar um singleton global e mutável em Rust?

Olá! Estou estudando Rust e tentando criar uma variável global acessível de qualquer parte do programa que possa ser modificada. Por exemplo, preciso armazenar a configuração da aplicação, que é carregada uma vez na inicialização e pode ser atualizada depois. Em C++ ou Python, eu simplesmente faria uma variável global, mas no Rust o compilador reclama. Aqui está o que tentei: ```rust static CONFIG: Vec = Vec::new(); // erro: falta tempo de vida ``` Depois tentei `static mut`: ```rust static mut COUNTER: i32 = 0; fn increment() { unsafe { COUNTER += 1; } } ``` Isso funciona, mas me disseram que `static mut` é inseguro e pode causar data races. Ouvi falar sobre `Mutex`, `OnceCell` e `lazy_static`, mas não entendo como combiná-los corretamente. Preciso de: - Inicializar a variável global uma vez na inicialização do programa - Lê-la de várias threads - Modificá-la ocasionalmente (mas não simultaneamente de diferentes threads) Como fazer corretamente?