Admitting my defeat with DSLs

Posted on Wed Mar 15, 2017

A concrete way to evaluate a language that I overlooked for a lot of time: let’s say I have not used a language for weeks or months; now I need it to develop a tool I use to solve problems in a domain; I have my mind full of the complexities of the application’s domain; I come back to the language; how hard it is to pick it up again? What is the intellectual burden of picking up again the syntax and remembering the core and non–core concepts?

For my engineering studies I prepared a lot of notes; I probably have written too much, but it was inevitable because many important university courses had no written material covering the whole syllabus (sometimes not even half of it), also some written material was… not OK. I’ve also written some notes for personal interest (too much of those, too).

More than 10 years ago I typed and developed some of the stuff on a computer using LaTeX; I value those documents. Writing on paper is mandatory when trying to find your way through mathematics applied to engineering, but digital typing the result is great to put everything in the correct order (and I really need the correct order, otherwise I can do nothing). I went so far as customising the article style into a scritto style that suited me better. But let’s not digress.

I needed to programmatically generate drawings, especially electrical circuits. The tools available back then did not suit me; so I wrote a domain specific language, APIC, on top of Tcl and TeXdraw. I was somewhat happy with the result: a Tcl program using some Tcl packages I wrote, taking as input the description of the drawing and generating TeXdraw environments to be included in LaTeX documents; documentation in Texinfo format. At the time, I was a Tcl enthusiast. It was fun to write the DSL.

I want to review those documents and put some of them on the Net. The DSL is bitrotten. I have very little will to pick up again Tcl and APIC; but I have no choice. I wish I had written the thing as a C language library.