Randomisierte Tests mit QuickCheck

Die Programmiersprache Racket (früher bekannt als MzScheme) kommt mit einer QuickCheck-Bibliothek zum randomisierten Testen, mit der sich die Testabdeckung in Programmen erhöhen lässt: statt dass sich der Programmierer zahlreiche Tests überlegt und ausprogrammiert, generiert die Bibliothek anhand einer Spezifikation zufällige Testfälle, testet sie gegen definierte Eigenschaften und berichtet Gegenbeispiele, falls welche gefunden werden.

Weiterlesen...

Mehr Monaden in Aktion

Dieser Artikel ist der dritte einer Serie von Artikeln über Monaden in Haskell.

  • Im ersten Artikel der Serie haben wir die Grundlagen diskutiert.
  • Im zweiten Teil der Serie haben wir begonnen, eigene Monaden zur Lösung Software-technischer Aufgaben zu entwickeln und haben dabei die Fehler-Monade und die Listen-Monade kennen gelernt.

Im heutigen Teil möchten wir diesen Aspekt vertiefen und erneut demonstrieren, wie durch Monaden ein Stück Software modular und durch lokale Erweiterungen um neue Funktionalität ergänzt werden kann, ohne bestehende Teile zu verändern oder zu refaktorisieren.

Weiterlesen...

Systematisch eingebettete DSLs entwickeln in Clojure

In letzter Zeit sind in der Software-Entwicklung domänenspezifische Sprachen

  • kurz als DSL für „domain-specific language“ bezeichnet - populär geworden: Das Versprechen einer DSL ist es, für ein bestimmtes Anwendungsgebiet besonders kompakte und verständliche Programme zu ermöglichen. Diese Programme können außerdem auf technische Details verzichten, die nichts direkt mit dem Anwendungsgebiet zu tun haben.

Das Entwickeln einer konventionellen DSL ist aufwendig, da zur Implementierung DSL alles dazugehört, was bei einer „normalen“ Programmiersprachenimplementierung ebenfalls fällig ist: Lexer, Parser, Compiler oder Interpreter sowie IDE-Support. Aus diesem Grund sind substantielle Frameworks für die schnelle Entwicklung von DSLs entstanden, z.B. Spoofax, das Eclipse Modeling Project oder Xtext.

In funktionalen Sprachen gibt es allerdings häufig einen einfacheren Weg: die Entwicklung einer sogenannten eingebetteten DSL (kurz EDSL für „embedded DSL“). Dabei wird die Host-Sprache so eingesetzt, dass es so aussieht, als ob innerhalb der Host-Sprache eine DSL entsteht. Dies hat eine Reihe von Vorteilen:

Weiterlesen...