URL: https://linuxfr.org/users/blackknight/journaux/renaissance-ada Title: Renaissance Ada Authors: Blackknight Date: 2022年02月02日T10:39:53+01:00 License: CC By-SA Tags: ada et analyse_statique Score: 25 Désolé pour le titre qui pourrait faire penser à une secte mais je n'y peux rien. [Renaissance Ada](https://github.com/TNO/Renaissance-Ada) est le nom d'un ensemble bibliothèques et outils. Le but de ces outils est de permettre la visualisation graphique de la structure d'un code, son analyse et sa modification en fonction de règles. Pour ceux qui veulent aller vite (et les autres aussi, c'est intéressant), il y a [une vidéo](https://www.youtube.com/watch?v=EHrd-9wgALM) d'une vingtaine de minutes expliquant ce que l'on peut faire sur la partie analyse et modifications. Pour les autres, l'ensemble est basé sur [Libadalang](https://www.adacore.com/libadalang). Mais qu'est-ce ? # ASIS # Au début était [ASIS](https://en.wikipedia.org/wiki/Ada_Semantic_Interface_Specification). Comme son nom l'indique, ASIS est une interface permettant d'analyser le code source Ada au travers d'un programme Ada. Cela permet donc d'écrire des outils en Ada comme [AdaControl](https://www.adalog.fr/en/adacontrol.html) dont le but est de rechercher dans un projet les constructions potentiellement dangereuses, [_gnatstub_](https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/gnat_utility_programs.html#the-body-stub-generator-gnatstub) qui génère le corps d'un package à partir de sa spécification... On le retrouvait aussi dans le code permettant l'affichage du [graphe d'appels](https://en.wikipedia.org/wiki/Call_graph) dans [GNAT Studio](https://en.wikipedia.org/wiki/GNAT_Programming_Studio). Le problème est que, dans le monde open source, l'implémentation d'ASIS est à la charge d'Adacore et que cette implémentation n'est plus fournie que dans la version PRO du compilateur depuis GNAT CE 2019 (voir [ici](https://www.adalog.fr/en/adacontrol.html#download)). # Libadalang # Les raisons d'être de Libadalang peuvent être trouvées sur [la page Github](https://github.com/AdaCore/libadalang#libadalang-and-asis). Grosso modo : - ASIS étant un standard, son évolution est lente voire trop lente. - ASIS ne fonctionne que sur du code syntaxiquement correct - l'implémentation d'ASIS dans GNAT travaille directement sur la représentation du code par le compilateur et est donc dépendante de la version de celui-ci - ASIS est une interface pour Ada seulement En ligne de mire, l'idée d'Adacore était d'avoir un outil plus souple pour gérer l'autocomplétion dans GNAT Studio (je schématise) et de pouvoir fournir une API externe permettant de manipuler le code via, notamment Python. Maintenant, pour ceux qui veulent vraiment aller plus loin, Jean-Pierre Rosen, concepteur d'AdaControl et président d'Ada-France, a écrit [un texte de comparaison entre ASIS et Libadalang](https://www.adalog.fr/publicat/ASIS-LAL.pdf). Voilà, bonne lecture