proc main(): void {
x := 1 // inferido, imutável
mut count := 0 // inferido, reatribuível
mut Str[dyn] rows = [] // escrito: um vetor vazio não diz nada sozinho
MAX := 100 // imutável, e grafado como uma constante
count = count + 1
append(rows, "first")
echo "{x} {count} {rows} {MAX}"
}proc main(): void {
mut total := 10
// total := 20 // erro de compilação: `total` já foi declarado neste bloco
total = 20 // uma atribuição, que é o que aquela linha queria dizer
_ := total * 2 // descartado, de propósito
_ := total + 1 // e de novo: `_` nunca é declarado
echo total
}x := valor declara uma variável e infere o tipo dela a partir do valor, incluindo o tamanho de um vetor. Tipo x = valor escreve o tipo explicitamente, que é como um valor que não diz nada sobre a própria forma — um vetor vazio, um mapa novo — ganha uma, e a única forma de dizer [dyn]: um tamanho lido do valor é um tamanho do mesmo jeito, e só um vetor declarado [dyn] pode crescer — o append, abaixo, é como.
Uma variável é imutável a menos que seja declarada mut. Uma imutável não pode ser reatribuída nem escrita por dentro (v[0] = …, u.name = …), qualquer que seja a grafia: UPPER_CASE é uma convenção para esse tipo de variável, e quem decide é o mut.
Um nome é declarado uma vez por bloco. Declará-lo de novo no mesmo bloco é um erro de compilação — atribua a ele em vez disso — enquanto um bloco interno pode declarar o seu próprio, que esconde o de fora até o bloco interno terminar. _ := valor descarta um valor, quantas vezes você quiser.