Die Programmiersprache CHILL
Gliederung Entstehung und Anwendungsgebiete Elementare Programmstrukturen Typkonzepte Globale Programmstrukturen Prozedurkonzepte Ausnahmebehandlung Nebenläufigkeit Beispiel Mergesort Literaturverzeichnis
Entstehung CHILL – CCITT High Level Language CCITT Standardisierungskomitee von ITU(Internationaler Fernmeldeunion)
Anwendungsgebiete hauptsächlich in der Kommunikationstechnik angewandt (z.B. rechnergesteuerte Vermittlungssysteme) 1987 viele der größten Softwaresysteme im Bereich der Telekommunikation mit CHILL implementiert keine kommerzielle Verbreitung (geringer Bekanntheitsgrad)
Elementare Programmstrukturen algol-60-ähnliche Sprache blockorientiert, streng typisiert große Sprache (bietet Konstrukte zur Erstellung großer Softwaresysteme) Programme in Module und Blöcke gegliedert
Beispiel Beispiel_1: MODULE DCL x,y INT, z ARRAY (1:10) INT; x:= 0; DO FOR i:= 1 TO 10; x:= x + i; inner: BEGIN DCL k INT := x + 2 * i; z(i) := k + x; END inner; OD; y:= x; END Beispiel_1;
Elementare Programmstrukturen Sprung/Exitanweisung GOTO marke; Exit marke; Bedingte Anweisungen IF condition THEN action1;...;FI; CASE ... OF (condition1) : action1; (condition2) : action2; ELSE : action3; ESAC;
Beispiele DCL DCL i,j INT:= -5; i,j INT := -5; CASE i,j OF (ELSE), (9): j:= 1; (26), (*): j:= 2;i+:=12; (*), (ELSE): ESAC; DCL i,j INT := -5; CASE i+12 OF (1:25): j:= 0;i := 12; (26): j:= 1; ELSE j:=2; i+:=1; ESAC;
Elementare Programmstrukturen DCL i,j INT, a ARRAY (1:10) INT; i := 1; i,j := 2 * i + 1; i +:= 1; entspricht i:=i + 1 i *:= j + i; entspricht i:=i * (j + i) a := [1,2,3,4,5,6,7,8,9,0];
Elementare Programmstrukturen DO-Anweisung mit leerem Kontrollteil simple_do: DO i := i + 1; OD simple_do; DO-Anweisung mit FOR-Kontrolle WHILE-Kontrolle WITH-Kontrolle
Elementare Programmstrukturen DO FOR i:= 100 BY 5 DOWN TO 25; ........ OD; DO FOR EVER; ........ Kann nur durch Sprung oder Ausnahme- OD; Erzeugung verlassen werden DCL a ARRAY (1:100) INT; DO FOR x IN a; x:= 1;
Elementare Programmstrukturen DCL rec STRUCT (x, y INT); DO WITH rec; x :=1; y :=1; OD;
Typkonzepte INT, CHAR, BOOL vordefiniert Möglichkeit mit Konstruktor neue Modes (Datentypen) zu bilden
Arten von Modes diskrete Modes Powerset-Modes zusammengesetzte Modes Referenzmodes Prozedurmodes Synchronisations- und Instanzmodes Ein-/Ausgabe-Modes
Modedefinition 2 Arten : SYNMODE NEWMODE SYNMODE: - Die Namen der mit SYNMODE definierten MODES sind synonyme Benennungen des gleichen MODES. =>sind einander zuweisbar NEWMODE:- NEWMODE definiert unterschiedliche MODES deren Werte nicht einander zuweisbar sind.
Beispiel Typ_Beispiel: MODULE NEWMODE X = CHAR, Y = CHAR (10), Z = ARRAY (1:10) BOOL; U = STRUCT (s1 INT, s2 CHAR); DCL x X, y Y, z Z, u U; x :='c'; y := 'skugkhegbp'; y(2) := 'a'; z(5:7) := [FALSE, TRUE, TRUE]; u.s1 := 4; END Typ_Beispiel;
Beispiel NEWMODE Dollar, Euro = INT; DCL a Dollar, b Euro; a := b; // nicht möglich SYNMODE Dollar, Euro = INT; DCL a Dollar, b Euro; a := b; // erlaubt
Programmstruktur Block Modulion Lebensdauer von einem im Block definierten Element entspricht der Ausführzeit von diesem im Block definierten Objekte sind außerhalb nicht sichtbar wenn Objektnamen von außerhalb nicht überschrieben sind sie im Block sichtbar Modulion ineinander schachtelbare Einheiten haben keinen Einfluss auf die Lebensdauer der in ihnen definierten Objekte dienen zur Kontrolle von Sichtbarkeit von Objekten globales Objekt nur sichtbar durch Anweisung lokale Objekte nur nach außen durch Anweisung sichtbar
Lebensdauer von Objekten Ein CHILL-Programm besteht aus mindestens einem Prozess, dem IOP (imaginary outermost process). Der IOP lebt so lange, bis das entsprechende CHILL-Programm abgearbeitet ist und alle benutzerdefinierten Prozesse beendet sind. Die Lebensdauer der anderen Prozesse ist durch Ausführung der letzten oder der STOP-Anweisung begrenzt . Jeder Prozess umfasst Anzahl von eine Blöcken. Betritt die Kontrolle eine Blockstruktur, so werden die darin deklarierten Speicherplätze von außen nach innen angelegt und ebenso wieder vernichtet.
Lebensdauer von Objekten Variablen mit STATIC-Attribut besitzen die Lebensdauer des IOP. Ihre Sichtbarkeit ergibt sich aus der Definitionsstelle. Mittels INIT ist eine Lebenszeit-Initialisierung eines Speicherplatzes möglich. Er wird zu Beginn seiner Existenz mit einem konstanten Wert belegt.
Beispiel Zaehler: PROC (); DCL zaehler INT STATIC INIT := 0; IF zaehler = 10 THEN zaehler := 0; fertig := TRUE; FI; END Zaehler; Zaehler: PROC(); DCL zaehler INT STATIC := 0; zaehler +:= 1; IF zaehler = 10 THEN zaehler:= 0; fertig:= TRUE; FI; END Zaehler;
Import Export bei Modulions Die Grenzen von Modulions können wie im folgendem Beispiel durch GRANT (Export) und SIZE (Import) überwunden werden. Trade: BEGIN DCL embargo INT; export: MODULE GRANT T_hide FORBID (s1); NEWMODE T_hide = STRUCT (s1, s2 : INT); DCL l_inside T_hide; l_inside := [1,2]; ......... END export; import: MODULE SEIZE export ALL; END import; END Trade;
Ausnahmebehandlung CHILL bietet die Möglichkeit, den Eintritt einer unerwarteten Situation durch Auslösen einer benannten Ausnahme (Exception) zu signalisieren. Das Ausnahmekonzept von CHILL sieht keine Rückkehr an die Stelle des Auftretens der Ausnahme vor. Schlüsselwörter: p_name : PROC (...) EXCEPTIONS (ex1,..,exn); IF..THEN CAUSE ex1 ;FI; ON (ex1,....,ex6): Aktion1; (ex7,....,exn): Aktion2; END ;
Sprachdefinierte Ausnahmen Verschiedene Aktionen können auch implizit Ausnahmen signalisieren. Die durch CHILL definierten Ausnahmen werden durch die Verletzung einer dynamischen Bedingung erzeugt. Vordefinierte Ausnahmen sind z.B.: OVERFLOW RANGEFAIL RECURSEFAIL
Ausnahmebehandlung Beispiel Sqrt: PROC (i INT) RETURNS (INT) EXCEPTIONS (bad_argument); IF i<0 THEN CAUSE bad_argument; FI; ........ END sqrt; DCL y INT := -5; y := sqrt(y) ON( bad_argument) : y:=0; END;
Prozedurkonzepte IN CHILL wird im Allgemeinen zwischen Funktionsprozeduren (mit Rückgabewert) und Prozeduren (ohne Rückgabewert) unterschieden.
Resultat von Funktionsprozeduren Die Resultatspezifikation wird im Prozedurkopf mittels RETURNS (MODE) vereinbart. Der Wert der Funktionprozedur ergibt sich aus dem Ausdruck in der RETURN- Anweisung.Will man ein Ergebnis zwischenspeichern so kann dies mit RESULT geschehen.
Parameterübergabe Werteübergabe IN-Parameter INOUT-Parameter Speicherplatzübergabe
Beispiel DCL a, b, c, d INT; test: PROC (p1 INT IN, p2 INT OUT, p3 INT INOUT, p4 INT LOC); p1 := p1 + 2; p2 := 5; p3 := p2 + 4; p4 := p4 + p4; END test; a := 6; b := 77; c := 8; d := 4; CALL test (a, b, c, d); Speicherplatzbelegung nach Prozeduraufruf : a = 6, b = 5, c = 9, d = 8
Prozedurattribute Rekursivität Generalität SIMPLE RECURSIVE GENERAL rekursiv aufrufbar nicht Prozedurmode tauglich GENERAL Prozedurmode tauglich INLINE nicht rekursiv aufrufbar nicht Prozedurmode tauglich
Prozeduren als Werte CHILL bietet die Möglichkeit einen Prozedurmode zu definieren auf dessen Werten folgende Operationen zur Verfügung stehen: Test auf Gleichheit Zuweisung an Speicherplatz mit Prozedurmode Aufruf der durch den Prozedurwert bezeichneten Prozedur Die Definition eines Prozedurmodes unterscheidet sich vom Kopf einer Prozedurdefinition nur in zwei Punkten: Die Parameterliste besteht nur aus Parameterspezifikationen Die Bennenung des Prozeduratributs entfällt (immer GENERAL)
Prozeduren als Werte SYNMODE T_procedure = PROC (INT IN, INT IN) RETURNS (BOOL); DCL l_procedure T_procedure, flag BOOL; less: PROC (x INT IN, y INT IN) RETURNS (BOOL) GENERAL; RETURN x<y; END less; greater: PROC (a, b INT) RETURNS (BOOL) GENERAL; RETURN a> b; END greater; l_procedure := less; flag := l_procedure(13, 14); flag := less(13, 14);
Nebenläufigkeit und Prozesse Formale Parameter eines Prozesses haben nur LOC oder IN Attribut keine Prozesshierachien in CHILL Prozessdefinitionen in keiner Region oder Block außer IOP
Prozessinteraktion Ereignisse - sind Synchronisationsmittel für Prozesse Regionen - dienen zur exklusiven Datenverwaltung Signale - Möglichkeit zur direkten und indirekten Kommunikation von Prozessen Puffer - indirekte Kommunikation mittels Mailboxprinzip
Prozesszustände aktiv, unterbrochen, suspendiert, terminiert Synchronisations- und Kommunikationsaktionen führen zu unterbrochenem Zustand suspendierte Prozess wartet darauf, besetzte Region betreten zu können Prozess terminiert falls STOP-Anweisung ausgeführt oder Ausnahme erzeugt Prozess kann nicht von anderem gestoppt werden
Prozessausführung Scheduling nicht festgelegt durch Sprachdefinition CHILL-Prozesse haben keine Prioritäten(Puffersignale und Eventvar. Besitzen diese) Unterbrochenen Prozessen kann Priorität zugeordnet werden
Beispiel SIGNAL s = (CHAR) TO p; p:PROCESS (); .... END p; p_instance := START p(); SEND s(`x`) TO p_instance;
Listendefinition NEWMODE LIST = REF NODE, NODE = STRUCT (head INT, tail LIST);
mergesort: PROC ( list LIST) SIMPLE RECURSIVE RETURNS (LIST); IF list = NULL THEN RETURN NULL; ELSIF list->.tail = NULL THEN RESULT list; ELSE BEGIN DCL list1,list2 LIST := NULL, remainder LIST:= list; DO WHILE remainder /= NULL; new LIST := ALLOCATE (NODE); next LIST := remainder ->.tail; new ->.head := remainder ->.head; new ->.tail := list 1; list1 := list2; list2 := new; TERMINATE (remainder); remainder := next; OD ; RETURN merge(mergesort(list1),mergesort(list2)) END mergesort;
merge: PROC (list1 LIST,list2 LIST) SIMPLE REKURSIVE RETURNS LIST; IF list1 = NULL THEN RETURN list2; ELSIF list2 = NULL THEN RETURN list1; ELSE IF list1->.head < list2->.head THEN BEGIN DCL result LIST := ALLOCATE(NODE); result ->.head := list1 ->.head; result ->.tail := merge(list1 ->.tail, list2); TERMINATE (list1); RETURN result; END analog zu erstem Fall FI END Merge;
Literaturverzeichnis Eine Einführung in die Programmiersprache CHILL Lenzer/Th.Letschert/Lingen/Hollis Hüthig Verlag