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 para | Isso é perigoso para |
|---|---|
| uma conexão aberta uma vez | um valor que cada teste espera ver zerado |
| um cache | duas threads escrevendo no mesmo vault (ver escrita-concorrente) |
| uma configuração lida no começo | esconder dependência: a ação lê algo que ninguém passou |