Konzepte H¨Oherer Programmiersprachen (Entwurf)
Total Page:16
File Type:pdf, Size:1020Kb
Mathematisch- Naturwissenschaftliche Fakultat¨ Konzepte hoherer¨ Programmiersprachen (Entwurf) Herbert Klaeren 4. Februar 2013 2 Dieses Werk steht unter der Creative Commons by-sa“-Lizenz (Namensnennung, ” C Weitergabe unter gleichen Bedingungen), CC BY: Copyright Herbert Klaeren, 1997–2011. Prof. Dr. H. Klaeren Universitat¨ Tubingen¨ Wilhelm-Schickard-Institut D–72076 Tubingen¨ +49–7071–29 75457 [email protected] INHALTSVERZEICHNIS i Inhaltsverzeichnis 1 Einf ¨uhrung 1 1.1 Motivation . .1 1.2 Konzepte und ihre Umsetzung . .6 1.3 Literaturhinweise . .9 1.4 Aufgaben . 18 2 Grundlagen von Sprachen 19 2.1 Syntax, Semantik, Pragmatik . 19 2.2 Compilation versus Interpretation . 21 2.3 Bootstrapping . 23 2.4 Aufgaben . 33 3 Paradigmata der Programmierung 35 3.1 imperativ . 36 3.2 funktional . 36 3.3 relational . 38 3.4 objektorientiert . 39 3.5 Aufgaben . 42 4 Entit¨aten,Namen und Bindungen 43 4.1 Exkurs: Der Lambda-Kalkul..........................¨ 47 4.2 Bindungen in Programmiersprachen . 62 4.3 Attribute von Variablen, Deklarationen . 63 4.4 Aufgaben . 75 5 Laufzeitorganisation 77 5.1 Ein abstraktes Maschinenmodell . 78 5.2 Statische Allokation . 83 5.3 Dynamische Allokation . 86 5.4 Aktivierungsblocke¨ . 91 5.5 Zugriff auf nichtlokale Grossen¨ . 96 5.6 Funktionen als Werte, Closures . 102 5.7 Aufgaben . 105 6 Prozedurale Abstraktion 107 6.1 Parameter-Zuordnungsmethoden . 107 6.2 Parameter-Ubergabemechanismen¨ . 109 6.3 Parameter-Auswertungsstrategien . 114 6.4 Implementierung der Parameterubergabe¨ . 115 6.5 Prozeduren als Parameter . 116 6.6 Aufgaben . 120 4. Februar 2013 ii INHALTSVERZEICHNIS 7 Typen und Typsysteme 121 7.1 Typen als Strukturbeschreibungen . 123 7.2 Typsprachen und Deskriptoren . 130 7.3 Taxonomie von Datentypen . 132 7.4 Einzelne Datentypen . 134 7.5 Overloading . 168 7.6 Polymorphie . 169 7.7 Aufgaben . 170 8 Modulkonzept 171 8.1 Motivation . 171 8.2 Geheimnisprinzip . 171 8.3 Steuerung der Sichtbarkeit . 172 8.4 Auflosung¨ von Namenskonflikten . 173 8.5 Bibliotheken . 174 8.6 Implementierung . 175 8.7 Konsistenz von Schnittstelle und Implementierung . 178 9 Objektkonzept 181 9.1 Geschichte . 181 9.2 Mehrfachvererbung . 183 9.3 Implementierung . 183 10 Ausnahmebehandlung 189 10.1 Entwurfsentscheidungen zur Ausnahmebehandlung . 194 10.2 Ausnahmebehandlung in PL/I . 195 10.3 Ausnahmebehandlung in CLU . 196 10.4 Ausnahmebehandlung in Ada . 198 10.5 Ausnahmebehandlung in ISO Modula-2 . 199 10.6 Ausnahmebehandlung in C++ . 203 10.7 Ausnahmebehandlung in Modula-3 . 203 10.8 Programmieren ohne Ausnahmebehandlung . 204 10.9 Bewußte Erzeugung von Ausnahmen . 206 11 Entwurf von Programmiersprachen 207 12 Kritik an Programmiersprachen 213 12.1 Kritik durch die Entwerfer . 214 12.2 Kritik am Blockkonzept . 216 12.3 Kritik von anderer Seite . 217 A Ein wenig Geschichte 219 A.1 1950er: Fruhe¨ Experimente . 229 A.2 1960er: Syntax . 230 A.3 1970er: Semantik . 231 A.4 1980er: Softwaretechnik und Funktionale Programmierung . 231 A.5 1990er: Objekte . 232 INHALTSVERZEICHNIS iii A.6 Eine andere Sichtweise . 232 A.7 Aufgaben . 233 B Zitate zum Thema Programmiersprachen 235 C Gruselkabinett 243 C.1 Fortran . 243 C.2 COBOL . 244 C.3 Algol 60 . 244 C.4 Basic . 245 C.5 C ......................................... 245 C.6 PL/I . 247 C.7 APL . 251 C.8 Programmiersprachen mit Layout . 252 4. Februar 2013 iv ABBILDUNGSVERZEICHNIS Abbildungsverzeichnis 1 TIOBE Programming Community Index . .4 2 I-Diagramm . 24 3 T-Diagramm . 25 4 T-Diagramm, Interpreter . 25 5 T-Diagramm fur¨ einen Ubersetzer¨ . 25 6 Ubersetzungsprozess¨ . 26 7 Cross compilation . 26 8 Produktion des PCode-Compilers, Phase 1 . 27 9 Produktion des PCode-Compilers, Phase 2 . 27 10 Distribution des PCode-Compilers . 28 11 PCode-Interpreter . 28 12 Installation des PCode-Compilers, Phase 1 . 29 13 Installation des PCode-Compilers, Phase 2 . 29 14 Selbstcompilation . 30 15 Bootstrap des Pascal-Compilers, Phase 1 . 30 16 Bootstrap des Pascal-Compilers, Phase 2 . 31 17 Bootstrap des Pascal-Compilers, Phase 3 . 31 18 Bootstrap des Pascal-Compilers, Phase 4 und 5 . 32 19 Speicherplatze¨ . 44 20 Berechnung der Fakultat¨ von 3 im λ-Kalkul¨ . 59 21 Zeitpunkt und Dauer von Bindungen . 63 22 Liste der standard identifier“ aus PIM-3 . 64 ” 23 Variante RECORDs ................................ 65 24 Blockschachtelung . 67 25 Blockschachtelung als Baumstruktur . 67 26 Laufzeitsystem . 78 27 Die VM . 79 28 Fortran-Programm in der VM . 85 29 Statische Verweiskette . 99 30 Variablenumgebung fur¨ Closures . 104 31 Closure mit freien Variablen der Funktion . 105 32 Prozeduren als Parameter . 117 33 Most recent property . 118 34 Boolean in der ISO-Norm . 135 35 Naives Speicherlayout fur¨ Records . 156 36 Ausgerichtetes Speicherlayout fur¨ Records . 157 37 Kompaktes Speicherlayout fur¨ Records . 157 38 Varianten in Pascal . ..