This month Jim will present "Metaobject Protocols: Why We Want Them And What Else They Can Do" (http://cseweb.ucsd.edu/~vahdat/papers/mop.pdf) by Kiczales, Ashley, Rodriguez, Vahdat & Bobrow.
Abstraction is one of the pillars of computer science. Software has traditionally been constructed according to the principle that a module should expose its functionality but hide its implementation. This principle, informally known as black-box abstraction, is a basic tenet of software design, underlying our approaches to portability, reuse,and many other important issues in computing. However, in some cases black-box abstraction causes the very problems it is supposed to eliminate.
As a programming languages becomes higher and higher level, its implementation in terms of the underlying machines involves more and more trade-offs on the part of the implementer, about what cases to optimize at the expense of other cases. This leaves a programmer victim to inefficiencies driving them to break language abstractions and "code between the lines" making code more complex and less portable.
Meta-object protocols are a principled way of getting the most out of abstraction. It is a way to allow the end-programmer to go back and remake design tradeoffs to better suite their needs. In addition Meta-object protocols are an extremely fascinating and elegant formalism.
Thanks again to Brainium for being such a wonderful sponsor of our meetup