McMaster Workshop on Domain Specific Lanaguages
http://www.cas.mcmaster.ca/~anand/DSL2011.html
June 13 – June 14 (Public Workshop), June 15 (Workshop for Project Participants)
9am-12pm, and 1pm-4pm
Engineering Technology Building
Organizer: Christopher Anand
Presenters: Edward Kmett and Wren NG Thornton
This workshop will introduce the concept of embedded Domain Specific Languages and their application to problems in software design, through several examples.
Roughly half the material will be accessible to beginning graduate students in Computer Science or Software Engineering.
Some of the material will require advanced knowledge of Haskell and Category Theory,
but non-experts should still benefit from seeing the power of these ideas in more advanced applications.
Some examples, mostly on Monday, will use Scala, which will be easy for Java programmers to follow.
Following the lunch break on the 14th, our industrial sponsor, Indellient Inc. will present their digital pen technology. Everyone is welcome for this public demonstration.
At the end of this workshop, we hope you will be convinced that DSLs are an excellent way of approaching new design problems, and result in very robust and maintainable code.
You will also have a set of starting points to continue your exploration of the topic.
Syllabus
What DSLs are.
Shallow vs. deep embeddings. Lenses.
Monadic APIs vs. non-monadic APIs – for the monadic APIs there is the consideration of initial vs. final
encodings. This is probably the most theory-heavy part of the material.
Initial encoding, in particular via free monads
Using codensity to improve the asymptotic performance of free monads.
Final encodings for languages that lack GADTs, or to make deep embeddings shallow.
Observable sharing via stable names.
* unsafePerformIO to allocate references and Lava for observable sharing.
* Kansas Lava – observable sharing via StableName allocation
* final encoding – automatic differentiation
Other examples
* SAT/SMT sovers
* Nikola – deep embedded targetting GPUs
* uses of Template Haskell
* JMacro – EDSL for emitting javascript in haskel