This page is no longer maintained — Please continue to the home page at www.scala-lang.org

DSLs - A powerful Scala feature

Domain Specific Languages (DSL) written in Scala have become powerful tool in the hands of Scala programmers. In the original language design great care was taken to ensure that the syntax would allow programmers to create natural looking DSLs. Spend a moment to enjoy Michael Fogus's humour and the clever use he makes of implicits to create "Baysick". It looks like BASIC feels like BASIC but it's a Scala DSL. Then you may like to follow some other links to see DSL examples for Financial Asset Management, Apache Camel Services and OSGi.

Michael decided to extend the simple BASIC interpreter posted by Szymon Jachim to the Scala Nabble forums. He says "The exercise was an interesting way to appreciate the power that Scala provides in facilitating DSL creation."

Here is a simple Lunar Lander game he has written using his BASIC-like DSL. And it really runs!

More information can be found on his site and the source code is located at Github.

object Lunar extends Baysick {
  def main(args:Array[String]) = {
    10 PRINT "Welcome to Baysick Lunar Lander v0.9"
    20 LET ('dist := 100)
    30 LET ('v := 1)
    40 LET ('fuel := 1000)
    50 LET ('mass := 1000)

    60 PRINT "You are drifting towards the moon."

    70 PRINT "You must decide how much fuel to burn."
    80 PRINT "To accelerate enter a positive number"
    90 PRINT "To decelerate a negative"

    100 PRINT "Distance " % 'dist % "km, " % "Velocity " % 'v % "km/s, " % "Fuel " % 'fuel
    110 INPUT 'burn
    120 IF ABS('burn) <= 'fuel THEN 150
    130 PRINT "You don't have that much fuel"

    140 GOTO 100
    150 LET ('v := 'v + 'burn * 10 / ('fuel + 'mass))
    160 LET ('fuel := 'fuel - ABS('burn))
    170 LET ('dist := 'dist - 'v)
    180 IF 'dist > 0 THEN 100
    190 PRINT "You have hit the surface"
    200 IF 'v < 3 THEN 240
    210 PRINT "Hit surface too fast (" % 'v % ")km/s"
    220 PRINT "You Crashed!"

    230 GOTO 250
    240 PRINT "Well done"

    250 END

    RUN
  }
}

If you are new to Scala or to DSLs you may like to watch Bill Venners video "The Feel Of Scala" where he both talks about Scala the language and DSLs in the context of program testing.

Debasish Ghosh shows you how he has constructed a DSL to build an Asset Management System in a Financial Trading and Settlement environment.

Heiko Seeberger shows you how you can use a DSL to simplify OSGi implementations.

The Camel project on Apache uses DSL to drive services. See the development team presentation and their implementation

In the academic world DSL are being considered for improving parallelism in multi-core concurrent systems. In this presentation "Towards Pervasive Parallelism" by Kunle Olukotun at Stanford UT Austin, you can read about the general problem of concurrency and the role that DSLs can play. While at Maquarie University you can learn about Scala DSLs in the context of the Kiama project.

Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland