Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis Stichworte zur Ideengeschichte der Programmiersprachen Robert Giegerich Faculty of Technology Bielefeld University [email protected] Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis Vorbemerkung Diese Notzien dienen zur Erläuterung des O’Reilly Posters über die Entwicklung der Programmiersprachen http://oreilly.com/news/languageposter_0504.html. Sie sind ein spontanes Produkt meiner Erinnerung. Es bedarf der Überprüfung, ob wirklich alle Ideen an ihrem Ursprungsort angesiedelt sind. Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 1. Maschinennahe Sprachen Vom Binärcode zu Assembler Sprachen: Symbolische OP-codes Explizite Register Symbolische Adressen und Marken Subroutine+Return, HW stack Coroutines Selbstmodifizierende Programme Relocatable Code Indirekte Adressierung 0,1,2,3-Adressform Arithmetische Ausdrücke als Operanden ==> FORmula TRANslation Bis dato: Algorithmen nur auf 1 Maschinentyp ausführbar, z.B. IBM 360 Zielsetzung: Portabilität durch “Höhere Programmiersprachen” Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 2. Imperative Programmiersprachen (main stream) FORTRAN: zunächst definiert durch wachsende Fähigkeiten des Compilers; Beispiele und Gegenbeispiele ALGOL 60: Erste systematisch konstruierte Sprache. Neuerungen: Maschinen-Unabhängigkeit Präzise Syntaxdefinition (CFG) Strenge Typisierung Arrays und Matrizen Verschachtelte Sichtbarkeitsbereiche, Blockstruktur Prozeduren mit Parametern Rekursion vergessen: Input/Output Vorwiegende Anwendung: Numerische Mathematik Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis Zeitgleiche Entwicklungen von anwendungs-spezifischen Sprachen (DSL) COBOL (Business) SNOBOL (String-Verarbeitung) Systemprogrammiersprachen: Mit Elementen höherer Sprachen, aber maschinenabhängige Sprachanteile erlaubt, z.B. AdressArithmetik, expliziter Register-Zugriff; wichtigster Vertreter: C, das sich später zu einer maschinenunabhängigen Systemprogrammiersprache entwickelt Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis ALGOL-Kinder: ALGOL-W (records und references, I/O) ALGOL 68 (akademisch) PL-1 (IBM) Simula 67 (siehe unten) Pascal als Antithese zu den immer komplexer werdenden Sprachen; Betonung der Strukturierten Programmierung kein GOTO Pcode-Compiler in Pascal Bootstrap-Techniken Ada (siehe unten) Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 3. Funktionale Programmiersprachen LISP: “Symbolische” Programmierung Listen als universelle Datenstruktur,z.B. in (QUOTE (CAR (CDR (CDR (CDR x))))) Programme als Daten Funktionen als universelle Kontrollstruktur, z.B. (COND (EQUAL x y) (PLUS x 1)(Minus y 1)) Einfache Semantik durch Interpreter in LISP (1 Seite) (Fast) untypisiert Erfunden für die theoretische Informatik, wurde LISP zum Medium der KI-Forschung Ableger: SCHEME Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis ML: Ursprünglich funktionale Sprache für automatisches Beweisen. Typ-Polymorphismus Algebraische Datentypen Unterscheidung strikte/lazy Semantik von Funktionen Miranda: Lazy Semantik Ästhetik der Notation Implementierung durch Interpreter weltweit in der Lehre eingesetzt Haskell: Weiterentwicklung von Miranda Typklassen Monaden (quasi-imperatives Programmieren) Compiler-Technologie (GHC) Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 4. Logische Programmiersprachen PROLOG (mit Varianten) Aussagenlogik plus Pattern Matching Untypisiert Fakten und Implikationen Rechnung durch universellen Suchprozess (Resolution) Programm: father(robert, harri). father(robert, sven). brother(X , Y ) <- father(Z , X ), father(X , Y ), not(X = Y ) Anfragen: brother(harri,georg) => FALSE brother(sven,X ) => X = harri brother(A, B) => A = harri, B = sven; A = sven, B = harri brother(harri, lisa) => FALSE Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis Negation as Failure/Closed World Assumption father(robert, lisa). ???? brother(harri,harri) => TRUE Nicht-logisches Konstrukt (!) zur Einschränkung des Nicht-Determinismus Ableger: Logisch-funktionale Sprachen: Resolution + Termersetzung Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 5. Ada-Projekt: Höhepunkt und Ende einer Aera Diagnose ca 1975: Hunderte verschiedener Sprachen und Sprachvarianten finden im DOD (USA) Verwendung. Keinerlei Austausch und Wiederverwendung größerer Software. Weltweiter Wettbewerb: universelle Sprache für alle (DOD) Zwecke. Sprach-Subsets werden VERBOTEN. Valdierung der Compiler. Durchsetzung per Befehl im DOD-Bereich, nachfolgend auch weltweit. Entwicklung 1979-1983, Compiler ff Überaus komplexe Sprache, keine Verbreitung Gegenläufiger Trend: Kleine einfache Sprachen (Pascal) Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 6. Objekt-orientierte Programmierung Simula 67: ALGOL + Klassen Klasse = Funktion/Prozedur mit Gedächtnis Smalltalk: Ziel: Wiederverwendbarer Code Klassen und Methoden Vererbung Byte-Code Interpreter Hierarchie vordefinierter Klassen Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis Modula/Oberon: Pascal + Klassen C++: Erweiterung von C um Klassen Eiffel: Kommerziell eingesetzte OO-Sprache OAK/JAVA: Einfache, fehlersichere OO-Sprache Plattform-unabhängiges Rechnen Lizenz-Krieg um Erhalt der Plattformunabhängigkeit (gegen Sprachvarianten) Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University Vorbemerkung Maschinennahe Sprachen Imperative Programmiersprachen (main stream) Funktionale Programmiersprachen Logis 7. Anwendungsspezifische Sprachen SGML, HTML, XML: Dokumentenverarbeitung Postscript: Druckseitenbeschreibung Tcl/Tk, PERL, Python: Skriptsprachen ... 1000 weitere ... Bellman’s GAP (2011): Algebraische Dynamische Programmierung Deklarative Sprache: Baumgrammatik + Algebren Optimierungsprobleme über Sequenzdaten Stochastische Modelle (HMMs, SCFGs) Compiler optimiert asymptotische Effizienz Robert Giegerich Stichworte zur Ideengeschichte der Programmiersprachen Bielefeld University