What are DSLs? ● [Wikipedia definition] ● A domain-specific language (DSL) is a computer language specialized to a particular application domain. ● This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains.
What are DSLs? ● A DSL is like an electric drill: it is a powerful tool with a wide variety of uses, but a specific context, namely, putting holes in things. ● A GPL is a complete workbench, with a variety of tools intended for performing a variety of tasks.
Another example of DSLs ● Recently, companies are working on AI processors ● AI can be done by CPUs and GPUs ● Why do we need custom AI processors? – Power efficiency – Speed
Why use DSLs? ● Code looks closer to domain description. It is at a higher level of abstraction. ● Lesser cognitive load for domain experts to write and maintain code. ● The compiler (if applicable) can provide assistance while writing code. – We will see this in the type safe builder example
Why use DSL? (Advanced) ● We wont go into much details on this topic. ● Interpreter design pattern – Write a program description using a restricted set of primitives – Interpret the program separately ● Multiple interpretations for a single program ● Example, evaluate an expression tree or print it
Kotlin support for DSLs ● Write DSLs with Kotlin as the host language ● Programs look closer to the domain ● Can use language constructs – for, if, ... ● Example, Anko for android layouts – Better looking layout – Easier data binding
Kotlin features to enable DSLs ● Extension functions – http://kotlinlang.org/docs/reference/extensions.html ● Lambda with receivers – http://kotlinlang.org/docs/reference/lambdas.html ● Passing a lambda to the last parameter – https://kotlinlang.org/docs/reference/lambdas.html
Walkthrough ● Specify the HTML document as a DSL – (Work with a subset of HTML tags) – Can have tags that depend on command line arguments ● Covert the HTML document to a string ● Use StringBuilder for efficiency ● Lets go to code!