Ich habe gesehen BASIC und Apache Camel DSLs in Scala, und sie sind einfach fantastisch. Noch mehr Beispiele für solche DSLs?Interessante DSLs, implementiert in Scala?
Antwort
Sie haben eine gute Quelle in der MEAP (Early Access) Buch
DSL in action von Debasish Ghosh (Blog: "Ruminations of a programmer)
Testing Frameworks wie scalatest sind klassische Beispiele für DSL:
test("pop is invoked on an empty stack") {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
emptyStack should be ('empty)
}
Es gibt viele andere DSL-basierte Frameworks da draußen:
lift-json stellt eine DSL zur Verfügung, um JSON zu generieren. Zum Beispiel die folgende DSL:
("person" ->
("name" -> "Joe") ~
("age" -> 35) ~
("spouse" ->
("person" ->
("name" -> "Marilyn") ~
("age" -> 33)
)
)
)
erstellt die folgenden JSON:
{
"person": {
"name": "Joe",
"age": 35,
"spouse": {
"person": {
"name": "Marilyn",
"age": 33
}
}
}
}
Zwei gute Beispiele sind die Einbau-DSLs für Parser Kombinatoren und Schauspieler. Es gibt einen SQL-Wrapper namens DBC (noch nicht fertig), hier können Sie sehen, wie es aussieht: http://scala.sygneca.com/libs/dbc
Das ScalaQL-Papier (PDF) beschreibt die Implementierung einer interessanten DSL für sprachintegrierte Datenbankabfragen.
XML in Scala ist ein weiteres Beispiel.
ScalaModules ist ein DSL für die Arbeit mit OSGi.
Eine andere ist verfügbar mit Apache Camel eine Plattform für Enterprise-Integration.
Scala-Query und Squeryl bieten auch DSLs für die Abfrage von Datenbanken unter anderem.
ScalaTest ist auch ein großartiges Beispiel dafür, was möglich ist.
Und dann gibt es Foursquare's Rogue http://engineering.foursquare.com/2011/01/21/rogue-a-type-safe-scala-dsl-for-querying-mongodb/
- 1. Scala DSLs und typisierte Operatoren: idiomatische Implementierung?
- 2. Rubys instance_eval Äquivalent in Scala für den Aufbau von DSLs
- 3. DSLs (domänenspezifische Programmiersprachen) implementiert mit verschiedenen GPLs (General Purpose Programming Languages)
- 4. JavaBeans und DSLs
- 5. Interessante Ergebnisse beim Kombinieren von Arrays in Scala
- 6. Aufbau effektive externe DSLs
- 7. DSLs und Formularerstellung
- 8. Gibt es irgendwelche Clojure DSLs?
- 9. Was sind einige beliebte DSLs?
- 10. Interessante Daten für Demos
- 11. Algorithmen: Interessante diffing algorithm
- 12. C Weird & interessante Programmausgabe
- 13. Interessante Namespace Beispiele
- 14. Eine interessante mathematische Rätsel
- 15. Scala generische, die Methode toIterator implementiert
- 16. Bild in festen div - Interessante Firefox Verhalten
- 17. Interessante IEnumerable (oder IQueryable) Erweiterungsmethoden
- 18. Wie wird das Postfach (Nachrichtenwarteschlange) in Scala Actors implementiert?
- 19. Wie implementiert man die "List" Monade Transformator in Scala?
- 20. Mit Elmah interessante Ereignisse zu überprüfen
- 21. Interessante Beobachtung mit IE-Speicherverwaltung und Javascript
- 22. interessante mobile Safari versteckte Inhalte Ausgabe
- 23. Wie werden die lokalen Lazy-Variablen von Scala implementiert?
- 24. Was sind einige interessante Shell-Skripte?
- 25. Welche Scala-Funktionen werden intern durch Reflektion implementiert?
- 26. sehr interessante Verwendung von Return-Schlüsselwort in PHP
- 27. Eine interessante Aufgabe in OOP, die ich nicht bekomme
- 28. Scala AST in Scala
- 29. Integer Division mit Rekursion - und ein paar andere interessante Einschränkungen
- 30. Koaleszierende Optionen in Scala
Wirklich gutes Buch. Enthält auch andere Sprachen, damit Sie vergleichen können, wie sich DSLs in verschiedenen Sprachen anfühlen. –
Ausgezeichnetes Buch. Mr. Ghosh deckt Scala besonders gut ab (das ist der Teil, den ich gelesen habe). Vielleicht möchten Sie auch Mr. Spiewaks pädagogischen, gut geschriebenen Beitrag über Parser Combinators (kritisch für externe Scala DSLs) lesen - www.codecommit.com/blog/scala/the-magic-behind-parser-combinators –