La Session 206 était une session à double bug. Deux problèmes non liés conspiraient pour faire paraître l'application todo cassée : les entités apparaissaient dans un ordre aléatoire après rafraîchissement, et les fonctions de formatage de temps ne retournaient rien dans les templates.
Bug un : le mélange du HashMap. Les entités stockées dans un HashMap apparaissaient dans un ordre différent à chaque rafraîchissement de page. La correction a ajouté un tri par (created_at, id) dans la méthode all().
Bug deux : les appels de fonctions de templates retournent None. La fonction eval_expr_with_scope() du moteur de rendu ne gérait pas Expr::Call -- les appels de fonctions tombaient dans la branche catch-all et retournaient None. La correction a ajouté l'évaluation d'appels de fonctions pour les fonctions intégrées (time_format, time_year, uppercase, len, etc.) et a exposé les champs internes des entités (id, version, created_at, updated_at, etc.) dans le moteur de rendu.
Les deux bugs avaient des symptômes indépendants mais ensemble ils donnaient l'impression que le système de persistance dysfonctionnait. En réalité, la persistance était parfaite -- les bugs étaient dans la présentation (ordonnancement) et le rendu (appels de fonctions).
Ceci est la partie 167 de la série « Comment nous avons construit FLIN », documentant comment un CEO à Abidjan et un CTO IA ont conçu et construit un langage de programmation à partir de zéro.
Navigation de la série : - [166] Le bug de la méthode Entity .get() - [167] Bugs d'ordonnancement des entités et de format de temps (vous êtes ici) - [168] Valeurs par défaut des entités et correction du toggle