Cenário: lutando com o borrow checker — `.clone()` é sempre a saída?
Pergunta
Você está começando em Rust e toda vez que o borrow checker reclama, você coloca um `.clone()` e passa. Por que isso é um cheiro, e o que fazer melhor?
Resposta esperada
`.clone()` cega resolve o erro de compilação copiando o dado pra ter uma posse própria — mas cada clone é uma alocação/cópia que você provavelmente não precisa, e você está lutando contra o modelo em vez de aprender ele. Alternativas, na ordem: (1) emprestar em vez de mover — passar `&x` e receber `&T` onde a função só lê; ajustar assinaturas pra pedir referências. (2) reordenar o código pra que os empréstimos não se sobreponham no tempo (terminar de usar `a` antes de mutar `b`). (3) usar tipos que expressam a intenção — `Rc<T>`/`Arc<T>` pra compartilhamento real de posse, `Cow<T>` pra 'empresta, clona só se precisar mutar'. (4) às vezes o `.clone()` é REALMENTE a resposta certa (dado pequeno, código não-quente, clareza vale mais) — mas deve ser uma decisão, não um reflexo. O borrow checker reclamando geralmente aponta um design onde a posse não está clara.
Por que perguntam isso
Cenário pleno de Rust — a experiência universal de quem começa. Sinal de maturidade: 'clone consciente às vezes é a resposta certa' + as alternativas concretas.