Salut,
J’ai commencé à apprendre Frama-C avec ton tutoriel et j’en profite pour le bêta-tester.
Si ça peut t’aider à me situer par rapport à ta cible, j’utilise Linux au quotidien depuis près de 10 ans, je suis un développeur amateur qui a touché à des langages divers (C, OCaml, Java, Python, essentiellement) avec pas mal de culture générale sur les écosystèmes des différents langages, et je connais un peu Coq et ai aussi pas mal de culture générale sur les méthodes formelles.
L’anglais est un peu étrange par endroit, mais ce n’est pas bloquant (et pas primordial).
Le premier gros écueil que j’ai eu, c’est l’installation. Il y a des instructions, ce qui est déjà bien, par contre, elles ne sont pas assez précises pour être autre chose que des indications. Je me doute bien que le mieux est de lire des instructions officielles quelque part, mais autant ne rien mettre dans le tutoriel et renvoyer vers la doc officielle si elle tient la route.
J’ai commencé par choisir la méthode utilisant le gestionnaire du paquet du système (Linux Mint pour ma part). J’ai eu un mal fou à trouver le vrai nom des paquets pour les installer, ce qui n’était pas très pratique. Ensuite, sans surprise, la version des dépôts était ancienne et ne se ressemblait pas assez au tuto pour suivre correctement. J’ai donc décidé de faire la méthode d’installation avec OPAM.
Avec OPAM, j’ai pu installer ce qu’il faut, mais j’ai vraiment galéré (en partie à cause de mon inexpérience avec l’outil) :
- plein d’erreurs de compilation pour des histoires de dépendance externes (dont autoconf que je n’avais pas et qui n’est pas listé dans le tuto je crois) ;
- histoires de dépendance internes (sachant que les messages d’erreur ne sont pas toujours très clair), que j’ai réglé avec update/upgrade dans opam (sérieux ? Ce n’est pas le boulot d’opam de vérifier que j’ai les bonnes versions ?!) ;
- après, j’ai pas pigé tout de suite que l’environnement était mal configuré et que c’était pour ça que j’ouvrais l’ancienne version.
Bref, cette étape a été un peu frustrante.
Le PDF ne me permet pas de copier-coller correctement. Pour le code de test de l’installation, ce n’est pas très pratique ; j’ai dû ajuster à la main. Ça se fait, mais c’est désagréable.
Plus loin, on dit que l’implication est équivalent à ¬A∧B, ce qui est faux, puisque c’est (NON A) OU B
.
C’est sympa de voir que Z3 dépasse le temps alloué, mais je ne vais pas installer Z3 au tout début du tuto juste pour ça. Et ça fait que je me demande un peu si je devrais avoir Z3 moi aussi à ce stade ou pas.
Je me demande si le vocabulaire ne devrait pas être plus cohérent avec l’interface. Je vois que tu utilises beaucoup "verification conditions", mais l’interface parle de "goals" (dans l’onglet) ou de "proof obligations" (quand on en supprime une avec "Clear").
Après je crois que tu n’y peux rien, mais si j’insère un caractère étrange dans un fichier (par exemple une espace insécable), ça produit une entrée invalide pour Frama-C (normal), mais si je corrige le fichier, alors Frama-C me sort un message d’erreur pour ce fichier et tous les autres fichiers que j’essaie de charger ! J’ai été obligé de relancer Frama-C pour faire disparaître le problème. J’imagine que c’est un bug, mais c’est carrément grossier. J’utilise la version "Frama-C 18.0 (Argon)". On va où pour faire des rapports de bugs ?
L’exercice 3 sur l’alphabet est un peu bizarre dans le PDF, vu qu’on attend explicitement 1 et 0 pour r. Par contre, sur le dépôt on utilise bien r comme un booléen. J’ai du mal à savoir lequel est le plus récent à cause des dates.
L’exemple de la division (3.2.4.1) est plus délicat qu’il n’y paraît. Il y a une page Wikipédia entière qui parle de ça. En gros, le code de correction actuel manque une post-condition et si on prend la définition traditionnelle, alors le code est problématique. Je crois que c’est un exemple à éviter, si on veut rester simple.
Provide a contract for the following function that reset its first parameter if the second is true
if and only if
Bon c’est tout pour aujourd’hui.