Каковы общие черты / свойства языков программирования, которые облегчают (упрощают) разработку широко автоматизированных инструментов анализа исходного кода и реинжиниринга (преобразования)?
Я в основном думаю о функциях языка программирования, которые упрощают разработку инструментов статического анализа и рефакторинга (т.е. сравнивают Java и C ++, первый из которых лучше поддерживает рефакторинг).
Другими словами, язык программирования, который был бы явно разработан для обеспечения поддержки автоматического статического анализа и рефакторинга с самого начала, какие характеристики он хотел бы иметь?
Спецификация семантического интерфейса Ada (ASIS) - это многоуровневая открытая архитектура, обеспечивающая независимый от поставщика доступ к среде библиотеки Ada. Он позволяет проводить статический анализ программ и библиотек Ada. ASIS, спецификация семантического интерфейса Ada, представляет собой библиотеку, которая дает приложениям доступ к полной синтаксической и семантической структуре модуля компиляции Ada. Эта библиотека обычно используется инструментами, которым необходимо выполнять какой-то статический анализ в программе Ada.
Информация ASIS: ASIS предоставляет стандартный способ для инструментов извлечения данных, которые лучше всего собирает Компилятор Ada или другой анализатор исходного кода. Инструменты, использующие ASIS, сами написаны на Ada, и их можно очень легко перенести между компиляторами Ada, которые поддерживают ASIS. Используя ASIS, разработчики могут создавать мощные инструменты анализа кода с высокой степенью переносимости. Они также могут сэкономить значительные средства на реализации алгоритмов, извлекающих семантическую информацию из исходной программы. Например, уже существуют инструменты ASIS, которые генерируют метрики исходного кода, проверяют соответствие программы стилям или ограничениям кодирования, делают перекрестные ссылки и глобально анализируют программы для проверки и проверки.
См. Также FAQ по ASIS.
Можете ли вы подумать о других языках программирования, которые предоставляют такой же всеобъемлющий и полный интерфейс для работы с исходным кодом специально для целей анализа / преобразования?
Я думаю о конкретных методах реализации для обеспечения ловушек низкого уровня, например о функциях основной библиотеки, которые предоставляют способ проверки AST или ASG во время выполнения.