ebook img

Programmiersprachen und Programmentwicklung: 6. Fachtagung des Fachausschusses Programmiersprachen der GI, Darmstadt, 11.–12. März 1980 PDF

240 Pages·1980·7.111 MB·German-English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Programmiersprachen und Programmentwicklung: 6. Fachtagung des Fachausschusses Programmiersprachen der GI, Darmstadt, 11.–12. März 1980

Informatik-Fachberichte Herausgegeben von W.Brauer im Auftrag der Gesellschaft rur Informatik (GI) 25 Programmiersprachen und Programmentwicklung 6. Fachtagung des Fachausschusses Programmiersprachen der GI Darmstadt, 11.-12. März 1980 Herausgegeben von H.-J. Hoffmann Springer-Verlag Berlin Heidelberg New York 1980 Herausgeber Prof. Dr. Hans -Jürgen Hoffmann Fachgebiet Programmiersprachen und Übersetzer Institut für Praktische Informatik Fachbereich 20 Technische Hochschule Darmstadt Steubenplatz 12 6100 Darmstadt AMS Subject Classifications (1970): 68 A 05 CR Subject Classifications (1974): 4., 4.1, 4.12, 4.2, 4.22, 4.9, 5.23 ISBN-13:978-3-540-09937- 6 e-ISBN-13:978-3-642-67600-0 001: 10 .1007/978-3-642-67600-0 CIP-Kurztitelaufnahme der Deutschen Bibliothek Programmiersprachen und Programmentwicklung: 6. Fachtagung d. Fachausschusses Programmiersprachen d. GI, Darmstadt, 11. -12. März 1980 I hrsg. von H.-J. Hoffmann. - Berlin, Heidelberg, New York: Springer, 1980. (Informatik-Fachberichte; 25) NE: Hoffmann, Hans-Jürgen [Hrsg.]; Gesellschaft für Informatik I Fachausschuss Programmiersprachen This work is subject to copyright. All rights are reserved, whether the whoJe or part 01 the material is concerned, specilically those 01 translation, reprinting, re-use 01 illustrations, broadcasting, reproduction by photocopying machine or similar means, and storage in data banks. Further, storage or utilization 01 the described programms on date processing installations is forbidden without the written permission of the author. Under § 54 of the German Copyright Law where copies are made for other than private use, a fee is payable to the publisher, the amount of the fee to be determined by agreement with the publisher. ~) by Springer-Verlag Berlin . Heidelberg 1980 2145/3140 -5 4 3 2 1 0 VORWORT Die Fachtagungen, die der Fachausschuß 2 der Gesellschaft für PROGRAMMIERSPRACH~N Informatik*) seit 1971 regelmäßig, nunmehr zum sechsten Mal, veranstaltet und in Ta gungsbänden dokumentiert, geben Zeugnis von dem jeweiligen Selbst-Verständnis des Faches PROGRAMMIERSPRACHEN, zumindest aus der Sicht einiger seiner Repräsentanten und der Vortragenden. Die 6. Fachtagung, die am 11. und 12. März 1980 in Darmstadt stattfindet, spielt darin sicherlich keine Sonderrolle. Es wurde diesmal eine breitere Thematik gewählt, wie es aus der Tagungsbezeichnung hervorgeht, nämlich PROGRAMMIERSPRACHEN UND PROGRAMMENTWICKLUNG. Jedenfalls wird damit zum Ausdruck gebracht, daß Programmiersprachen nicht nur eine Zielsetzung in sich haben, d.h. einem Selbstzweck unterworfen sind, sondern zu einem weiteren Zweck, der Programmentwicklung, in Beziehung treten, in Beziehung treten müssen. Dieses verbreiterte Selbst-Verständnis hat sich - bedauerlicherweise - im Tagungsprogramm und als Folge davon im Tagungsband nicht übermäßig deutlich ausge wirkt. Die Veranstalter legen allerdings zum Zeitpunkt der Drucklegung die (berech tigte) Hoffnung, daß in der vorgesehenen Diskussion über "Software Engineering - Programmiersprachen, Programmentwicklung -" zu der breiteren Thematik einige beach tenswerte Aussagen kommen. Im Tagungsband, der den Tagungsteilnehmern zu Beginn der Tagung ausgehändigt wird, läßt sich eine solche Diskussion noch nicht einfangen; ihre Auswirkungen zeigen sich, hoffentlich, an anderer Stelle. In der Bitte um Vortragsmeldung hatte der Fachausschuß die Thematik der Fachtagung in die folgenden Worte gefaßt: Es soll berichtet werden über neue Konzepte in Programmiersprachen, über die Lösung besonderer Probleme bei der Implementierung von Programmiersprachen insbesondere bei der semantischen Analyse, Code-Erzeugung und Laufzeitunter stützung, über den Einsatz von Programmiersprachen z.B. zur Systemimplemen tierung, bei Programmgeneratoren, in Systemen, die die Programmspezifikation und Programmentwi ckl ung unterstützen, u. ä. sowie über neue Erkentni sse und fundierte Wertungen zur Programmiertechnik. Neben diesen Schwerpunkten sind auch Meldungen zu allgemein interessierenden Themen aus dem genannten Gebiet erwünscht sowie Referate zur Analyse der Programmiersprachen-"Landschaft" willkommen. *) K. Alber (TU Braunschweig), C. Haenel (Siemens, München), H.-J. Hoffmann (TH Darmstadt), G. Mußtopf (SCS, Hamburg), H.-J. Schneider (Univ. Erlangen Nürnberg), G. Seegmüller (Univ. München) und C. v. Urach (Daimler-Benz, Stuttgart). IV Auf die Bitte am Vortragsmeldung gingen 34 Beiträge ein. In einer breiten, sorgfäl tigen Begutachtung wurden daraus 13 Beiträge ausgewählt und zur Tagung angenommen. Allen Beitragenden, auch denjenigen, deren Beitrag nicht angenommen wurde, sei an dieser Stelle für die aufgewendete Mühe gedankt. Darüberhinaus wurden noch vier für ihre Arbeiten bekannte Wissenschaftler aufgefordert, in eingeladenen Vorträgen über ihr Arbeitsgebiet zu berichten. Auch hier sei der Dank dafür ausgesprochen, daß sie die Einladung annahmen und in verhältnismäßig kurzer Zeit auch einen schriftlichen Beitrag fertigstellten. Es mag vielleicht auffallen, daß zwei Teilgebiete aus der Thematik Programmierspra chen und Programmentwicklung, in Anbetracht ihrer Aktualität jedenfalls, unterreprä sentiert sind: Die beiden Fachgruppen des Fachausschußes, nämlich die Fachgruppe "Interaktives Programmieren" und die Fachgruppe "Compiler-Compiler" stehen auf eige nen Füßen und bedürfen für die Darstellung ihrer Arbeit nicht einen Teil einer um fassenderen Fachtagung. Trotzdem war es von der Veranstaltern gerne gesehen, daß die Fachgruppe "Interaktives Programmieren" am 10. März 1980 am gleichen Tagungsort ihr diesjähriges Treffen veranstaltet; Im Heft 4 der Notizen für Interaktives Program mieren werden die Beiträge zu diesem Treffen veröffentlicht. Allen, die zum Zustandekommen und zur Durchführung der Tagung beigetragen haben, sei an dieser Stelle gedankt. Man sehe es mir nach, daß ich keine Namen aufzähle. Der Dank ist darum nicht geringer. Die Tagungsteilnehmer finden in den Tagungsunterlagen eine Zusammenstellung von Spendern, denen an dieser Stelle - vorab - nun pauschal gedankt sei. Darmstadt, Dezember 1979 Hans-Jürgen Hoffmann. INHALTSVERZEICHNIS Vergleich einiger Konzepte moderner Echtzeitsprachen U. Ammann - eingeladener Vortrag - The "Design by Objectives" Method for Controll ing Maintainabil ity: A Quantitative Approach for Software ............................... 19 T. Gi 1b - eingeladener Vortrag - An Incremental Compiler as Component of a System for Software Generation 29 M. Nagl - eingeladener Vortrag - Recent History and the Furture of COBOL 45 D. F. Nelson - eingeladener Vortrag - A Critical Review of PASCAL Based on a Formal Storage Model ............. 57 B. Austermühl, W. Henhapl Exception Handling with Multi-Exit Statements ........................... 71 R.-J. Back A Methodology for Message Oriented Programming .......................... 83 P.R.F. Cunha, C.J. de Lucena, T.S.E. Maibaum LIS as Object Code for an ADA-O-Compiler 95 M. Dausmann, G. Perseh, G. Winterstein Design Rationale for the Interactive Programming Language CSSA 111 H.L. Fischer, P. Raulefs OPTRAN, a Language for the Specification of Program Transformations ..... 125 I. Glasner, U. Möncke, R. Wilhelm VI Some Considerations for an Extension of PL 360 ...........•....•......... 143 F. Hertweck, I. Precht Eigenschaften von Programmiersprachen - definiert durch attributierte Grammatiken 157 U. Kastens Das Konzept des Programmiersprachenkerns von TA3 - Darstellung eines deskriptiv orientierten Ansatzes - ............. 175 G. Knorz Ein Praktikum im Obersetzerentwurf: Struktur und Erfahrungen ...•........ 189 H.H. Kron, R. Lutze A Basis for Secure Systems Implementation Languages ........•..•..•...... 199 K.-P. Löhr Benutzergerechtes Editieren - eine neue Sichtweise von Problemlösen mit DV-Systemen .•.•........•......•.•.................••......•.... 211 H. Oberquelle Sequentialisierung von Parallelen Prozessen ............................. 221 J. Schauer VERGLEICH EINIGER KONZEPTE MODERNER ECHTZEITSPRACHEN Urs Ammann Contraves AG, Abt. EMGC Postfach CH-81il52 Zuerich Switzerland ZUSAMMENFASSUNG: Einleitend wird den Wurzeln der Multiprogrammierung in den klassischen Programmiersprachen der zweiten Generation - PL/I, Simula und Algol 68 - kurz nachgegangen. Der Hauptteil konzentriert sich auf einige markante Sprachelemente interessanter Sprachen wie Ada, Cuncurrent Pascal, Modula und PEARL und es werden einige Bemerkungen zur Implementierung verschiedener dieser Konzepte gemacht. ABSTRACT: In the introductory part we follow the roots of multiprogramming in the classical second generation languages PL/I, Simula and Algol 68. In the main part we concentrate on some salient features of interesting languages such as Ada, Concurrent Pascal, Modula and PEARL and comment on the implementation of several of these concepts. Inhalt 1. Einleitung 2. Die klassischen Sprachen der zweiten Generation 3. Moderne Systemimplementationssprachen 3.1 Concurrent Pascal 3.2 Modula 3.3 PEARL 3.4 Ada 4. Schlussbemerkung Referenzen 2 1. Einleitung Mit der rasanten Zunahme des Einsatzes von Mini- und Mikro-Rechnern im Anwendungsbereich Prozesskontrolle, z. B. zur Steuerung und Regelung von technischen Prozessen, ist das Interesse an den sogenannten Echtzeitsprachen in den letzten Jahren sprunghaft gestiegen. Der hauptsaechlichste Grund dafuer ist, dass man mit der konventionellen, in diesem Einsatzbereich noch immer dominierenden Assemblerprogram mierung an verschiedene Grenzen stoesst. So geben etwa die duerftige Produktivitaet der Maschinenprogrammierer, die nicht mehr bewaeltigbare Komplexitaet neuer Anwendungen, die mangelnde Sicherheit und Modularitaet der entwickelten System-Software und die damit einhergehende Kostenexplosion zu wachsender Besorgnis Anlass. Diesen Problemen wird nun in zunehmendem Mass durch den Einsatz von Echtzeitsprachen Herr zu werden versucht. Die schwerwiegendsten Hemmschuhe bei dieser begruessenswerten Entwicklung sind wohl der Bedarf an qualitativ einwandfreier zusaetzlicher Infrastruktur Software (Compiler), Effizienzeinbussen in den uebersetzten Programmen und nicht zuletzt das traege Verhaften im Hergebrachten. Moderne Echtzeitsprachen sind im landlaeufigen Sinn hoehere Programmiersprachen mit einigen zusaetzlichen Sprachelementen, um die Anforderungen der Systemprogrammierung im allgemeinen und der Echtzeitprogrammierung im speziellen abzudecken. Im Idealfall lehnen sie sich im algorithmischen Teil stark an bestehende Sprachen wie Algol, Pascal oder PL/I an und verfuegen ueber ein strenges Typenkonzept, reiche Datenstrukturierungsmoeglichkeiten sowie einen Satz von bewaeh~ten Anweisungen zur Steuerung des Berechnungsflusses. Um den Beduerfnissen der Systemprogrammierung gerecht zu werden, sollten sie ein Konzept zur Modularisierung von Programmen (wie etwa der Modul in Modula [Wir77] oder das Package in Ada [DOD79]) enthalten. Dazu muss die Moeglichkeit zum Ausdruecken von (pseudo-) parallelen Berechnungen wie etwa die Task (in Ada oder PEARL [KFK77]) oder den Prozess (in Modula) gegeben sein. Diese nebenlaeufigen Berechnungen muessen synchronisiert werden koennen (etwa durch Semaphore wie in Algol68 [Wij69] oder durch Signale wie in Modula) und es braucht ein Sprachelement zum gegenseitigen Ausschluss konkurrierender Prozesse beim Zugriff auf gemeinsame Daten (Monitor in Concurrent Pascal [Han75], Interface-Modul in Modula, Rendezvous in Ada). Daneben sind meist auch Sprachelemente vorhanden, welche die maschinennahe Programmierung erlauben, wie etwa die Einflussnahme auf die Datenrepraesentation und die Adressen von Objekten, die Programmierung von Peripheriegeraeten und damit die Integrierung von Interrupts und des damit zusammenhaengenden Prioritaets-Scheduling ins Benuetzerprogramm. Um schliesslich den Beduerfnissen der Echtzeit programmierung gerecht zu werden, muss eine mit der Umwelt synchronisierte Uhr vorhanden sein und es muessen Sprachelemente existieren, welche die Einplanung von Berechnungen mit Bezug auf die Uhrzeit erlauben. Grundsaetzlich lassen sich die EChtzeitsprachen in zwei Klassen einteilen. Die erste Klasse besteht aus jenen Sprachen, welche die Beduerfnisse der Multiprogrammierung und insbesondere der Echtzeit- programmierung (fast) ausschi iessl ich mit Aufrufen von Standardprozeduren oder weit schlimmer mit eingestreuten Assemblersequenzen abdecken, also (fast) keine auf diesen spezifischen Anwendungsbereich zugeschnittenen Sprachelemente enthalten. Zu dieser Klasse gehoeren Sprachen wie CORAL66 [HMS070], RTL/2 [ßar76], sowie verschiedene Erweiterungen von FORTRAN fuer Echtzeitanwendungen. Vom heutigen Stand der Sprachentwicklung muss dieser Ansatz als veraltet bezeichnet werden. Wenn er auch einige wenige vorzuege wie 3 explizitere Kontrolle und erhoehte Effizienz der Objektprogramme aufzuweisen hat, so vermag er doch konzeptionell nicht zu befriedigen und bedeutet in jedem Fall Verlust an Sicherheit, Modularitaet und Uebertragbarkeit. Zur zweiten Klasse gehoeren jene Sprachen, die den Beduerfnissen der Multiprogrammierung durch geeignete Sprachkonstrukte nachkommen. Zu ihnen gehoeren weniger bekannte Vertreter wie PROCOL [PR070], HALlS [HAL75] und PORTAL [Lie79], von denen in der Folge nicht oder nur am Rande die Rede sein wird, und prominentere Vertreter wie Ada [00079], Concurrent Pascal [Han75], Modula [Wir77] und PEARL [KFK77]. Ihnen wird der Hauptteil des Vortrages gewidmet sein. Zunaechst soll jedoch kurz den Urspruengen der Multiprogrammierung in der Mitte der 60er Jahre entstandenen Sprachen der zweiten Generation nachgegangen werden. 2. Die klassischen Sprachen der zweiten Generation Es ist fuer das Verstaendnis der Sprachelemente moderner Echtzeitsprachen recht nuetzlich, kurz auf die Grundlagen der Multiprogrammierung in den klassischen Sprachen Algol 68 [Wij69], PLII und Simula [Dah66] einzugehen. Die erste, wenn auch keineswegs verwunderliche Feststellung, die dabei gemacht werden kann, ist die, dass sich die grundsaetzlich unter schiedlichen Sprachphilosophien auch in den Mitteln zur Beschreibung von parallelen Berechnungen wiederspiegeln: in Algol68 Beschraenkung auf das absolut Notwendige, in PLII eine Fuelle von Sprachelementen und in Simula die Rueckfuehrung auch dieser Beduerfnisse auf das zentrale Sprachelement, die Klasse. Algol68, das sich ja durch wenige "orthogonale" Konzepte auszeichnet, die jedoch beliebig miteinander kombiniert zu elner maechtigen Vielfalt werden, beschraenkt sich auf zwei in ihrer Schlichtheit nicht mehr zu uebertreffende Sprachelemente. Es ist dies einerseits der Datentyp SEMA mit den auf Sema-Variablen anwendbaren monadischen Operatoren I, ~ und t (Initialisierung, P- und V-Operation). Andererseits existiert eine Parallel-Klausel, in der nebenlaeufige Berechnungen voneinander durch Kommata getrennt und durch Klammern zu einer Einheit zusammengefasst werden koennen, der zur Kennzeichnung das Symbol PAR vorangestellt wird. Damit lassen sich Prozesse kreieren und starten, deren Synchronisation durch n-wertige Semaphore ermoeglicht wird. Zusaetzliche Sprachelemente, etwa zum garantierten gegenseitigen Ausschluss beim Zugriff mehrerer Prozesse auf deren gemeinsame Daten gibt es nicht, kann jedoch mit Semaphoren explizit ausprogrammiert werden (vergi. unten). Ein kleines Beispiel aus dem Algol68-Report moege den Gebrauch von Parallel-Klauseln und Semaphoren illustrieren. Es implementiert eine Menge von Produzenten, die Seiten produzieren, welche sie in einem gemeinsamen Magazin abliefern. Hier werden sie von Konsumenten abgeholt und konsumiert. 4 bsgin int nmb magazins sZots. nmb producers. nmb consumers; rsad «nmb magazine sLots. nmb producers. nmb consumers)); [l : nmb producers] tUe infUs. [l : nmb consumers] [i~e outfUe; ~ i to nmb producers do open (infi~e [i~. inchanneL :r.]); ~ inchanneL and outchanneL are def~ned ~n a surround~ng range 9 for i to nmb consumers do open (outfiLe (i]. outchanneL (i]); = ~ ~ [l : 60. 1 : 132] chazo; • [l : nmb magazine sLots] !:!!i. ~ maganne; int 9 pointers of a cycLic magazine 9 index := 1. exdex := 1; sema fuLL sLots = / 0. [ree sLots = / nmb magazine sLots. --rn buffer busy = / 1. out buffer busy = / 1; proc par caLL = (proc° (int) P. int n) 9 caLZs n incarnations of p in paralleZ 9 : (n > I PB!. (p TriJ. par call (P. n - 1))); proc producer = (i!;! i) : do (~~page; get (infUe(i]. page); + free sLots; + ~n buffer busy; magazine (index] := page; index t::= nmb magazine sZots +:= 1; t fuLZ sZots; t in buffer busy; proc consumer = (int i) : do (~page; + fuZZ sZots; + out buffer busy; page := magazine [exdex]; exdex t::= nmb magazine sZots +:= 1; t [ree sZots; t out buffer busy; put (outfiZe (i]. page)); PB!. (par call (producer. nmb producers). par calL (consumer. nmb consumers)) end Das Beispiel zeigt schoen zwei in ihrer Natur verschiedene Synchronisationsbeduerfnisse: Wenn das Magazin voll resp. leer ist, muessen die Produzenten resp. Konsumenten, die eine Seite abliefern, resp. holen wollen, warten (Semaphore full slots, free slots). Wenn ein Produzent resp. Konsument die kritischen Daten des Magazins manipuliert, so duerfen die andern Produzenten resp. Konsumenten keinen Zugriff haben (Semaphore in buffer busy, out buffer busy). Dagegen koennen ohne weiteres gleichzeitig ein Produzent und ein Konsument am Magazin operieren. Anders als in Algol68, welches als systematische Verallgemeinerung von Algol60 verstanden werden muss, wurde in PL!I versucht, die als erfolgreich eingestuften Sprachelemente von Algol60, COBOL, FORTRAN und LISP zu vereinen. Die dabei verbliebenen Luecken wurden durch eine ganze Reihe von neuen Sprachkonstrukten abzudecken versucht. Ein grundsaetzlich neues Element ist die Task, welche eine in sich sequentielle Berechnung definiert, die jedoch parallel zu anderen Berechnungen geschehen kann. Kreiert wird eine Task ueber die normale CALL-Anweisung mit der auch Prozeduren aufgerufen werden, wobei die Existenz optioneller Attribute die Task-Kreation vom simplen Prozeduraufruf unterscheidet: CALL p(al, ... ,an) ,TASK(task name) ,EVENT(event name) ,PRIORITY(n): '-----y---I .. \I' J normaler Proz.auf- optionelle Attribute, welche die Ausfuehrung ruf mit akt. Para- von p nebenlaeufig machen metern al ... an MLt dem TASK-Attribut kann der Task zwecks spaeterer Identifizierung ein Name gegeben werden, mit dem PRIORITY-Attribut wird die Ausfuehrungsprioritaet der Task in Relation zu den Prioritaeten der andern Tasks gestellt, was die Prozessorverwaltung beeinflusst, sofern weniger Prozessoren zur Verfuegung stehen, als lauffaehige Tasks vorhanden sind. Schliesslich kann ueber das EVENT-Attribut ein Ereignis mit der Beendigung der zugehoerigen Task p verknuepft werden. Dieses Ereignis - welches also eintritti wenn p beendet ist - kann in der Task, welche p kreiert hat, abgewartet werden. Die allgemeine Form dieser Synchronisationsanweisung lautet "WAIT(el,e2, ... em) k". Hierin

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.