Lexical Macros are Bad

Arthur van Dam just created this nice picture, with a clear statement, for me:

It's going to be featured in our discussion of Growing Languages with Metamorphic Syntax Macros, this Tuesday as part of the Software Generation and Configuration course I mentioned before. Thanks Arthur!


Meta Blog: How Do I Look?

Last week I changed the look of my homepage (which is a Wiki) to a style derived from Blogger's Rounders 3 template, which was designed by Douglas Bowman. Of course, I wanted to change the look of my blog as well; what you see now is the result of this. I hope you like it. As you can see, I'm fond of the combination of shades of blue and gray ;) .

The sources of my blog template are available from my Subversion repository. The sources of the Wiki skin for my homepage are there as well. Feel free to use it.


Paper of the Day

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?