J'ai retravaillé l'impression de sexp, lexp, elexp, etc pour utiliser le module `Format`. L'objectif de ce changement est d'éviter que des appels au système de traçage ne dégrade la performance. Par exemple, prenons ce message.
Log.debug "ma lexp: %s\n" (lexp_string e)
Ça a le bon comportement, mais converti inutilement en texte la `lexp` `e` si le niveau `debug` n'est pas activé. Il existe un spécificateur `%a`, qui permet de passer une fonction de formatage, qui ne sera appelée que si l'impression a lieu.
Log.debug "ma lexp: %a\n" lexp_print e
Ce spécificateur est supporté par deux des modules de formatage de la bibliothèque standard, soit `Printf` et `Format`. J'ai choisi d'utiliser `Format` pour quelques raisons, en particulier le fait qu'il supporte des directives pour le pretty-printing. De plus Printf a le défaut que le type des fonctions de formattage dépend de la destination. Par exemple, `Trace.warn`, qui imprime directement sur stdout, et `Diagnostics.warn` qui imprime vers un string qui est gardé dans un log demandent deux versions différente de `lexp_print`.
https://gitlab.com/monnier/typer/-/compare/main...simon--pp-print
Il y a plein de conflits avec node-location (qui est maintenant dans `main`).
J'ai modifié la façon dont les fichiers sources sont traités.
https://gitlab.com/monnier/typer/-/compare/simon--sexp-node-location...simon...
En ce moment, si la source est un fichier, elle est lue ligne par ligne. Je propose de plutôt lire le fichier d'un coup.
Si je comprends bien seule la lecture des bytes est affectée, pas le lexing/parsing?
Stefan