Slide 16 de 37

Mutabilidade e semântica de valor

proc main(): void {
	mut Str[dyn] a = ["x", "y"]
	mut Str[dyn] b = a       // um alias: dois nomes, um só cabeçalho
	append(b, "z")            // len(a) também é 3 agora
	echo a

	b = ["replaced"]          // reatribuir um reatribui os dois
	echo a
}
Variáveis são imutáveis a menos que marcadas com mut. Vetores, tabelas, maps e os tipos declarados construídos a partir deles são tipos de valor: dois nomes para um mesmo valor nunca observam as escritas um do outro — a menos que ambos sejam mut, que é como o compartilhamento é escolhido. Um parâmetro mutex (v: mut T) é o único lugar em que o armazenamento cruza uma fronteira de chamada de propósito, e só um proc pode declarar um; se uma chamada compartilha o armazenamento de quem a chamou ou uma cópia depende de quem a chamou esperar por ela ali ou disparar com async.