DYOL v0.2: Design Your Own Language ZaytsevVadim 2017 <p> <a href="https://en.wikipedia.org/wiki/Software_language">Software languages</a> have always been an essential component of <a href="https://en.wikipedia.org/wiki/Model-driven_engineering">model-driven engineering</a>. Their importance and popularity has only been rising with <a href="https://martinfowler.com/bliki/LanguageWorkbench.html">language workbenches</a>, <a href="https://en.wikipedia.org/wiki/Language-oriented_programming">language-oriented programming</a>, <a href="http://edoc.hu-berlin.de/series/informatik-berichte/2009-227/PDF/227.pdf">agile language engineering</a> and other methodologies that enable us to quickly and easily create new languages specific for each domain. Creating a new language suitable for the problem at hand, ceased being challenging for engineers: having, reusing or designing a DSL is just a regular MDE problem solving recipe. Now we focus on making software language creation methods reliable and repeatable. However, language design is largely a form of art and has resisted most attempts to turn it into a form of science or engineering. </p> <p> In this project I have borrowed concepts, techniques and principles from the domain of <a href="https://en.wikipedia.org/wiki/Persuasive_technology">persuasive technology</a>, or wider yet, <a href="http://designwithintent.co.uk/">design with intent</a> — which was developed as a way to influence users behaviour for social and environmental benefit. Software language designers can make similarly conscious choices in order to influence the behaviour of language users. This ability to cause changes in user behaviour is what <em>we</em> refer to as “language design” — this definition allows us to separate design concerns from implementation concerns. </p> <p> The DYOL (pronounced like “duel”) toolkit for language design contains cards with design components that were extracted from <a href="http://slebok.github.io/dyol/books/index.html">24 books</a> on parsing techniques, compiler construction, compiler design, language implementation, language documentation, programming languages, software languages, etc, as well as from the original set of <em>Design with Intent</em> cards and papers on DSL design. The resulting language design card toolkit can be used by DSL designers to cover important design decisions and make them with more confidence. </p>