Интересные 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
Ответ 5
XML в Scala - еще один пример.
Ответ 6
В документе ScalaQL (PDF) описывается реализация интересного DSL для запросов на встроенную базу данных.
Ответ 7
И вот там Foursquare Rogue http://engineering.foursquare.com/2011/01/21/rogue-a-type-safe-scala-dsl-for-querying-mongodb/