开发者

Interesting DSLs, Implemented in Scala? [closed]

开发者 https://www.devze.com 2023-01-06 08:48 出处:网络
开发者_StackOverflowAs 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 like
开发者_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

精彩评论

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