Table Of ContentSPRINGER COMPASS
Herausgegeben von
M. Nagl P. Schnupp H. Stronz
Niklaus Wirth
Programmieren in
Modula-2
Übersetzt von Guido Pfeiffer
Zweite Auflage
Springer-Verlag
Berlin Heidelberg New York
London Paris Tokyo
Hong Kong Barcelona
Professor Dr. Niklaus Wirth
Institut für Informatik, ETH
eH- 8092 Zürich
Übersetzt von
Professor Dr. Guido Pfeiffer
Schlankreye 4
W-2000 Hamburg 13
TItel der englischen Original-Ausgabe:
Programming in Modula-2, Fourth Edition,
Springer-Verlag Berlin Heidelberg New York Tokyo 1988
ISBN 978-3-662-00117-2 ISBN 978-3-662-00116-5 (eBook)
DOI 10.1007/978-3-662-00116-5
Springer-Verlag Berlin Heidelberg New York
Springer-Verlag New York Berlin Heidelberg
CIP-Titelaufnahme der Deutschen Bibliothek
Wirth, Niklaus: Programmieren in Modula 2/ Niklaus Wirth. Übers. von Guido Pfeiffer. -
2. Auf!. - Berlin ; Heidelberg ; NewYork ; London ; Paris; Tokyo ; Hong Kong: Springer,
1991
(Springer compass)
Eng!. Ausg. u.d.T.: Wirth, Niklaus: Programming in Modula 2
Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbeson
dere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen
und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf ande
ren Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben, auch bei nur aus
zugsweiser Verwertung, vorbehalten. Eine Vervielfältigung dieses Werkes oder von Teilen
dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des
Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der
jeweils geltenden Fassung zulässig. Sie ist grundsätzlich vergütungspflichtig. Zuwiderhand
lungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes.
Cl Springer-Verlag Berlin Heidelberg 1985,1991
Softcover reprint of the hardcover 2nd edition 1991
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in die
sem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, daß sol
che Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu
betrachten wären und daher von jedermann benutzt werden dürften.
45/3140-543210 - Gedruckt auf säurefreiem Papier
Vorwort des Herausgebers
Anfang der 70er Jahre geschah ein kleines Wunder. Pascal, eine
Sprache die "eigentlich" nur als Unterrichts-Hilfsmittel konzipiert
war, begann sich durchzusetzen. In einem Jahrzehnt wurde sie zur
beliebtesten Sprache für die professionelle Programmierung, vor
allem auf mittleren und kleinen Rechnern.
Sie wurde es, obwohl sie eine "kleine" Sprache war. Sie wurde es
ohne jede Unterstützung durch große Unternehmen oder Organi
sationen, die damals lieber "Elefanten züchteten": die Hersteller
PL /1 und die Informatiker Algol 68. Aber wie eine ordentliche,
praxis brauchbare Programmiersprache aussehen sollte, das lernten
wir (zum Glück) nicht an diesen Komitee-Geschöpfen, sondern eben
an Wirth's Pascal.
Es führte eine Reihe neuer Ideen ein, vor allem den Datentyp
und das Record Handling. Erstmals konnte man Datenstrukturen
genauso konstruieren wie Algorithmen. Und daß der Begriff des
"Datenmodells" sich nicht nur unter Theoretikern, sondern auch
bei Praktikern durchgesetzt hat, ist sicher zu einem guten Teil
Verdienst dieser Programmiersprache. Denn in ihr konnte man
den neuen Denkansatz auch konkretisieren, realisieren und als
vorteilhaft verifizieren.
Natürlich war ihre Tragfähigkeit begrenzt, war sie doch gar nicht
für die Programmierung größerer Softwaresysteme gedacht gewe
sen. Sie hatte kein Modularisierungskonzept, die Möglichkeiten zur
Textverarbeitung waren nicht ausreichend, es gab keine Sprachmit
tel zur Beschreibung der Nebenläufigkeit und Synchronisation von
Prozessen.
Deshalb war es eine erfreuliche Kunde, daß das amerikanische
Verteidigungsministerium (DOD) eine neue Sprache entwickeln
lassen wollte, Ada. Denn endlich hatten offenbar - nach dem
Motto "prüfet alles, und das Beste behaltet" - nicht nur die
progammierenden Praktiker sondern auch die sprachdefinierenden
Wissenschaftler aus dem Erfolg von Pascal die Konsequenzen
gezogen: Die neue Sprache sollte aus ihr entwickelt werden.
VI Vorwort des Herausgebers
Sie wurde es tatsächlich. Aber leider geriet auch Ada wieder zu
einem Elefanten, unter dessen dicker Haut die Eleganz der Mutter
allenfalls noch erahnt werden kann.
Zum Glück hat sich der Schöpfer von Pascal nicht an dieser Mastkur
beteiligt. Stattdessen machte er sich seine eigenen Gedanken, wie
man Pascal zu einer Allzweck-Sprache weiterentwickeln könne. Das
Ergebnis ist das in diesem Buch beschriebene Modula. Es blieb
eine kompakte Sprache. Daß man mit ihm trotzdem auch alle
die Software schreiben kann, bei der sich Pascal noch schwer tat,
das bewies Wirth selbst. Er machte Modula zur Basis eines der
fortschrittlichsten Arbeitsplatzrechner, seines Betriebssystems und
seiner Anwendungssoftware: Die Lilith begeistert jeden, der sie bei
einer Vorführung sieht oder sogar einmal mit ihr "spielen" (oder
arbeiten) kann.
Ebenso wie Pascal ist eben auch Modula das Produkt eines Prakti
kers, der Sprachen nicht nur für andere erfindet, sondern vor allem
für sich selbst. Und der deshalb dafür sorgt, daß sie Ideen und nicht
Ideologien implementieren.
Das ist wohl auch der Grund, daß die von ihm verfaßte Beschreibung
seiner Sprache nicht das übliche, schwerverdauliche "Dokument"
ist, sondern ein praxisorientiertes Lehr- und Handbuch für den Pro
grammierer. Ein Buch, in dem man an konkreten Beispielen Modula
anwenden lernt, und zwar auf praktische Probleme bezogen, die
jeder Programmierer immer wieder lösen muß. Und aus dem man
sogar Anregungen schöpfen kann, wenn man gar nicht in Modula
programmiert, sondern in einer anderen, modernen Sprache, wie
etwa in C oder "noch" in Pascal.
Wir freuen uns deshalb, daß Wirths Modula-Lehrbuch nicht mehr
nur im englischen Original existiert, sondern daß wir jetzt in unserer
Reihe auch eine deutsche Ausgabe anbieten können.
Peter Schnupp
Vorwort zur zweiten deutschen Auflage
Die wesentliche Änderung in der vorliegenden zweiten deutschen
Auflage ist die Ersetzung des Datentyps INTEGER durch den Typ
CARDINAL in den meisten Beispielen. Damit wird den vielen
neuen Modula-Implementierungen Rechnung getragen, die CAR
DINAL als Unterbereich von INTEGER behandeln, um so unan
genehme Typinkompatibilitäten zwischen INTEGER und CARDI
NAL innerhalb von Ausdrücken zu vermeiden. Entsprechend wurde
die Syntax der Standardfunktionen angepaßt:
FLOAT(i) und CHR(i) akzeptieren Argumente des Typs INTEGER,
TRUNC(x), HIGH(a), ORD(ch) und SIZE(T) sind vom Typ INTE
GER.
Weiterhin wurde die Zuweisung eines Strings s zu einem Array
a von Zeichen (Typ CHAR) eingeschränkt. Die Zuweisung a := s
wird nur noch dann akzeptiert, wenn die Länge von s kleiner (nicht
mehr kleiner oder gleich) der Elementzahl von a ist. Dies garantiert,
daß Strings grundsätzlich durch ein Zeichen OC abgeschlossen sind,
wodurch der Test auf das Ende eines Strings vereinfacht wird.
Zürich, Oktober 1990 N.W.
Vorwort zur ersten deutschen Auflage
Das vorliegende Buch ist eine Übersetzung der revidierten eng
lischen Originalausgabe. Die Revisionen beziehen sich auf einige
wenige, kleinere Korrekturen der Sprache Modula-2, sowie auf den
Einschluß einer kleineren Sammlung von Standard-Modulen für die
Dateneingabe und -ausgabe, wie sie sich speziell für moderne Ar
beitsplatzrechner mit hochauflösendem Bildschirm eignet. Ferner
VIII Vorwort zur ersten deutschen Auflage
enthält die Sammlung Module für Datei- und Speicherplatzverwal
tung.
Die deutsche Übersetzung stammt von Herrn Dr. Guido Pfeif
fer. Ihm gebührt meine Anerkennung und mein Dank für seine
sorgfältige Arbeit.
Zürich, März 1985 N.W.
Vorwort zur englischen Ausgabe
Das vorliegende Buch ist eine Einführung in die Programmierung
im allgemeinen und ein Handbuch für die Programmierung in der
Sprache Modula-2. Es wendet sich hauptsächlich an Personen, die
bereits Grundkenntnisse der Programmierung besitzen und die ihr
Wissen auf eine strukturiertere Weise vertiefen wollen. Im Interesse
von Anfängern beginnt das Buch jedoch mit einem einführenden
Kapitel, das in knapper Form einige fundamentale Konzepte von
Rechnern und deren Programmierung vorstellt. Der Text ist daher
auch zum Selbstunterricht geeignet. Die verwendete Notation ist die
von Modula-2. Sie eignet sich gut für einen strukturierten Zugang
zum Thema und führt den Lernenden in einen Arbeitsstil ein, der
unter dem Stichwort strukturiertes Programmieren bekannt wurde.
Als Handbuch für die Programmierung in Modula-2 behandelt der
Text praktisch alle Eigenschaften dieser Sprache. Teil 1 umfaßt
die elementaren Begriffe Variable, Ausdruck, Zuweisung, bedingte
und Wiederholungs-Anweisung sowie die Datenstruktur des Arrays.
Teil 2 führt in das wichtige Konzept der Prozeduren bzw. Unter
programme ein. Beide Teile umfassen im wesentlichen den Stoff
eines Einführungskurses in die Programmierung. Teil 3 befaßt sich
mit Datentypen und Strukturen. Dies entspricht im Kern dem In
halt eines weiterführenden Programmierkurses. Teil 4 führt den
Begriff des Moduls ein, der ein fundamentales Konzept sowohl für
den Entwurf großer Programmsysteme als auch für das Arbeiten
in einem Team ist. Als Beispiel für Module werden einige häufig
verwendete Hilfsprogramme für Ein- und Ausgabe dargestellt. Teil
5 schließlich beschreibt Möglichkeiten der Systemprogrammierung,
der Gerätebehandlung und der Multiprogrammierung. Weiterhin
werden praktische Hinweise gegeben, wie und wann die einzelnen
Hilfsmittel einzusetzen sind. Dies ist als Richtschnur für den Erwerb
eines klaren Stils der Programmierung und der Systemstrukturie
rung zu verstehen.
Die Sprache Modula-2 stammt in direkter Folge von Pascal [1]
und Modula [2] ab. Während Pascal als Allzwecksprache entwor
fen wurde und nach der Implementierung 1970 eine weite Verbrei-
x Vorwort zur englischen Ausgabe
tung fand, entstand Modula aus Experimenten mit Multiprogram
mierung. Die Sprache konzentriert sich daher auf einige wichtige
Aspekte dieses Anwendungsgebiets. Modula wurde 1975 definiert
und experimentell implementiert.
Im Jahre 1977 begann 3m Institut für Informatik der ETH ein
Forschungsprojekt mit dem Ziel, ein Rechnersystem (Hardware und
Software) in einem einheitlichen Ansatz zu entwerfen. Dieses Sy
stem (später Lilith genannt) sollte in einer einzigen höheren Pro
grammiersprache programmiert werden. Die Sprache mußte daher
zugleich den Anforderungen des Systementwurfs auf hoher Ebene
und den Anforderungen der Programmierung auf niederer, ma
schinennaher Ebene gerecht werden. Letztere wird für diejenigen
Systemteile benötigt, die in direkter Wechselwirkung mit der vor
gegebenen Hardware stehen. Modula-2 entstand aus sorgfältigen
Entwurfsüberlegungen als eine Sprache, die alle Möglichkeiten von
Pascal enthält, diese jedoch um die wichtigen Konzepte des Moduls
und der Multiprogrammierung erweitert. Da ihre Syntax mehr auf
der Linie von Modula als auf der von Pascal liegt, wurde der Name
Modula-2 gewählt. Im weiteren werden wir den Namen Modula
synonym für Modula-2 verwenden.
Die wesentlichen Zusätze von Modula-2 gegenüber Pascal sind:
1. Das Konzept des Moduls und insbesondere die Möglichkeit, einen
Modul in einen Definitionsteil und einen Implementationsteil
aufzuspalten.
2. Eine systematischere Syntax, die das Erlernen vereinfacht. Insbe
sondere endet jede mit einem Schlüsselwort beginnende Struktur
wieder mit einem Schlüsselwort, d.h. sie ist ordentlich geklam
mert.
3. Das Konzept des Prozesses als Schlüssel zur Multiprogrammie
rung.
4. Sogenannte niedere, maschinennahe Sprachelernente, mit de
ren Hilfe man die strengen Regeln der Konsistenz von Typen
aufbrechen kann. Sie erlauben ferner, Daten einer Modula-2-
Struktur auf einen anderen Speicherbereich ohne vorgegebene
eigene Struktur abzubilden.
5. Der Prozedurtyp. Er ermöglicht eine dynamische Zuweisung von
Prozeduren an Variable.
Eine erste Implementierung von Modula-2 war 1979 für PDP-ll
Rechner lauffähig. Die Sprachdefinition wurde im März 1980 als
Vorwort zur englischen Ausgabe XI
Technischer Report veröffentlicht. Seither wird die Sprache an unse
rem Institut täglich benutzt. Nach einer Benutzungs- und Testphase
von einem Jahr wurde der Compiler im März 1981 für Fremdbenut
zer freigegeben. Das Interesse an diesem Compiler wuchs schnell, da
er ein wirksames Werkzeug zur Systementwicklung darstellt und für
einen weit verbreiteten Minicomputer implementiert ist. Dieses In
teresse war der Anlaß für das vorliegende Hand- und Lehrbuch. Der
die Sprache definierende Report ist am Ende beigefügt und dient
hauptsächlich als Referenz. Er ist unverändert geblieben. Lediglich
die Kapitel über standardisierte Hilfsmodule und Anweisungen zur
Benutzung des Compilers wurden weggelassen.
Es ist unmöglich, alle Anregungen, die zum Entwurf von Modula
und zum Entstehen dieses Buches beigetragen haben, angemessen
zu würdigen. Besonders dankbar bin ich für den inspirierenden
Einfluß eines Studienjahrs (1976) am Forschungslabor der XEROX
Corporation (PARC), wo ich sowohl mit dem Konzept des Rechners
am Arbeitsplatz als auch mit der Sprache Mesa vertraut wurde. In
Mesa [3] waren die Ideen des Moduls und der separaten Compila
tion realisiert. Am wichtigsten war vielleicht die Einsicht, daß die
effiziente Implementierung einer höheren Programmiersprache auf
einem Minirechner möglich ist. Mein Dank gilt auch den Implemen
tierern von Modula, insbesondere 1. Geissmann, A. Gorrengourt,
Ch. Jacobi und S.E. Knudsen. Sie haben Modula nicht nur zu einem
effizienten und verläßlichen Werkzeug gemacht, sondern auch oft
genug von der Aufnahme weiterer Möglichkeiten in die Sprache
abgeraten.
Zürich, Februar 1982 N.W.
Literatur
1. N. Wirth: The programming language Pascal. Acta Informatica
1, 35-63 (1971).
2. N.Wirth: Modula: A language for modular multiprogramming.
Software - Practice and Experience 7, 3-35 (1977).
3. J.G.Mitchell, W.Maybury, R.Sweet: Mesa Language Manual.
Xerox PARC, Report CSL-78-1 (1978).