Slide 14 de 37

func vs proc

func: não pode tocar no armazenamento de quem chamou
func greet(name: Str): Str {
	return "olá, {name}!"
}

proc main(): void {
	echo greet("ada")
}
proc: pode guardar um mutex
proc grow(vec: mut Str[dyn], tag: Str): void {
	append(vec, tag)
}

proc main(): void {
	mut Str[dyn] tags = ["bee"]
	grow(tags, "hive")
	echo tags
}
Ambos podem fazer I/O — echo, using, hive.net funcionam nos dois. A diferença é o que cada um pode tocar: um func não pode declarar um parâmetro mutex (v: mut T) e não pode chamar um proc, então nunca pode escrever em um armazenamento que quem o chamou consiga ver. Um proc pode fazer tudo que um func faz, além de guardar um mutex e chamar outros procs. Programas começam em proc main(): void. Nada na declaração diz como uma chamada roda — isso é decidido totalmente no local da chamada.