If you can solve your problems without actually changing the syntax, then you don’t need to build a language.

All languages are domain-specific, so I sort of hate the use of the term DSL to refer to what amounts to a big library with specific idioms.

The point of learning a new language is that a different syntax changes the natural way to think about problems; if a DSL makes a big difference, then that’s fine, but it’s not really comparable to language design. Writing a DSL may also reduce pain points incrementally in a way that prevents you from making much greater strides with syntax changes (in the same way that Zizek suggests the existence of charity prevents people from being serious about reform).

If a DSL is really enough, then that’s fine. But, if you’re considering actually writing a language, think carefully about whether or not a vastly different syntax would be better. If a DSL reduces the problem by 20% and a new language reduces it by 80%, a new language is justifed.

I absolutely condone writing interpreted languages in other interpreted languages. Doing so saves a lot of early development effort. A well-designed language can always be reimplemented in a faster way later (while a poorly-designed language is going to be very difficult to make even small optimizations for).

Written by

Resident hypertext crank. Author of Big and Small Computing: Trajectories for the Future of Software. http://www.lord-enki.net

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store