Este es un complemento para GCC, que se vincula contra Libpython, y (espero) le permite invocar scripts de Python arbitrarios desde el interior del compilador. El objetivo es permitirle escribir complementos GCC en Python.
El complemento es un software gratuito, con licencia bajo el GPLV3 (o posterior).
Todavía está en la "Etapa experimental de prueba de concepto"; Espere accidentes y trazas (soy nuevo en el interior de GCC, y es posible que haya entendido mal las cosas).
Ya es posible usar esto para agregar errores/advertencias de compilador adicionales, controles de dominio por ejemplo o análisis estático. Uno de mis objetivos para esto es "enseñar" GCC sobre los errores comunes que cometen las personas al escribir extensiones para CPython, pero podría usarse, por ejemplo, para enseñar GCC sobre la semántica de conteo de referencia de GTK, o sobre el bloqueo en el núcleo de Linux, o sobre la seguridad de la señal en API.
Otras ideas incluyen visualizaciones de la estructura de código. Dada una instancia gcc.CFG , gccutils.render_to_dot(cfg) y gccutils.invoke_dot(cfg) utilizará GraphViz y EOG para trazar una visualización útil de un gráfico de flujo de control, que muestra el código fuente interlegado con la representación interna de GCC GIMPLE .
La documentación se puede ver en:
http://gcc-python-plugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev o gcc-plugin-devel .Yo uso:
hacer
Para construir el complemento y ejecutar las pruebas
También puedes usar:
hacer demostración
Para demostrar los nuevos errores del compilador.
El desarrollo ha estado en x86_64 y no sé en qué medida será compatible con otras arquitecturas.
Todavía no hay un instalador. En teoría, debería poder agregar estos argumentos a la invocación de GCC:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py otros_args
Y haga que ejecute su script a medida que se inicia el complemento.
El complemento agrega automáticamente la ruta absoluta a su propio directorio al final de su sys.
La API exacta todavía está en flujo; Actualmente puede conectarse a eventos registrando devoluciones de llamada, por ejemplo, para cada función en la fuente en diferentes pases.
Expone los diversos tipos de GCC como objetos de pitón, dentro de un módulo "GCC". Puedes ver la API ejecutando:
importar GCC Ayuda (GCC)
desde dentro de un guión.
Este es actualmente tres proyectos en uno:
gcc-python-* : El complemento para GCC. El EntryPoint ( init_plugin ) está en gcc-python.c .
libcpychecker y cpychecker.py : una biblioteca de Python (y un script de controlador), escrito para el complemento, en el que estoy construyendo nuevas advertencias de compiladores para ayudar a las personas a encontrar errores en el código de extensión de CPython.
cpybuilder : un módulo útil para generar programáticamente el código fuente C para las extensiones de CPython. Utilizo esto tanto para generar partes del complemento GCC como también en las propinas para el script CPyChecker. (Inicialmente intenté usar Cython para el primero, pero envolver la jerarquía de tipo "árbol" requería más control programático)
Estilo de codificación: Python y GCC tienen su propia guía de estilo de codificación para C. Elegí seguir el de Python (PEP-7), tal como lo prefiero (aunque mi código es ciertamente un desastre en algunos lugares).
Encontrará la documentación de API dentro del directorio "DOCS", escrito en el formato reestructuredText (como es este archivo, de hecho). Si tiene Sphinx instalado, puede regenerar estos documentos usando:
hacer html
Dentro del directorio docs . Sphinx es el paquete python-sphinx en una caja Fedora/Rhel.
Se puede ver una documentación más detallada dentro de docs/getting-involved.rst .
¡Disfrutar! David Malcolm <[email protected]>