Avatar ·

É possível usar variáveis globais em Rust?

Olá a todos! Comecei a estudar Rust recentemente, vindo do C++, e encontrei um problema. Em C++, eu estava acostumado a usar variáveis globais para armazenar configurações da aplicação ou contadores que precisam ser acessados de diferentes funções. Por exemplo, tenho um contador simples de chamadas de função: ```rust static COUNTER: i32 = 0; fn increment() { COUNTER += 1; // Erro! } ``` O compilador gera um erro: "cannot mutate static variable". Tentei envolvê-la em `mut`: ```rust static mut COUNTER: i32 = 0; fn increment() { COUNTER += 1; // unsafe! Muito inconveniente. } ``` Agora o compilador exige envolver o acesso em `unsafe { ... }`. Entendo que isso não é seguro, mas como organizar corretamente o estado global? Preciso que a variável seja visível em todo o programa, mas o código permaneça seguro. Ouvi falar sobre `lazy_static` e `OnceCell`, mas não entendo qual abordagem escolher. Por favor, me digam como é comum trabalhar com variáveis globais em Rust?