He visto BASIC y Apache Camel DSL en Scala, y son simplemente fantásticas. ¿Hay más ejemplos de tales DSL?DSL interesantes, implementados en Scala?
Respuesta
que tenga una buena fuente en el MEAP (Early Access) libro
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"
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) )
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
}
}
}
}
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
El documento de ScalaQL (PDF) describe la implementación de una DSL interesante para las consultas de bases de datos integradas en el lenguaje.
XML in Scala es otro ejemplo.
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.
- 1. Cómo crear un DSL interno en Scala?
- 2. Groovy vs Scala para DSL interno
- 3. ¿Hay algún DSL de Scala para GUI?
- 4. ¿Hay utilidades DSL de fecha/hora en Scala?
- 5. Scala DSL: método de encadenamiento con métodos sin parámetros
- 6. Generando imágenes moderadamente interesantes
- 7. DSL en Finanzas
- 8. Aspectos interesantes de PostSharp
- 9. Cómo crear DSL en Scala para líneas de comando con un número mínimo de texto adicional
- 10. Elección del marco DSL
- 11. Cómo interpretar Gradle DSL
- 12. Camel - extender Java DSL?
- 13. Programación Clojure "DSL"
- 14. Encuadernación FFI y DSL
- 15. ¿Hay alguna DSL Clojure?
- 16. Sintaxis DSL adecuada
- 17. DSL para la síntesis de imágenes Clojure
- 18. eclipse agregar métodos no implementados, incluido javadoc
- 19. compilador Brainfuck en scala
- 20. ¿Las clases Java más interesantes/útiles?
- 21. 2 preguntas básicas pero interesantes sobre .NET
- 22. ¿Cómo encuentras problemas interesantes para resolver?
- 23. Nuevas funciones interesantes de C# 4.0
- 24. ¿Cuáles son algunos guiones de shell interesantes?
- 25. Cómo crear una conexión DSL en Elisp
- 26. Primeros pasos con DSL en Java?
- 27. Bloque DSL sin argumento en ruby
- 28. Tutoriales para escribir DSL en Ruby
- 29. ActiveAdmin - implementar HABTM/matriz multidimensional en DSL
- 30. Creación de DSL externas efectivas
libro muy bueno de Foursquare. También incluye otros idiomas para que pueda comparar cómo se sienten las DSL en diferentes idiomas. –
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 –