AspectC++

AspectC++ — расширение языков программирования C и C++, реализующее парадигму аспектно-ориентированного программирования. Проект включает компилятор, который преобразует исходный код AspectC++ в компилируемый C++. Компилятор распространяется по лицензии GNU GPL, однако некоторые расширения, предназначенные для Microsoft Windows, доступны только через компанию pure-systems GmbH.

Аспектно-ориентированное программирование позволяет выносить сквозные функциональные требования в отдельные модули — аспекты. Аспекты могут модифицировать существующие классы, но чаще всего предоставляют «советы», которые выполняются до, после или вокруг базовой логики программы.

Общие сведения
AspectC++
Тип компилятор исходного кода
Разработчики Olaf Spinczyk (руководитель проекта), Georg Blaschke, Christoph Borchert, Benjamin Kramer, Daniel Lohmann, Horst Schirmeier, Ute Spinczyk, Reinhard Tartler, Matthias Urban[1]
Написана на C++
Операционная система кроссплатформенный
Первый выпуск 6 ноября 2001[2]
Последняя версия 2.4 (22 января 2025)
Лицензия GPL 2+
Сайт aspectc.org

Пример

Используя аспект, можно трассировать все вызовы определённой функции, вместо добавления операторов вывода в каждое место:

aspect Tracer
{ 
   advice call("% %Iter::Reset(...)") : before()
   {
      cerr << "about to call Iter::Reset for " << JoinPoint::signature() << endl;
   }
};

Аспект Tracer выведет сообщение перед любым вызовом %Iter::Reset. Синтаксис %Iter означает, что будет найдено совпадение со всеми классами, название которых оканчивается на Iter.

Каждое совпадение в исходном коде называется точкой соединения, к которой совет и применяется. AspectC++ предоставляет API для работы с точками соединения и извлечения информации о них. Например, функция

JoinPoint::signature()

возвращает имя вызываемой функции, совпавшей с шаблоном %Iter::Reset.

API точек соединения также предоставляет статическую информацию о типах, которая может быть использована внутри аспектов для доступа к типам или значениям аргументов, возвращаемому типу и значению функций и методов.

Примечания

Ссылки