At AOSD 2006, there was a "Birds of a Feather" meeting of people interested in languages and technologies for aspect-oriented programming in C. The participants decided that they needed a page in the AOSD Wiki to serve as a resource for people who want to learn about and discuss "aspects in C" and related topics. You're reading that page now, and since you're here, I assume you're interested.
Welcome! Please contribute!
Below you will also find a growing list of pointers to project pages, people pages, discussions of open issues, and so on.
This PhD compares all aspect languages/frameworks for C up until March 2008.
Table of contents |
Language-Based Systems
AspectC++ is an AO language extension for C++. It has already been used in a number of research projects at universities and companies. Besides weaving in C++ code, aspects can also be woven in plain C code as long as only the C subset of C++ is being used and the generated code is compiled with a C++ compiler. Full C support, i.e. a transformation from C input into C output and C-specific pointcut functions, is currently being implemented.
AspeCt-oriented C (ACC) enables aspect-oriented software development with the C programming language. ACC provides a compiler that translates code written in ACC into ANSI-C code. This code can be compiled by any ANSI-C compliant compiler, like for example gcc. The ACC compiler builds on proven aspect-oriented language design, most notably the AspectJ language design. The ACC compiler supports call/execution join points, the cflow() pointcut, join point context exposure, wildcard character matching, reflective thisJoinPoint information, composite pointcuts, named pointcuts, before/after/around advice, static crosscutting and debugging on original files. The ACC compiler generates thread safe code and code compatible with gcc. It is currently used in a 3rd introductory Operating Systems course at the University of Toronto. ACC also provides a set of weave adapters to easily integrate aspects into the existing build process of large C software projects.
Aspicere is an aspect language for C. Its aspects are plain C modules enriched with an advice construct. The pointcut language is based on Prolog and allows to bind logic variables for use as template parameters within the advice body. Aspicere has support for delimited continuation join points, annotations and temporal pointcuts. We implemented a source-to-source and a link-time aspect weaver, which have been applied in various case studies.
Binary-Based Systems (e.g., Binary Weavers)
µDyner has been superseded by Arachne
TinyC
TOSKANA
VM-Based Systems
TOSKANA-VM
People Interested in Aspects in C/C++/...
Bram Adams designed Aspicere to re(verse)-engineer legacy C applications.
Alexandre Bergel is interested in how and when aspects can be applied to embedded device and automotive software.
Chris Matthews and Yvonne Coady have started revamping the original AspectC prototype (based on a gcc 2.95 grammar), and are anxious for community input on this -- project page coming soon!
Olaf Spinczyk is the leader of the AspectC++ project, which supports aspect weaving in C++ (and soon also plain C).
Pericles Leng Cheng is starting his PhD work on Aspects and their applications in embedded systems.
Mike Mortensen is using AspectC++ with legacy C++ systems for VLSI CAD programming and chip verification.
![[Main Page]](/wiki/skins/common/images/AOSDWikiLogo.gif)