Il s'agit d'un plugin pour GCC, qui relie Libpython, et (j'espère) vous permet d'invoquer des scripts python arbitraires de l'intérieur du compilateur. L'objectif est de vous permettre d'écrire des plugins GCC dans Python.
Le plugin est un logiciel libre, sous licence dans le GPLV3 (ou version ultérieure).
Il est toujours à la "phase expérimentale de la preuve de concept"; Attendez-vous à des accidents et à des traces (je suis nouveau à l'intérieur de GCC, et j'ai peut-être mal compris les choses).
Il est déjà possible de l'utiliser pour ajouter des erreurs / avertissements de compilateur supplémentaires, par exemple des contrôles spécifiques au domaine ou une analyse statique. L'un de mes objectifs est de «enseigner» au CCC sur les erreurs courantes que les gens font lors de l'écriture d'extensions pour CPYthon, mais il pourrait être utilisé par exemple pour enseigner au GCC sur la sémantique de comptage de référence de GTK, ou sur le verrouillage du noyau Linux, ou sur la sécurité du signal dans les API.
D'autres idées incluent les visualisations de la structure du code. Compte tenu d'une instance gcc.CFG , gccutils.render_to_dot(cfg) et gccutils.invoke_dot(cfg) utiliseront Graphviz et EOG pour tracer une visualisation pratique d'un graphique de flux de contrôle, montrant le code source entrelacé avec la représentation interne GIMPLE de GCC.
La documentation peut être vue sur:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev ou gcc-plugin-devel .J'utilise:
faire
Pour construire le plugin et exécuter les tests
Vous pouvez également utiliser:
faire une démo
pour démontrer les nouvelles erreurs du compilateur.
Le développement a été sur x86_64 et je ne sais pas dans quelle mesure il sera compatible avec d'autres architectures.
Il n'y a pas encore de programme d'installation. En théorie, vous devriez être en mesure d'ajouter ces arguments à l'invocation du CCG:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py autre_args
Et faites-le exécuter votre script lorsque le plugin démarre.
Le plugin ajoute automatiquement le chemin absolu à son propre répertoire à la fin de son SYS.PATH, afin qu'il puisse trouver des modules de support, tels que gccUtils.py et libcpychecker.
L'API exacte est toujours en flux; Vous pouvez actuellement vous connecter à des événements en enregistrant des rappels, par exemple, pour être appelé pour chaque fonction dans la source à différents passes.
Il expose les différents types de GCC en tant qu'objets Python, dans un module "GCC". Vous pouvez voir l'API en fonctionnant:
Importer GCC Aide (GCC)
de l'intérieur d'un script.
Il s'agit actuellement de trois projets en un:
gcc-python-* : le plugin pour gcc. Le point d'entrée ( init_plugin ) est dans gcc-python.c .
libcpychecker et cpychecker.py : une bibliothèque Python (et un script de pilote), écrite pour le plugin, dans lequel je construis de nouveaux avertissements de compilateur pour aider les gens à trouver des bogues dans le code d'extension cpython.
cpybuilder : Un module pratique pour générer programatiquement le code source C pour les extensions CPYTHON. Je l'utilise à la fois pour générer des pièces du plugin GCC, et aussi dans les auto-tests pour le script CPYChecker. (J'ai d'abord tenté d'utiliser Cython pour le premier, mais envelopper la hiérarchie de type "arbre" nécessitait plus de contrôle programmatique)
Style de codage: Python et GCC ont chacun leur propre guide de style de codage pour C. J'ai choisi de suivre Python (PEP-7), comme je le préfère (bien que mon code soit certes un gâchis par endroits).
Vous trouverez une documentation API dans le répertoire "DOCS", écrit dans le format de texte restructuré (comme ce fichier, en fait). Si vous avez installé Sphinx, vous pouvez régénérer ces documents en utilisant:
faire du HTML
Dans le répertoire docs . Sphinx est le package python-sphinx sur une boîte Fedora / Rhel.
Une documentation plus détaillée peut être vue dans docs/getting-involved.rst .
Apprécier! David Malcolm <[email protected]>