I’ve uploaded the slides from my talk at QCon San Francisco entitled Internal DSLs in Groovy, Ruby and Others. You can find them here (19MB) released under a Creative Commons Attribution-Noncommercial 3.0 license. Over time the talk morphed into a more holistic approach to DSLs that tried to distill general principles from multiple programming languages; hopefully the folks showing up didn’t mind too much that I didn’t cover a lot of ground in Groovy.
It clocks in at around 120 slides but I breezed through them in about 40 minutes, well shorter than my hour slot; next time I’ll take it more slowly and spend a little bit more time on the code samples. It’s hard for any audience to process code at high speed, and I tend to forget that I’ve had all the time in the world to get comfortable with the samples I’m using but the people I’m talking to probably haven’t.
My goal in the talk was to make an argument for the use of these things and try to demonstrate how an internal DSL is different than a standard API. An internal DSL is a kind of API, sure, but one with a specific goal and what can only be described as a kind of distinct parsing layer. It’s a messy but human-friendly interface top of what should remain cleaner code underneath, and it’s handy in spots when the goal of the code is to describe what, not how. An interface that follows strict command-query separation is your enemy here, at least the way I see it.
Many thanks to Dan North and Martin Fowler for the time they spent with me helping to get this ship-shape, but especially to Neal Ford for inviting me out and providing me with his original talk template and just being a generally all-around cool guy. I had a great time and I hope others did as well.