Em que contexto a palavra-chave 'non-Escaping' é usada em Rust e por que ela é necessária?
sobes.tech IA
Resposta da IA
Em Swift (e não em Rust), a palavra-chave @noescape (antes do Swift 3) ou o comportamento padrão para closures é que são closures não-escapantes, ou seja, closures que garantidamente não são guardadas nem chamadas após a saída da função. Em Rust, não há uma palavra-chave "non-Escaping" propriamente dita, mas há conceitos semelhantes de propriedade e empréstimo que garantem a segurança das referências.
Falando de Swift, closures não-escapantes são necessárias para otimização e segurança: o compilador sabe que a closure não viverá além da chamada da função, podendo evitar referências fortes e ciclos de retenção.
Exemplo em Swift:
func perform(action: () -> Void) { // closure não-escapante
action()
}
Aqui, action não pode ser guardada nem chamada posteriormente, o que simplifica a gestão de memória.
Em Rust, a gestão do tempo de vida e empréstimos é resolvida através do sistema de lifetimes e propriedade, que previne que referências "escapem" do seu escopo.