Интересные DSL, реализованные в Scala?

Я видел BASIC и Apache Camel DSLs в Scala, и они просто фантастические. Дополнительные примеры таких DSL?

Ответы

Ответ 1

У вас есть хороший источник в книге MEAP (ранний доступ)
Gosh Cover
DSL в действии от Debasish Ghosh (блог: " Воспроизведение программиста)

Тестирование структур, таких как scalatest, являются классическими примерами DSL:

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

Существует множество других основанных на DSL фреймворков:

  • specs: "Структура, управляемая поведением"

  • внутренние DSL

  • Squeryl: "A Scala ORM и DSL для общения с базами данных с минимальной многословием и максимальной безопасностью типа"

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

Ответ 2

lift-json предоставляет DSL для генерации JSON. Например, следующий DSL:

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

создает следующий JSON:

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

Ответ 3

ScalaModules - это DSL для работы с OSGi.

Еще один доступен с Apache Camel - платформа для корпоративной интеграции.

Scala-Query и Squeryl также предоставляют DSL для запросов к базам данных между прочим.

ScalaTest также является прекрасным примером того, что возможно.

Ответ 4

Двумя хорошими примерами являются встроенные DSL для комбинаторов и актеров Parser. Существует оболочка SQL под названием DBC (еще не готова), здесь вы можете увидеть, как она выглядит: http://scala.sygneca.com/libs/dbc

Ответ 6

В документе ScalaQL (PDF) описывается реализация интересного DSL для запросов на встроенную базу данных.