Esterel, Philipp Schröter, Gregor Barth Institut für Informatik Esterel Seminar über Programmiersprachen SS13
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 2
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 3
Einleitung Esterel ist ein deterministische, nebenläufige und imperative Programmiersprache Unterschied zu anderen nebenläufigen Programmiersprachen: verbindliche Aussagen zum zeitlichen Ablauf 4
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 5
Reaktive Systeme Definition durch Harel und Pnueli Softwaresysteme, die in ständigem Austausch mit Umgebung stehen Reagiert auf Eingaben mit Ausgaben 6
Reaktive Systeme Eingabe Interface Ausgabe Reaktiver Kernel Datenverarbeitung 7
Reaktive Systeme Eingabe Interface Ausgabe Reaktiver Kernel Datenverarbeitung 8
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 9
Entstehung Von Jean-Paul Marmorat und Jean-Paul Rigault entwickelt Unzufrieden mit Behandlung von Zeit Unterstüzung von Gérard Berry, Sabine Moisan und Jacques Camerini Einfluss durch Structural Operational Semantics von Gordon Plotkin Erster Prototyp: Algorithmus, der regulären Ausdruck in Automaten umwandelt Anschließend Umwandlung in endlichen Automaten Überarbeitung führte zum zweiten Esterel Compiler Wurde schon in Industrie und universitären Rahmen verwendet 10
Entstehung Dritte Version des Esterel Compiler führte Bit-Sets als Status und Integer als Ausnahmen ein Große Teile des Bytecodes sind seit dieser Zeit unverändert Schwäche bei großen Programmen Explosion des Zustandsraums Entwicklung der vierten Version widmete sich dieser Explosion Inspiration zur Lösung durch Netzlisten Verbot zyklischer Programme Fünfte Version schränkte Verbot wieder ein Sechste Version ist in Entwicklung 11
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 12
Basic Esterel Esterel bietet die meisten der aus anderen Programmiersprachen bekannten Anweisungen Trotzdem keine vollständige Programmiersprache angewiesen auf Hostsprache 13
Basic Esterel Programme in Esterel bestehen aus Modulen module Mod : Declaration body 14
Basic Esterel Variablen var x : type in Statement1 end var Signale signal S in Statement end signal S (combine type with comb) in end Statement 15
Basic Esterel Signale sind in Esterel essentiell Jederzeit definierter Zustand: present absent Anwesenheit prüfen durch: present (x) then statement1 else statement2 present (x) then statement present (x) else statement Senden durch ohne und mit Wert emit S emit S(integer) 16
Basic Esterel Kontrollstrukturen Bedingte Verzweigung if Expression then Statement1 else Statement2 Watchdog do Statement watching Signal 17
Basic Esterel Schleifen loop end Statement 18
Basic Esterel Ausnahmebehandlung trap T in Statement if Expression then exit T end 19
Basic Esterel Ablaufkontrolle nothing Nulloperation halt Ende der Programmausführung 20
Basic Esterel Parallelität Statement1 Statement2 21
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 22
Plain Esterel Erweiterung von Basic Esterel 3 neue Funktionalitäten Signalinterfaceerweiterung Befehlserweiterung Copymodule 23
Plain Esterel - Signalinterfaceerweiterung strenge Trennung zwischen Input- und Output-Signalen wird gelockert ein Signal kann beide Rollen erfüllen inputoutput BUS_REQUEST 24
Plain Esterel - Signalinterfaceerweiterung Sensoren repräsentieren externe Geräte Signal gilt als konstant präsent Können nur gelesen werden sensor DISTANCE (METER) 25
Plain Esterel - Befehlserweiterung Neue Befehle werden zur Verfügung gestellt Bestehende Befehle werden in syntaktisch äquivalente einfachere Formen überführt 26
Plain Esterel - Ausnahmebehandlung Trap aus Basic Esterel funktioniert nur als Abbruchbedingung Erweiterung erlaubt Handler für spezifische Exit-Events trap ALARM (combine integer with +), ZERO_DIVIDE, TERMINATE in stat handle ALARM do stat1 handle ZERO_DIVIDE do stat2 end 27
Plain Esterel - Kopfgesteuerte Schleifen Kombination von Schleife und Trap Das Statement wird exp Mal ausgeführt, wie in einer klassischen, vorprüfenden Schleife repeat exp times end statement 28
Plain Esterel - Temporäre Schleifen Aktionen werden in zeitlich genau abgestimmten Abständen ausgeführt Nach jedem eingehenden Signal wird stat ausgeführt every S do stat end stat wird sofort und nach jedem Signal ausgeführt loop stat each S 29
Plain Esterel - Vereinfachungen Basic Esterel: Programm wartet bis ein bestimmtes Signal eintrifft do halt watching Signal Vereinfacht in Plain Esterel await Signal do statement Warten auf unterschiedliche Signale await case SECOND do stat, case 2 METER do stat, end 30
Plain Esterel - Copymodule Erlaubt es bereits gecodete Module aufzurufen copymodule M Verschachtelung ist erlaubt Der Aufruf wird direkt durch den aufzurufenden Code ersetzt 31
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 32
Hostsprache Esterel keine vollständige Programmiersprache Hostsprache notwendig Esterel übernimmt Zeitkontrolle und Programmfluss und -ablauf Hostsprache übernimmt Datenverwaltung und aufwendige Berechnungen 33
Hostsprache Esterel Quellcode Esterel Compiler Ausführbarer Code Hostsprache Quellcode Hostsprache Compiler 34
Hostsprache Hostsprache kann Signale an Esterel senden, Deklaration in Esterel: input S (type) Senden an Hostsprache durch emit Vermeidung von Kollisionen, deswegen: output O (combine t with comb) und function comb( t, t ) : t 35
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 36
Semantik Drei Semantiken von Esterel: Intuitive Semantik Verarbeitung von Eingabeereignissen und zeitlicher Ablauf Formale Verhaltenssemantik Definition der Antworten auf Eingaben Ausführungssemantik Korrektheit der Reaktionen 37
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 38
Intuitive Semantik - Reaktion Eingabehistorie Eingabeereignis Verarbeitung Ausgabehistorie Ausgabeereignis 39
Intuitive Semantik Annahmen zum zeitlichen Ablauf: 1. Beginn hängt vom Kontext ab 2. Innere Struktur legt Terminierung fest 1. Sofortige Terminierung, wenn Beginn und Ende im gleichen Moment 3. Verlassen von trap!= 2. 1. Nimmt sich Zeit, wenn Beginn und Ende nicht im gleichen Moment 4. Externe Terminierung oder Unterbrechung verhindert weitere Ausführung oder Terminierung 40
Intuitive Semantik Module starten bei Erhalt eines Eingabeereignisses, keine Terminierung nothing tut nichts und terminiert sofort halt tut ebenfalls nichts, terminiert aber nicht Prozeduren aktualisieren den Speicher und terminieren emit sendet Wert und terminiert Bei Sequenzen startet die erste Anweisung, wenn die Sequenz startet, danach wird nach und nach abgearbeitet trap kann Ablauf unterbrechen Endlosschleifen verhalten sich wie ihr Rumpf 41
Intuitive Semantik Bei verzweigten Bedingungen wird die Bedingung geprüft, Verhalten danach ist gleich des gewählten Zweigs present verhält sich wie eine verzweigte Bedingung watching wartet bis Signal präsent ist, kann unterbrochen werden Parallele Anweisungen starten zeitgleich, jede kann unterbrechen und weitere Ausführung beenden Es wird immer die äußerste trap verlassen exit beendet markierten Bereich, aber nicht sich selbst Deklarationen definieren Signale und Variablen mit Initialwert und verhalten sich danach wie Rumpf 42
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 43
Formale Verhaltenssemantik Ereignis E = S 1 (v 1 ) * S 2 (v 2 ) * * S n (v n ), n 0 oder ε S 1...n ϵ E Falls S(v) = k S(v) ϵ E E = E 1 * E 2 S(v 1 ) E 1 S E 2 S(v 1 ) E S(v 2 ) E 2 S E 1 S(v 2 ) E S(v 1 ) E 1 S(v 2 ) E 2 S(v 1 *s v 2 ) E ( Kombinationsfuntkion) S E 1 S E 2 S E E * ε = E Vollständiges Ereignis Ê = S + (v) S - (v) 44
Formale Verhaltenssemantik Historie H = E 0, E 1,, E n, Endlich E[n] Vollständige Historie H = Ê 0, Ê 1,, Ê n, Zustände der Signale der Ereignisse während Reaktion unveränderlich Wert eines Signals ist aktueller Wert, vorheriger oder (falls nicht vorgekommen) 45
Formale Verhaltenssemantik E 0 E 1 E 2 E 3 H S 1 (0) S 2 (1) ε S 1 (2) * S 2 (2) Ê 0 Ê 1 Ê 2 Ê 3 H S 1+ (0) * S 2- ( ) S 1- (0) * S 2- (1) S 1- (0) * S 2- (1) S 1+ (2) * S 2+ (2) 46
Formale Verhaltenssemantik Modulableitung P = P 0 O 0 Î 0 > P 1 O 1 Î 1 > P 2 module P: input SECOND; output BEEP; await 21 SECOND do emit BEEP end; halt 47
Formale Verhaltenssemantik Induktionsregeln <stat, p> E,b,T > <stat', p'> Ê Speichermodifikation leerer Speicher Ø Schreiben: p.(x = v')[x v] = p.(x = v) ( bereits im Speicher) p.(y = v')[x v] = p[x v].(y = v') ( nicht im Speicher) 48
Formale Verhaltenssemantik Beispiele <halt, p> ͼ,ff, > <halt, p> <exit T, p> ͼ,ff,(t) > <halt, p> Ê 49
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 50
Ausführungssemantik Mögliche Zustände des Speichers S = v: noch nicht geschrieben, v = p i-1.(s) S = v: bereits geschrieben, v = p i.(s), weitere Schreibvorgänge möglich kann nicht gelesen werden S + = v: bereits geschrieben, keine weiteren Schreibvorgänge,?S = v S - = v: noch nicht geschrieben, keine Schreibvorgänge möglich,?s = v 51
Ausführungssemantik Lesen des Speichers θ (S x = v)(s) = v, nur wenn x ϵ {+, -} Schreiben in den Speicher Θ.(S v) Θ.(S )[S v'] = Θ.(S = v') Θ.(S )[S v'] = Θ.(S = v *s v') 52
Ausführungssemantik Aktionsregeln Senden < exp, p, Θ > v < emit S (exp), p, Θ + > < nothing, p, Θ[S v] > Bedingte Verzweigung S + ϵ Θ < present S then statestat 1 else state 2 end, p, Θ > <stat 1, p, Θ > ϵ Θ < present S then statestat 1 else state 2 end, p, Θ > <stat 2, p, Θ > Schleife < stat, p, Θ > < stat, p, Θ > < loop stat end, p, Θ > <stat; loop stat end, p, Θ > S 53
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 54
Codebeispiel Armbanduhr als Beispiel für typisches reaktives System Input durch Timer und Buttons Anknüpfung an Programm in C 55
Codebeispiel Grundstruktur eines Moduls erstellen module WATCH: end module 56
Codebeispiel Anbinden der Hostsprache, indem Typen und Konstanten definiert werden module WATCH: type TIME; constant INITIAL_TIME : TIME; constant ONE_SECOND, ONE_MINUTE, ONE_HOUR : TIME; end module 57
Codebeispiel Prozeduren der Hostsprache und deren Input definieren module WATCH: type TIME; constant INITIAL_TIME : TIME; constant ONE_SECOND, ONE_MINUTE, ONE_HOUR : TIME; procedure INCREMENT (TIME) (TIME), RESET_SECONDS (TIME) (); end module 58
Codebeispiel Relationen definieren Alle externen Signale sind exklusiv module WATCH: type TIME; constant INITIAL_TIME : TIME; constant ONE_SECOND, ONE_MINUTE, ONE_HOUR : TIME; procedure INCREMENT (TIME) (TIME), RESET_SECONDS (TIME) (); input SECOND, SET_HOUR, SET_MINUTE; output TIME: TIME; relation SECOND # SET_HOUR # SET_MINUTE; end module 59
Codebeispiel Ausgangszeit in der Variable TIME speichern TIME konstant emittieren module WATCH: type TIME; constant INITIAL_TIME : TIME; constant ONE_SECOND, ONE_MINUTE, ONE_HOUR : TIME; procedure INCREMENT (TIME) (TIME), RESET_SECONDS (TIME) (); input SECOND, SET_HOUR, SET_MINUTE; output TIME: TIME; relation SECOND # SET_HOUR # SET_MINUTE; var TIME := INITIAL_TIME : TIME in emit TIME (TIME); end module 60
Codebeispiel Main Loop fungiert als Switch es wird konstant auf eingehende Signale gelauscht und auf diese reagiert loop await case SECOND do call INCREMENT (TIME) (ONE_SECOND) case SET_MINUTE do call RESET_SECONDS (TIME) (); call INCREMENT (TIME) (ONE_MINUTE) case SET_HOUR do call INCREMENT (TIME) (ONE_HOUR) end await; emit TIME (TIME) end loop end var 61
Codebeispiel Increment-Funktion in C INCREMENT(tp, t) TIME *tp; TIME t; { tp->seconds += t.seconds; if (tp->seconds >= 60){ tp->seconds -= 60; tp->minutes++; } tp->minutes += t.minutes; if (tp->minutes >= 60){ tp->minutes -= 60; tp->hours++; } tp->hours += t.hours; if (tp->hours > 12){ tp->hours -= 12; tp->am_pm_flag =!tp->am_pm_flag; } } 62
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 63
Fazit Durchdacht und für Zweck geeignet Ausführlicher theoretischer Teil Ziele durch Annahmen bezüglich Zeit erreicht Verbreitung fragwürdig Im vorgesehenen Anwendungsbereich sinnvoll 64
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 65
Compiler Aktueller Compiler für Windows, Linux und Solaris CEC Compiler von der University of Columbia Alle Compiler werden als Quellcode bereitgestellt Keiner der offiziellen Compiler war frei von gravierenden Fehlern CEC Compiler ist unter Windows lauffähig Benutzerfreundlichkeit für nichtkommerzielle Anwender ist sehr gering 66
Gliederung 1. Einleitung 2. Reaktive Systeme 3. Entstehung 4. Syntax 1. Basic Esterel 2. Plain Esterel 5. Hostsprache 6. Semantik 1. Intuitive Semantik 2. Formale Verhaltenssemantik 3. Ausführungssemantik 7. Codebeispiel 8. Compiler 9. Fazit 10. Diskussion 67
Diskussion Wie groß wäre der Vorteil, wenn überhaupt, wenn Esterel eine vollwertige Programmiersprache wäre? Eindruck von Esterel? Wo sehen sie den Vorteil von der Verwendung von Esterel? Können zeitsensitive Entscheidungen wie im Codebeispiel nicht auch in C implementiert werden? 68