Stichworte zur Ideengeschichte der Programmiersprachen

Werbung
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
Herunterladen