Slide 1

Slide 1 text

Domain Specific Languages (DSLs) in Kotlin Niranjan Ratnakar

Slide 2

Slide 2 text

Outline ● What are DSLs? ● Why should we use DSLs? ● Kotlin features to enable DSLs ● Walk through of type safe HTML builder

Slide 3

Slide 3 text

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.

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Examples ● Regular expressions ● SQL ● Android layouts (?) – Implemented traditionally in XML – Inflated by Android framework at runtime

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

Anko

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

Type safe HTML builders ● http://kotlinlang.org/docs/reference/type-safe- builders.html ● https://try.kotlinlang.org/#/Examples/Longer %20examples/HTML%20Builder/HTML %20Builder.kt ●

Slide 17

Slide 17 text

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!