Pular para o conteúdo

O estado de um módulo

Um módulo carrega uma vez, e o que ele guarda é compartilhado por todos que o adotam.

Um módulo é executado uma vez, no primeiro adopt. Os adopt seguintes do mesmo arquivo recebem o mesmo objeto — e com ele o mesmo estado. Um contador num módulo é um contador do programa, e não de quem o adotou.

dataforge
// contador.df
//     out "carregando"
//     contagem := {"n": 0}
//     action mais():
//         contagem["n"] += 1
//         yield contagem["n"]
//
// main.df
//     adopt ./contador as A
//     adopt ./contador as B
//     A.mais()
//     out B.mais()          // 2 — e "carregando" saiu UMA vez

out "o modulo carrega uma vez, e o estado e um so"
Isso é bom paraIsso é perigoso para
uma conexão aberta uma vezum valor que cada teste espera ver zerado
um cacheduas threads escrevendo no mesmo vault (ver escrita-concorrente)
uma configuração lida no começoesconder dependência: a ação lê algo que ninguém passou