Localized V2 rewrite for this language is in progress. Showing English-first content for now.

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 externo
  • Panic: operações que podem trap/abortar (ex.: divisão por zero, indexação fora dos limites)
  • Async: async/await e primitivas de concorrência
  • Alloc: alocação no heap
  • Mut: 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.

Próximo