开发者

Interesting DSLs, Implemented in Scala? [closed]

开发者_StackOverflow As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 10 years ago.

I've seen BASIC and Apache Camel DSLs in Scala, and they're just fantastic. Any more examples of such DSLs?


You have a good source in the MEAP (Early Access) book

Interesting DSLs, Implemented in Scala? [closed]


DSL in action from Debasish Ghosh (blog: "Ruminations of a programmer)

Testing frameworks like scalatest are classic examples of DSL:

  test("pop is invoked on an empty stack") {     
    val emptyStack = new Stack[String]
    evaluating { emptyStack.pop() } should produce [NoSuchElementException]
    emptyStack should be ('empty)
  }

There are many others DSL-based frameworks out there:

  • specs: "Behaviour-Driven-Design framework"

  • internal DSLs

  • Squeryl: "A Scala ORM and DSL for talking with Databases with minimum verbosity and maximum type safety"

    def songCountByArtistId: Query[GroupWithMeasures[Long,Long]] =
      from(artists, songs)((a,s) =>
        where(a.id === s.artistId)
        groupBy(a.id)
        compute(count)
      )


lift-json provides a DSL to generate JSON. For example the following DSL:

("person" ->
  ("name" -> "Joe") ~
  ("age" -> 35) ~
  ("spouse" ->
    ("person" ->
      ("name" -> "Marilyn") ~
      ("age" -> 33)
    )
  )
)

creates the following JSON:

{ 
  "person": {
    "name": "Joe",
    "age": 35,
    "spouse": {
      "person": {
        "name": "Marilyn",
        "age": 33
      }
    }
  }
}


ScalaModules is a DSL for working with OSGi.

Another one is available with Apache Camel a platform for enterprise integration.

Scala-Query and Squeryl also provide DSLs for querying databases among other things.

ScalaTest is also an awesome example of what is possible.


Two good examples are the built-in DSLs for Parser Combinators and Actors. There is a SQL wrapper called DBC (not yet ready), here you can see how it looks like: http://scala.sygneca.com/libs/dbc


XML in Scala is another example.


The ScalaQL paper (PDF) describes the implementation of an interesting DSL for language integrated database queries.


And then there's Foursquare's Rogue http://engineering.foursquare.com/2011/01/21/rogue-a-type-safe-scala-dsl-for-querying-mongodb/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜