Michael Oberg Computer und Sprache Informatik ~ Michael Oberg Computer und Sprache Die Beziehung zwischen Hard- und Software und menschlichem Denken Deutscher Universitäts-Verlag Die Deutsche Bibliothek - CIP-Einheitsaufnahme Oberg, Michael: Computer und Sprache: die Beziehung zwischen Hard und Software und menschlichem Denken / Michael Oberg. - 1. Auf! .. - Wiesbaden: Dt. Univ.-Verl., 2000 (DUV : Informatik) ISBN 978-3-8244-0537-4 ISBN 978-3-322-95345-2 (eBook) DOI 10.1007/978-3-322-95345-2 1. Auflage Oktober 2000 Alle Rechte vorbehalten © Deutscher Universitäts-Verlag GmbH, Wiesbaden, 2000 lektorat: Ute Wrasmann / Monika Mülhausen Der Deutsche Universitäts-Verlag ist ein Unternehmen der Fachverlagsgruppe BertelsmannSpringer. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzu- 1.9ssi9 und strafbar. Das gilt insbesondere für Vervielfältigungen, Ubersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. www.duv.de Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Verbreitung unserer Bücher wollen wir die Umwelt schonen. Dieses Buch ist auf säurefreiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweißfolie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verbrennung Schadstoffe freisetzen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Vorwort Die gängige Literatur zum Thema Informatik kann grob in drei Teilgebiete unterteilt werden: die technische, die praktische und die theoretische Informatik. Die technische Informatik erklärt - wie der Name schon sagt -die technischen Grundlagen von Compu tern, angefangen bei logischen Schaltungen (auch "Gatter" genannt) bis zu Rechenwer ken (Zählwerke, Addierwerke, Grundlagen der Multiplikation). Die praktische Informatik befaßt sich mit der Programmierung von Computern. Sie beginnt mit der Einführung grundsätzlicher Kontrollstrukturen (Sequenz, Selektion, Iteration, Module, Rekursion, Datenstrukturen) und endet bei Entwurfsstrategien (Top-Down-, Bottum-Up-Methode). Die theoretische Informatik beginnt mit der Einführung des Begriffs" Algorithmus" , geht über zu grundsätzlichen Grenzen des logischen Denkens (z.B. Gödeis Aussage über wah re, aber unbeweisbare Sätze, oder die Unmöglichkeit, die Korrektheit bestimmter Pro gramme nachzuweisen - beides allerdings innerhalb starrer Systeme von Axiomen bzw. Testmethodenj-algorithmen) und endet bei der Analyse von Algorithmen (Komplexität, also grob gesagt Rechenaufwand, sowie Methoden der Programmverifikation, etwa Feh lerkontrolle und Testläufe). Eine Menge Stoff. Trotzdem fehlt mir persönlich dabei einiges; besonders in den Büchern, die ihre Leser in die Informatik einführen möchten, aber nicht nur dort. So behandelt die technische Informatik zwar Rechenwerke; aber ein Rechenschieber ist kein Computer. Auch elektrotechnische Grundlagen werden von der weitergehenden Literatur behandelt; aber auch ein Radiogerät ist kein Computer. Was befähigt ein elek tronisches Gerät zum "Denken"? Dieser Begriff mag heute überzogen wirken, aber früher wurden Computer oft als "Denkmaschinen" bezeichnet - und das nicht zufällig. Schon in der Antike galt die Fähigkeit zum logischen Schlußfolgern als höchstentwickelte Form des Denkens, und Computer beherrschen diese Fähigkeit mit einer für Menschen unerreich baren Perfektion. Mochte dies zunächst die Meinung weniger Philosophen sein, so wurde daraus im neunzehnten Jahrhundert -dank der in der industriellen Revolution unüberseh baren Erfolge einer Wissenschaft, die sich ihrerseits auf die Paradigmen des Philosophen Descartes stützte -ein bis weit ins zwanzigste Jahrhundert hinein allgemein anerkannter Grundsatz, sichtbar auch in populären Werken wie beispielsweise den Kriminalromanen yon Sir Arthur Conan Doyle.! 'Interessanterweise wird gerade in diesen Werken die Schwäche des logischen Schlußfolgerns sichtbar. vi VORWORT Was befähigt einen Computer zum "Denken"? Diese Frage wird von der technischen Informatik nicht beantwortet, es sei denn, man folgt diesem Zweig der Informatik bis zur Konstruktion vollständiger, moderner Computer -was zumindest über die " Grundlagen" der Informatik weit hinausgeht. Auf der anderen Seite beschäftigt sich auch die theoreti sche Informatik mit dieser Frage, und zwar in Bezug auf den Begriff der" Turingmaschine": diese hat allerdings mit einem Computer nicht viel mehr zu tun als ein Fahrrad mit einem Ferrari. Auch vom rein theoretischen Standpunkt her empfinde ich die Ideen Turings2 als unbefriedigend; zwar kann eine Turingmaschine "denken" wie ein Computer, sie tut das aber auf eine andere und ineffiziente Art. " Denken" , selbst in dem extrem eingeschränkten Sinn des logischen Schlußfolgerns, ist ein Prozeß, der nur in einem größeren Kontext Sinn macht. Für sich genommen ist ein Computer nichts weiter als ein sperriger Metallkasten. Erst die Kommunikation mit dem Menschen macht ihn zu einem nützlichen Werkzeug. Die flexibelste Kommunikationsform mit einem Computer ist die Programmierung; und ein effizientes Programmieren setzt eine leistungsfähige Programmiersprache voraus. Auf Programmiersprachen geht aber zu mindest die einführende Literatur nicht weiter ein. Sequenz, Selektion, Iteration etc. -das sind lediglich Konzepte der Programmierung, die zwar nur von höheren Programmierspra chen explizit unterstützt werden, die aber prinzipiell schon bei der Programmierung in Maschinensprache eingesetzt werden können. Diese Form der Einführung hat den VorteiL daß sie für alle Programmiersprachen gültig ist. Die Wahl der richtigen Programmiersprache ist für den Erfolg eines Programmier projekts aber von ausschlaggebender Bedeutung. Zur Erstellung einer Textverarbeitung ausschließlich Assembler zu benutzen, oder zur Erstellung eines Gerätetreibers die Spra che PROLOG, wäre Unsinn. Aber worin liegen die Unterschiede und Vorteile der einzelnen Sprachen? Und wie arbeitet überhaupt ein Hochsprachenprogramm? Wo liegt die Verbin dung zwischen dem "Denken" des Computers und der verwendeten Sprache? Solche Infor mationen finden sich nicht in der einführenden Literatur, sondern höchstens in Büchern zum Erlernen dieser Programmiersprachen; und auch dort sind diese Informationen oft bruchstückhaft. Da wir gerade dabei sind - wie wird ein Hochsprachenprogramm in eine für einen Conan Doyle besteht in seinen Werken immer wieder darauf, der Unterschied zwischen Dr. Watson und Sherlock Holmes liege in Watsons mangelhaft entwickelter Logik. Tatsächlich ist Watsons Schwäche je doch nicht die Logik, ja nicht einmal eine unterentwickelte Beobachtungsgabe, sondern vielmehr seine geringere Fähigkeit zum Assoziieren; er sucht sich aus einer unabsehbaren Menge von Fakten stets die falschen heraus, um seine Schlußfolgerungen zu ziehen (wobei diese Fakten sich durchaus in einen logi schen Zusammenhang bringen lassen, nur leider den falschen). Holmes dagegen erkennt stets die wenigen Punkte, auf die es ankommt. Logik richtet hier nichts aus; nicht nur ist die Anzahl der möglichen Kom binationen der Fakten viel zu groß, sondern man muß zur Menge der sichtbaren Fakten auch noch das Gedächtnis zu Hilfe nehmen. Nur dank Intuition, Assoziation und Phantasie kommt Holmes sofort zum Ergebnis. 2Siehe auch Kapitel Historisches, Abschnitt Zahlen und Rechenmaschinen. \fORWORT Computer verständliche Form übersetzt? Auch das Thema Compilerbau wird von der Li teratur eher stiefmütterlich behandelt. Einführende Werke geben bestenfalls einen Umriß vom Aufbau eines Compilers, ebenso wie vom Gesamtaufbau eines Computers. Es gibt noch eine interessante Fragestellung. Wenn man sich genauer mit der Ent wicklungsgeschichte der Computer auseinandersetzt, fällt auf, daß es seit 1952 (seit der Konstruktion des Computers MANIAC durch Johann von Neumann) keine grundsätzli chen Fortschritte auf diesem Gebiet mehr gibt. Ja, gewiß, selbst die heutigen Tischrechner mögen eine Million mal schneller sein und einen zehntausendmal größeren Speicher haben als die damals schrank- oder zimmergroßen Monstren. Aber die Speichergröße ist eine reine Skalierung; bei der Geschwindigkeit geht vielleicht ein Faktor Tausend allein auf die Entwicklung der Elektrotechnik zurück und hat mit der Informatik überhaupt nichts zu tun, ein weiterer Faktor Hundert geht zwar auf ein Prinzip der Informatik zurück (auf das "Pipelining"), aber dieses Prinzip war bereits im neunzehnten Jahrhundert be kannt. Der Rest ist ebenfalls eine reine Skalierung: die Verbreiterung der Bussysteme. Eine grundlegende Neuerung hat seit 1952 bei der Entwicklung der Hardware nicht mehr stattgefunden.3 Bei den Programmiermethoden sieht es genauso aus, auch wenn die letzten großen Neuerungen hier um 1970 herum erfolgten. Es waren die Entwicklung objektorientierter Sprachen wie SIMULA und SMALLTALK sowie der grafischen Benutzeroberflächen und der grafischen Programmierumgebungen (auch SMALLTALK). Heute werden Oberflächen wie Microsoft Windows und Programmierumgebungen/Sprachen wie DELPHI als große Neuerungen gefeiert; die Neuerung besteht aber nur darin, daß diese Systeme effizienter arbeiten als SMALLTALK, und daß die heutigen Tischrechner genug Leistung für derartige Systeme haben, die in den siebziger Jahren nur auf riesigen Supercomputern arbeiten konnten.' Warum gibt es seither keine grundsätzlichen Neuerungen mehr? Ganz einfach: Der Computer stellt in seiner heutigen Form den Endpunkt einer Entwicklung dar, deren Grenzen durch das Denken in sprachlichen Begriffen festgelegt wurden. Logisches Folgern ist ein Teil dieses Denkens -"logos" bedeutet nicht umsonst im Griechischen "Wort" und zugleich auch "Ordnung". Dieser Denkansatz ist mit der Unterteilung von Problemen (in Module) und der sequenziellen Abarbeitung dieser Teile untrennbar verbunden -und 3Das sollte ich gleich wieder etwas abschwächen. Es gab und gibt Bemühungen um neue Technologi en, beispielsweise Parallelrechner, Assoziativspeicher, Emulatoren für neuronale Netze und ähnliches. Die meisten dieser Entwicklungen sind jedoch noch immer im Experimentierstadium; massiv parallele Compu ter dagegen werden zwar eingesetzt, aber nur im High-End-Bereich, etwa zur Lösung von Problemen der Strämungsmechanik (beispielsweise der Simulation eines Windkanals) oder der Quantenchromodynamik. Beim "Normalverbraucher" landeten nur Schaltungen wie etwa die "Multimedia Extensions" (MMX) der Intel-Prozessoren, Schaltungen, die im Prinzip aber ebenfalls auf der altbekannten Pipelining-Idee basieren. 4 Auch hier gab es noch Weiterentwicklungen wie die Sprache PROLOG, die aber hauptsächlich von theoretischem Interesse sind. viii VORWORT das ist der Grund für das Scheitern der Bemühungen, einen für allgemeine Probleme verwendbaren Parallelrechner zu konstruieren. Ich denke, es ist durchaus wichtig, die enge Verbundenheit des Computers mit dem Sprachbegriff sowie die Logik seiner Entwicklung auf einen bestimmten Endpunkt hin zu analysieren (auch wenn ich hier keine Alternatiyen vorstelle). Und das ist - nach dem inneren Aufbau des Computers, der Funktion von Programmiersprachen und deren Übersetzung - das vierte Thema dieses Buches. Michael 0 berg Inhaltsverzeichnis 1 Historisches 1 1.1 Sprache und Schrift . 1 1.2 Zahlen und Rechenmaschinen 7 1.3 Informationstheorie .. 15 2 Computer 21 2.1 Aussagenlogik .. . . 21 2.2 Die Vollständigkeit der Aussagenlogik . 30 2.3 Selbstbezügliche Aussagen 35 2.4 Universelle Maschinen 44 2.5 Mikroprogrammierung · . 50 2.6 "Feste Verdrahtung" · . 57 2.7 Ein komplettes Computersystem . 67 3 Programmiersprachen 73 3.1 Assembler - Befehlsnamen und Adressen 73 3.2 Basic - Anweisungen in Satzform 81 3.3 Fortran - Module · . · . 92 3.4 Algol - Rekursion · . · . . . 101 3.5 Pascal - Datenstrukturen . 111 3.6 Noch einmal "feste Verdrahtung" 121 3.7 Zwischenspiel: Simula, Smalltalk und C . 126 3.8 C++ - Klassen und Objekte .. 135 3.9 Dynamische Speicherverwaltung 147 4 Compiler 159 4.1 Die Backus-Naur-Form 159 4.2 Syntaxtabellen 165 4.3 Namenstabellen . 174 4.4 Die Analyse von Unterprogrammaufrufen . 186 4.5 Allgemeine Ausdrücke in Programmiersprachen 191 4.6 Polymorphie . · . . . . . . . 199 x INHALTSVERZEICHNIS 4.7 Verbundanweisungen und Deklarationen 205 4.8 Codegenerierung ... 214 5 "Künstliche Intelligenz" 229 5.1 Lisp ......... . 229 5.2 Ein anderes Paradigma. 234 Index 237