Esterel, Philipp Schröter, Gregor Barth Institut für Informatik. Esterel. Seminar über Programmiersprachen SS13

Ähnliche Dokumente
Esterel. Synchronous Programming Language

Modellierung von Echtzeitsystemen

Die Programmiersprache Esterel

Seminar Synchrone Programmiersprachen

4.4 Imperative Algorithmen Prozeduren

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

An Overview of the Signal Clock Calculus

Dank. Theoretische Informatik II. Teil II. Registermaschinen. Vorlesung

{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel

Konzepte von Programmiersprachen

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Einstieg in die Informatik mit Java

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Einstieg in die Informatik mit Java

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache

Elementare Konzepte von

Boolean Wertemenge: Wahrheitswerte {FALSE,TRUE}, auch {0,1} Deklaration:

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Einstieg in die Informatik mit Java

n 1. Der Begriff Informatik n 2. Syntax und Semantik von Programmiersprachen - 1 -

Javakurs für Anfänger

Interpreter - Gliederung

2 Eine einfache Programmiersprache

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Programmierkurs Java

Kapitel 3: Anweisungen

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

GTI. Hannes Diener. 18. Juni. ENC B-0123,

Java Anweisungen und Ablaufsteuerung

Einfache Bedingte Ausführung

Einstieg in die Informatik mit Java

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

1 Funktionale vs. Imperative Programmierung

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Werkzeuge zur Programmentwicklung

Informatik I Übung, Woche 40

BKTM - Programmieren leicht gemacht.

2 Eine einfache Programmiersprache

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Theoretischen Informatik: Übung 10

Kapitel 4. Kontrollstrukturen

Unterprogramme. Komplexes Verhalten kann modular mit Hilfe von Unterprogrammen beschrieben werden Es gibt zwei Arten von Unterprogrammen:

7. Konkretisierungen im Feindesign. 7.1 Zustandsdiagramme 7.2 Object Constraint Language

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Semantik von Programmiersprachen SS 2017

Javakurs für Anfänger

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Einführung in die Informatik I (autip)

Einstieg in die Informatik mit Java

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1.2 LOOP-, WHILE- und GOTO-Berechenbarkeit

Reactive C - Eine Erweiterung von C zur Programmierung von reaktiven Systemen

Entwurf von Algorithmen - Kontrollstrukturen

Kapitel 04: Was ist ein Algorithmus? Software Entwicklung 1

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik I (Studiengang Medieninformatik)

Kontrollstrukturen -- Schleifen und Wiederholungen

2.4 Schleifen. Schleifen unterscheiden sich hinsichtlich des Zeitpunktes der Prüfung der Abbruchbedingung:

Algorithmen und Datenstrukturen II

Theoretische Informatik SS 03 Übung 3

Vorlesung Programmieren

Kapitel 4. Kontrollstrukturen

Objektorientierte Programmierung. Agenda für heute, 26. März, Eines der drei wichtigsten Programmierparadigmen

Programmablaufpläne. Vorgehen zur Erstellung eines lauffähigen C-Programms

Grundlagen der Theoretischen Informatik Musterlösungen zu ausgewählten Übungsaufgaben

VBA-Programmierung: Zusammenfassung

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

Was ist ein Algorithmus? Software Entwicklung 1

Objektorientierte Programmierung

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Software Entwicklung 1

Einführung in die Programmierung mit VBA

Vorbemerkung. Allgemeines zu Shell Scripts. Aufruf. Einfaches Beispiel

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Informatik I Übung, Woche 40

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

TI-Basic. Programme und Funktionen

4 Schleifen -= Entstanden unter Excel 2003 =-

Algorithmen und Datenstrukturen (für ET/IT)

Zuverlässige Software mit GoTo Ludwig Suski

Aufgabe Total Punkte

Grundlagen der Programmierung in C Funktionen

Vorlesung Programmieren

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Imperative vs. Funktionale Programmierung

Kapitel 1: Informationsverarbeitung durch Programme

Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK)

3. Anweisungen und Kontrollstrukturen

Transkript:

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