• Keine Ergebnisse gefunden

Domain-Specific Languages (DSLs)

N/A
N/A
Protected

Academic year: 2022

Aktie "Domain-Specific Languages (DSLs)"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3: Funktionale Programmierung Vorlesung 12 vom 15.01.2019: Domänenspezifische Sprachen

(DSLs)

Christoph Lüth Universität Bremen Wintersemester 2018/19

15:08:54 2019-01-21 1 [23]

Fahrplan

I Teil I: Funktionale Programmierung im Kleinen I Teil II: Funktionale Programmierung im Großen

I Teil III: Funktionale Programmierung im richtigen Leben

IAktionen und Zustände

IMonaden als Berechnungsmuster

I Domänenspezifische Sprachen (DSLs)

IScala — Eine praktische Einführung

IRückblich & Ausblick

PI3 WS 18/19 2 [23]

Domain-Specific Languages (DSLs)

I Was ist das?

I Wie macht man das?

I Wozu braucht man so etwas?

PI3 WS 18/19 3 [23]

Programmiersprachen sind überall

I Beispiel 1:SQL— Anfragesprache für relationale Datenbanken

I Beispiel 2:Excel— Modellierung von Berechnungen

I Beispiel 3:HTMLoderLaTeXoderWord— Typesetting

PI3 WS 18/19 4 [23]

Vom Allgemeinen zum Speziellen

I Modellierung vonProblemenundLösungen

Allgemein -Spezifisch

Allgemeine Lösung:GPL I Mächtige Sprache

(Turing-mächtig)

I Große Klasse von Problemen I Großer Abstand zum Problem I Java, Haskell, C . . .

I General purpose language (GPL)

Spezifische Lösung:DSL I Maßgeschneiderte Sprache I Wohldefinierte Unterklasse (Domäne) von Problemen I Geringer Abstand zum Problem I Als Teil einer

Programmiersprache

(eingebettet) oder alleinstehend (stand-alone)

PI3 WS 18/19 5 [23]

DSL: Definition 1

A domain-specific language (DSL) is a programming language or executable specification language that offers, through appropriate notations and abstractions, expressive power focused on, and usually restricted to, a particular problem domain.

(van Deursen et al., 2000)

PI3 WS 18/19 6 [23]

Eigenschaften von DSLs

I FokussierteAusdrucksmächtigkeit

I Turing-Mächtigkeit nicht Ziel der Sprache (aber kein Ausschlusskriterium)

I Oftmals deutlich weniger mächtig: Reguläre Ausdrücke, Makefiles, HTML I Üblicherweiseklein(“little languages”, “micro-languages”)

I Anzahl der Sprachkonstrukteeingeschränktund auf die Anwendung zugeschnitten

I Meistdeklarativ: XSLT, Relax NG Schemas, Excel Formeln. . . I Spiegeln in Sprachkonstrukten und Vokabular die Domäne wider

PI3 WS 18/19 7 [23]

Domain-Specific Embedded Languages

I DSL direkt in eine GPLeinbetten

IVorhandenes Ausführungsmodell und Werkzeuge I Funktionale Sprachen eignen sich hierfür besonders gut

IAlgebraische Datentypen zur Termrepräsentation

IFunktional⊆Deklarativ

IFunktionen höherer Ordnung ideal fürKombinatoren

IInterpreter (ghci, ocaml, . . . ) erlauben “rapid prototyping”

IErweiterung zustand-aloneleicht möglich I Andere Sprachen:

IJava: Eclipse Modelling Framework, Xtext

PI3 WS 18/19 8 [23]

(2)

Beispiel: Reguläre Ausdrücke

Ein regulärer Ausdruck ist:

I Leeres Wort I Einzelnes Zeichenc I Beliebiges Zeichen ? I Sequenzierunge1e2 I Alternierunge1|e2 I Kleene-Sterne=|ee I Abgeleitet:

I Kleene-Pluse+=e e

Haskell-Implementierung — Signatur:

typeRegEx eps :: RegEx char :: Char→RegEx arb :: RegEx

seq :: RegEx→RegEx→RegEx a l t :: RegEx→RegEx→RegEx star :: RegEx→RegEx Implementierung: siehe SimpleRegEx.hs

PI3 WS 18/19 9 [23]

Flache Einbettung vs. Tiefe Einbettung

I Flache Einbettung:

IDomänenfunktionen direkt als Haskell-Funktionen

IKeine explizite Repräsentation der Domänenobjekte in Haskell

ISchnell geschrieben und flexibel erweiterbar I Tiefe Einbettung:

IRepräsentation der Domänenobjekte durch Haskell-Datentyp (oder ADT)

IDomänenfunktionen auf diesem Datentyp

IMächtiger: Manipulation der Domänenobjekte möglich (Reflektion)

PI3 WS 18/19 10 [23]

Beispiel: Grafik

I Erzeugung von SVG-Grafiken I Eingebettete DSL:

I MonadeDraw(Zustandsmonade)

I Funktionen zum Zeichnen:

l i n e :: Point→Point→Draw () polygon :: [ Point ]→Draw ()

I “Ausführen”: Darstellung inS. Svg, rendering:

render :: Int→ Int→Draw()→S. Svg draw :: String→S. Svg→IO ()

PI3 WS 18/19 11 [23]

Beispielprogramm: Sierpińksy-Dreieck

Dreieck mit Eckpunkten zeichnen:

drawTriangle :: Point→Point→Point→Draw () Mitte zwischen zwei Punkten:

midway :: Point→Point→Point midway p q = 0.5 ‘ smult ‘ (p+ q) Sierpińksy-Dreieck rekursiv spTri :: Double→ Int→Draw () spTri sz l i m i t = sp3 a b c 0where

h = sz∗ sqrt 3/4

a = Pt 0 (−h ) ; b = Pt (−sz/2) h ; c= Pt ( sz/2) h sp3 :: Point→Point→Point→ Int→Draw () sp3 a b c n

| n≥l i m i t = drawTriangle a b c

| otherwise =do

let ab = midway a b ; bc = midway b c ; ca = midway c a sp3 a ab ca (n+1); sp3 ab b bc (n+1); sp3 ca bc c (n+1)

PI3 WS 18/19 12 [23]

Resultat: Sierpińsky-Dreieck und Schneeflocke

PI3 WS 18/19 13 [23]

Erweiterung: Transformation

I Allgemein:Transformationvon Grafiken

transform :: S. AttributeValue→Draw()→Draw()

I Speziell:

IRotation um einen Punkt:

rotate :: Point→Double→Draw ()→Draw ()

ISkalierung um einen Faktor:

scale :: Double→Draw()→Draw ()

IVerschiebung um einen Vektor (Punkt):

t r a n s l a t e :: Point →Draw () →Draw ()

PI3 WS 18/19 14 [23]

Beispiele: Verschiebung und Skalierung

PI3 WS 18/19 15 [23]

Implementierung

I Abbildung auf weitere DSL:Text . Blaze .SVG

I Industrie-taugliche Modellierung von Markup-Sprachen (SVG, HTML)

IKann mehr alsString(ByteString,Text)

ISkaliert auch für große Texte I Umgeht Probleme:

I Stringnicht effizient

IInsbesondere Zeichenketten von vorne aufzubauen istineffizient

I Aber noch nahe an SVG/HTML: keine Typisierung, keine Ausdrucksmächtigkeit

PI3 WS 18/19 16 [23]

(3)

Weitere Abgrenzung

Programmierschnittstellen (APIs)

I Etwa jUnit:assertTrue(),assertEquals()Methoden &@Before,

@Test,@AfterAnnotationen

I Funktionsnamen spiegeln ebenfalls Domänenvokabular wider I Gängige Sprachen (Java, C/C++) erschweren weitere Abstraktion:

Syntaxerweiterungen, Konzepte höherer Ordnung I ImperativeProgrammiersprache vs.deklarativeDSL

Skriptsprachen

I JavaScript, PHP, Lua, Tcl, Ruby werden für DS-artige Aufgaben verwendet

I HTML/XML DOM-Manipulation

I Game Scripting, GUIs, . . .

I Webprogrammierung (Ruby on Rails)

I Grundausrichtung: programmatische Erweiterung von Systemen

PI3 WS 18/19 17 [23]

Beispiel: Hardware Description Languages

I Ziel: Funktionalität von Schaltkreisen beschreiben I Einfachster Fall:

and :: Bool→ Bool→ Bool or :: Bool→ Bool→ Bool

I Moderne Schaltkreise sind etwas komplizierter . . . CλaSH

I Modellierung und Simulation von Schaltkreisen in Haskell

I TypSignalαfür synchrone sequentielle Schaltkreise

I Rekursion für Feedback

I Simulation des Verhalten des Schaltkreises möglich

I Generiert VHDL, Verilog, SystemVerilog, und Testdaten

I Verwandt: Chisel (in Scala), Bluespec (kommerziell), Lava (veraltet)

PI3 WS 18/19 18 [23]

Beispiel: SQL

I SQL-Anfragen werden in Haskell modelliert, dann übersetzt und an DB geschickt

I Vorteil: typsicher, ausdrucksstark

I Wie modelliert man dasErgebnis?→Abbildung Haskell-Typen auf DB

I Haskell: Squeal

I Scala: Slick

PI3 WS 18/19 19 [23]

Vorteile der Verwendung von DSLs

I Ausdruck von Problemen/Lösungen in der Sprache und auf dem Abstraktionslevel der Anwendungsdomäne

I Notation matters: Programmiersprachen bieten oftmals nicht die Möglichkeit, Konstrukte der Domäne angemessen wiederzugeben I DSL-Lösungen sind oftmals selbstdokumentierend und knapp

I Bessere (automatische) Analyse, Optimierung und Testfallgenerierung von Programmen

IKlar umrissene Domänensemantik

Ieingeschränkte Sprachmächtigkeit⇒weniger Berechenbarkeitsfallen I Leichter von Nicht-Programmierern zu erlernen als GPLs

PI3 WS 18/19 20 [23]

Nachteile der Verwendung von DSLs

I Hohe initiale Entwicklungskosten I Schulungsbedarf

I Sprachdesign ist eine äußerst schwierige und komplexe Angelegenheit, deren Aufwand nahezu immer unterschätzt wird

I Fehlender Tool-Support

I Debugger

I Generierung von (Online-)Dokumentation

I Statische Analysen, . . .

I Effizienz: Interpretation ggf. langsamer als direkte Implementierung in GPL

PI3 WS 18/19 21 [23]

Zusammenfassung

I DSL: Maßgeschneiderte Sprache für wohldefinierten Problemkreis I Vorteile: näher am Problem, näher an der Lösung

I Nachteile: Initialer Aufwand I Klassifikation von DSLs:

IFlache vs. tiefe Einbettung

IStand-alone vs. embedded

I Nächste Woche: Scala — eine Einführung.

PI3 WS 18/19 22 [23]

Literatur

Koen Claessen and David Sands.

Observable sharing for functional circuit description.

In P. S. Thiagarajan and R. Yap, editors,Advances in Computing Science – ASIAN’99, volume 1742 ofLNCS, pages 62–73, 1999.

Paul Hudak.

Building domain-specific embedded languages.

ACM Comput. Surv., 28, 1996.

Marjan Mernik, Jan Heering, and Anthony M. Sloane.

When and how to develop domain-specific languages.

ACM Comput. Surv., 37(4):316–344, 2005.

Arie van Deursen, Paul Klint, and Joost Visser.

Domain-specific languages: an annotated bibliography.

SIGPLAN Not., 35(6):26–36, 2000.

PI3 WS 18/19 23 [23]

Referenzen

ÄHNLICHE DOKUMENTE

[r]

I Klasseninstanzen und Typsynonyme werden immer importiert I Alle Importe stehen immer am Anfang des Moduls. PI3 WS 16/17 16 [37].. Java):

Spezifische Lösung: DSL I Maßgeschneiderte Sprache I Wohldefinierte Unterklasse (Domäne) von Problemen I Geringer Abstand zum Problem I Domain-Specific Language. (DSL) I Als

Ein Theorembeweiser beweist Aussagen über formale Strukturen durch Anwendung von Regeln?. Typen und Datentypen (natürliche Zahlen, Listen, Paare,. ) Mengen,

2 SS 2013 Joachim Breitner, Denis Lohner - Theorembeweiserpraktikum LEHRSTUHL PROGRAMMIERPARADIGMEN.. Kennenlernen der Arbeit mit Theorembeweisern Erlernen des

ID1an ljat f 0 lange gefragt, maß bn\'S beutfd)e lBntedanb ift, biß bie ®efd)icJ?te barauf eine mntmort gab; man loUte nun einmal fragen, l1)a\'S unb mo bet beutfd)e @eift ift, um

Nach einsetzendem Rückgang bedingten ergiebige Niederschläge in der Mitte der dritten Januar- dekade, die einem bevorstehenden Wintereinbruch voraus gin- gen, nochmals einen

Für Zeitabschnitte in einer Zeitspanne von einem Jahr wird dieser Wert als arithmetisches Mittel aus allen Tageswerten - also Summe der Tageswerte geteilt durch ihre Anzahl - ,