Yesterday, I read the article "Towards
a New Model of Abstraction in Software Engineering" by Gregor
Kiczales. We are going to discuss this paper tomorrow (Thursday)
in our master
seminar on software generation and configuration. I'm not
really convinced that aspect-oriented programming (as it is
currently implemented in AspectJ) is the way to go, but this
earlier article is brilliant!
The problem with abstraction is very well described: abstractions
cannot hide their implementations. The need for a separation of
meta-level interfaces from base interfaces is entirely clear after
reading this paper. The papers immediately reminded me of The
Law of Leaky Abstractions. The law introduced in this
excellent article by Joel Spolsky is cited quite
frequently. However, the credits for identifying this problem (and
suggesting a solution!) should go to this article by Gregor
Kiczales. I think that many of the ideas expressed in his article
are still not realized and researched thorough enough.
Another interesting thing to note is that annotations and
attributes as they are available in C# and Java are not really
that novel. Until now, it was unclear to me where the idea of
attributes in C# actually came from. I think other people have
this problem as well, since the idea of adding attributes to
source code is often described as being truly novel. After
reading more about metaobject
protocols, it seems that annotations are nothing more than
what was already available in the earliest MOP systems. Why has
this link never been explained? Or did I miss something?