La persistance : les bases .fixdb
Par défaut, une session Fix vit en mémoire : tu charges, tu satures, tu interroges — et à la sortie, tout s'efface. Pour garder tes faits d'une session à l'autre, ouvre une base durable avec --db.
La fiche exacte reste
:help fixdb(l'autorité). Cette page raconte le pourquoi et le comment large.
Créer une base
Une base se crée à partir d'un fichier source, une fois :
$ fix --db notes.fixdb notes.fix
fix: base créée — notes.fix ingéré.
Fix v3.1.0 — 2 faits, 0 règles → fixpoint : 2 faits
La source est ingérée à la création, et seulement là. Ensuite, c'est la base qui fait autorité — plus le fichier.
Rouvrir : tout est là
À la réouverture, tu ne passes plus de source — la base se rouvre à son dernier état. Ce que tu ajoutes est persisté :
$ fix --db notes.fixdb
Fix v3.1.0 — 2 faits, 0 règles → fixpoint : 2 faits
?- :assert note(idee, "documenter fixdb").
ok — fait asséré. Fix v3.1.0 — 3 faits, 0 règles → fixpoint : 3 faits
?- note(K, V).
K = projet, V = relire la spec
K = idee, V = documenter fixdb
Ferme, rouvre : le fait idee est toujours là. :assert et :retract mutent la base ; :load y ingère un autre fichier. Chaque changement est enregistré, durablement.
La source n'est plus l'autorité
Une fois la base créée, lui repasser un fichier en ligne de commande est refusé — pour ne pas écraser silencieusement ce que la base contient :
$ fix --db notes.fixdb notes.fix
fix: base existante `notes.fixdb` — les sources en ligne de commande ne sont
ingérées qu'à la CRÉATION. Utilise `:load notes.fix` pour ingérer (journalisé).
→ :help fixdb
Pour la même raison, :reload (qui, en mémoire, recharge le fichier) n'a pas de sens ici et est refusé : la base est la vérité, pas le fichier.
Entretenir la base
:db— diagnostique la base active : chemin, transactions, tailles.
?- :db
base active : notes.fixdb
transactions acquittées (journal) : 2
:checkpoint— compacte la base (l'automatique sur seuil est le défaut, tu n'as normalement rien à faire).fix --db-repair notes.fixdb— si une base a été laissée dans un état incohérent, la répare en revenant au dernier point valide.
Les bords honnêtes
- La source
.fixn'est lue qu'à la création ; après, tout passe par la base (:load,:assert,:retract). :reloadest refusé en mode base — la base fait autorité.--testet--dbsont incompatibles : le runner de tests travaille sur des sources, pas sur une base.- Sans
--db, le comportement est exactement celui d'avant : une session mémoire, à coût nul.
À côté
:help fixdb— la fiche canonique, dans le REPL.- Catalogue des erreurs — les refus
db_*(base verrouillée, version incompatible, journal corrompu…). - Référence : fiches — commandes et concepts.