Инструментарий кода Ада как часть компиляции GNAT?

Я ищу лучший способ интеграции компилятора GNAT с нашими инструментами анализа и модификации кода. Мы используем пользовательские инструменты для выполнения различных метрик кода (таких как время выполнения, покрытие тестами и т. Д.) И даже делаем некоторую запутанность кода. Так, например, для измерения времени выполнения кода мне нужно вставить 2 вызова процедуры в каждую функцию / процедуру (первый, где функция запускается, а другой для каждого выхода из функции). Код для этих 2 процедур реализован в отдельном модуле перевода. Каков наилучший способ выполнения этих инструкций кода (вставка / изменение кода) с помощью компилятора GNAT с точки зрения простоты и производительности? Я могу думать об этих нескольких способах:

  1. Поддерживает ли компилятор GNAT плагины генерации кода любого вида? Кажется, это не так, но, может быть, я что-то упустил, пока гуглял по этому поводу. Может быть, есть способ сделать это, используя некоторые приемы метапрограммирования (как в некоторых современных языках программирования, таких как Nimrod и D), но я не мог найти, поддерживает ли Ада вообще метапрограммирование.
  2. Похоже, библиотека ASIS может помочь мне, но она создана для создания отдельных инструментов. Можно ли интегрировать инструмент на основе ASIS с GNAT? Так, например, написать инструмент, который будет загружен GNAT во время компиляции и будет изменять узлы в AST до того, как он (AST) собирается преобразоваться в GIMPLE. Использование инструмента на основе ASIS отдельно (например, путем предварительной обработки каждого исходного файла перед его передачей компилятору) может сократить время компиляции, поскольку исходный код необходимо будет проанализировать дважды (инструментом и компилятором) и сохранить / загрузить в / из какого-то временного места на диске.
  3. Можно ли получить GIMPLE из компилятора GNAT, изменить и передать его в GCC? Я не мог найти, есть ли работающий интерфейс GIMPLE внутри GCC, но кажется, что GIMPLE используется только для внутреннего использования. Я могу создать дамп с помощью компилятора GCC, но потом не могу перекомпилировать модифицированный GIMPLE (кажется, что для GCC нет внешнего интерфейса GIMPLE).

0 ответов

Другие вопросы по тегам