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?