Efeitos
Torne efeitos colaterais explícitos com `with IO`, `with Panic`, `with Async` e efeitos customizados.
Efeitos
Sounio rastreia efeitos colaterais nas assinaturas de funções usando uma cláusula explícita with ....
Puro vs Efeito
fn double(x: i32) -> i32 {
x * 2
}
fn greet() with IO {
println("Hello")
}
Efeitos Embutidos (Comuns)
IO: console + filesystem + I/O externoPanic: operações que podem trap/abortar (ex.: divisão por zero, indexação fora dos limites)Async: async/await e primitivas de concorrênciaAlloc: alocação no heapMut: estado mutável (quando aplicável)GPU: kernels de GPU / operações de device (dependente de features)
Erros de Efeito
Se você chama uma função com efeito a partir de uma função pura, o compilador reporta um erro até que você:
- adicione o(s) efeito(s) necessário(s) na assinatura do chamador, ou
- refatore para manter o efeito na borda (recomendado).
Especificação vs Implementação
O objetivo da especificação é “efeitos são explícitos em todo lugar”. Algumas operações embutidas podem atualmente ser tratadas de forma mais leniente do que funções com efeito definidas pelo usuário, dependendo do modo do compilador e de feature flags.