OOPSLA '08: Smalltalk Superpowers

Smalltalk Superpowers
It seems like John (in the green shirt) is about to use some of his superpowers and fly off into the screen....

Smalltalk Superpowers has to be one of the better workshops at OOPSLA that I have attended - well, I have only attended two so far so that doesn't say too much. What I liked about the workshop was the abundance of actual code (mostly short snippets) that were actually used in real systems. There wasn't the usual nonsense hand-waving; on the other hand we saw actual code that people wrote and had used. Some of the code snippets were beautiful, some were atrocious, and some were just too damn heretical that they should remain as skeletons in the closet. However, all of them had a purpose (though some were rather questionable and were just used to demonstrate the Smalltalk-hackery-kung-fu).

I was already familiar with most of the main concepts that were used but I lacked the ingenuity to use those concepts as others had done. The usual suspects include using become:, changeClassTo:, doesNotUnderstand: and the thisContext variable. So I could easily grasp the main ideas behind those superpowers even though I haven't attempted trying them for myself (I have used doesNotUnderstand and thisContext before though).

Many of the code snippet aren't actually published (for good reason too) since you really don't want to write such code. However, they are useful nonetheless for those dire situations that require a quick throw-away solution.

There were a couple of Javascript, Self and Ruby programmers in the group so we had a good mix of different superpowers. Michael Lucas-Smith made an interesting observation about the state of doing "meta-programming" in Smalltalk and how it differs from what the Ruby (and Rails) people were doing -- transient generated code where we can always return to a clean slate and remove all the generated code from the image (or program). Smalltalk doesn't really encourage such techniques (see the Dynamic Code Generation section of my article on Dwemthy's Array) and it will be nice to see what superpowers people will acquire once Smalltalk makes this easier to do. He suggested something simple like marking/annotating the code that has been generated (I just put mine in a category called generated) and being able to completely clear it when the system is saved/loaded (so it can start from a clean slate). The code should remain for some duration so that we can use the existing Smalltalk browser tools to navigate through the code for testing and debugging.

I only stayed for the morning session but I picked up enough little tricks to add to my bag of tricks. And there is enough interesting things that I should be able to play around for some time.

Goran was doing a video recording of the workshop and that should be on the web some time soon. update: The links to the torrent are already up on his site. The videos (albeit at lower quality) is also available from veoh. Thanks Goran!


comments powered by Disqus