2010-07-06 15 views

Respuesta

19

que tenga una buena fuente en el MEAP (Early Access) libro
Gosh Cover
DSL in action de Debasish Ghosh (blog: "Ruminations of a programmer)

marcos de prueba como scalatest son ejemplos clásicos de DSL:

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

Hay muchos otros marcos basados ​​en DSL:

  • specs: "marco Comportamiento-Driven-Design"

  • internal DSLs

  • Squeryl: "Un Scala ORM y DSL para hablar con bases de datos con nivel de detalle mínimo y la seguridad de tipos máximo"

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

libro muy bueno de Foursquare. También incluye otros idiomas para que pueda comparar cómo se sienten las DSL en diferentes idiomas. –

+0

Excelente libro. El Sr. Ghosh cubre especialmente a Scala (esa es la parte que leí). Además, es posible que desee leer la publicación educada y bien escrita del Sr. Spiewak en Parser Combinators (fundamental para las DSL externas de Scala) - www.codecommit.com/blog/scala/the-magic-behind-parser-combinators –

6

lift-json proporciona una DSL para generar JSON. Por ejemplo la siguiente DSL:

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

crea la siguiente JSON:

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

Dos buenos ejemplos son los DSL incorporadas para Analizador combinadores y Actores. Hay un contenedor SQL llamado DBC (aún no está listo), aquí puede ver cómo se ve: http://scala.sygneca.com/libs/dbc

0

El documento de ScalaQL (PDF) describe la implementación de una DSL interesante para las consultas de bases de datos integradas en el lenguaje.

2

ScalaModules es una DSL para trabajar con OSGi.

Otro está disponible con Apache Camel una plataforma para la integración empresarial.

Scala-Query y Squeryl también proporcionan DSL para consultar bases de datos, entre otras cosas.

ScalaTest es también un impresionante ejemplo de lo que es posible.