Это плагин для GCC, который ссылается на Libpython, и (я надеюсь) позволяет вам вызывать произвольные сценарии Python из компилятора. Цель состоит в том, чтобы позволить вам написать плагины GCC в Python.
Плагин представляет собой бесплатное программное обеспечение, лицензированное под GPLV3 (или позже).
Он все еще находится на «Экспериментальной стадии подтверждения концепции»; Ожидайте аварий и трассировки (я новичок в внутренних веществах GCC, и я, возможно, неправильно понял).
Уже можно использовать это для добавления дополнительных ошибок/предупреждений компилятора, например, проверки, специфичных для домена или статического анализа. Одна из моих целей для этого состоит в том, чтобы «научить» GCC об общих ошибках, которые люди совершают при написании расширений для CPYTHON, но его можно использовать, например, для обучения GCC о семантике с подсчета ссылок GTK или о блокировке в ядре Linux или о безопасности сигнала в API.
Другие идеи включают визуализации структуры кода. Учитывая экземпляр gcc.CFG , gccutils.render_to_dot(cfg) и gccutils.invoke_dot(cfg) будут использовать GRAPHVIZ и EOG для построения удобной визуализации графа управляющего потока, показывая исходный код, пройденное с внутренним представлением GIMPLE .
Документация можно увидеть по адресу:
http://gcc-python-lugin.readthedocs.io/en/latest/index.html
gcc-N-plugin-dev или gcc-plugin-devel .Я использую:
делать
Чтобы создать плагин и запустить тесты
Вы также можете использовать:
сделать демонстрацию
Чтобы продемонстрировать новые ошибки компилятора.
Разработка была на x86_64, и я не знаю, в какой степени она будет совместима с другими архитектурами.
Установитель еще нет. Теоретически вы должны быть в состоянии добавить эти аргументы в вызов GCC:
gcc -fplugin = python.so -fplugin-arg-python-script = path_to_script.py other_args
И пусть он запустит ваш сценарий, когда плагин запускается.
Плагин автоматически добавляет абсолютный путь к своему собственному каталогу к концу своего SYS.Path, чтобы он мог найти модули поддержки, такие как GCCUTILS.PY и Libcpychecker.
Точный API все еще в движении; В настоящее время вы можете подключиться к событиям, зарегистрировав обратные вызовы, например, для каждой функции в источнике при разных проходах.
Он обнаруживает различные типы GCC как объекты Python, в модуле «GCC». Вы можете увидеть API, работая:
Импорт GCC Помощь (GCC)
из сценария.
В настоящее время это три проекта в одном:
gcc-python-* : плагин для GCC. Входная точка ( init_plugin ) находится в gcc-python.c .
libcpychecker и cpychecker.py : библиотека Python (и сценарий драйвера), написанная для плагина, в которой я строю новые предупреждения компилятора, чтобы помочь людям найти ошибки в коде расширения CPYTHON.
cpybuilder : удобный модуль для программного генерации исходного кода C для расширений CPYTHON. Я использую это как для генерации частей плагина GCC, так и в самостоятельстве для сценария CPYCHECKER. (Первоначально я попытался использовать цинтон для первого, но обертка иерархии типа «дерево» потребовала более программного контроля)
Стиль кодирования: у Python и GCC есть свое собственное руководство по стилю кодирования для C. Я решил следовать за Python (PEP-7), как я предпочитаю (хотя мой код, по общему признанию, в местах в местах).
Вы найдете документацию API в каталоге «Документы», написанную в формате реструктурированного текста (как и этот файл, фактически). Если у вас установлен Sphinx, вы можете восстановить эти документы, используя:
сделать HTML
В справочнике docs . Sphinx-это пакет python-sphinx на коробке Fedora/Rhel.
Более подробную документацию можно увидеть в docs/getting-involved.rst .
Наслаждаться! Дэвид Малкольм <[email protected]>