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.