Historische Innovationen Von Niklaus Wirth
Total Page:16
File Type:pdf, Size:1020Kb
Historische Innovationen von Niklaus Wirth Romain Schmitz 26. Januar 2006 Biografie 1934 geboren am 15. Februar, Schweiz 1959 Abschluss als Elektroingenieur 1963 Promotion, Berekley 1968 Professor an der ETH Zürich 1999 Emeritation Entwicklungen 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon ALGOL 60 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon ➔ Backus Naur Form ➔ Strukturierte Programmierung ➔ Blockstruktur ➔ Rekursion ➔ Call by name Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon Satz ::= Subjekt Prädikat Zusatz Subjekt ::= “Peter“ | “Siegfried“ Prädikat ::= “arbeitet“ | “schläft“ Zusatz ::= “nicht“ | epsilon Gültige Sätze: – Peter schläft nicht – Siegfried arbeitet Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon <block> ::= <unlabelled block> | <label> : <block> <unlabelled block> ::= <block head> ; <compound tail> <block head> ::= begin <declaration> | <block head> ; <declaration> <declaration> ::= <type declaration> | <procedure declaration> | ... <type declaration> ::= <type> <variable> | ... <compound tail> ::= <statement> end | <statement> ; <compound tail> Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon begin ISUMME = 0 integer zahl1, zahl2, summe; IZAHL1 = 0 IZAHL2 = 255 procedure addiere(a,b); integer a,b; CALL SUM(SUMME,ZAHL1,ZAHL2) begin addiere:=a+b STOP end END zahl1 := 3; SUBROUTINE SUM(SUMME,A,B) Zahl2 := 255; SUMME = A + B RETURN Summe := addiere(zahl1,zahl2); END end Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon integer ergebnis; integer procedure fak(n); integer n; begin if n=0 then fak := 1 else fak := n * fak(n-1) end Ergebnis := fak(5); Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon integer zahl; zahl:=10; procedure addiere(cbn a:integer); begin a:=a+10; end addiere(zahl); Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon integer zahl; zahl:=10; procedure addiere(cbn a:integer); begin a:=a+10; end addiere(zahl); Ergebnis: 20 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon integer zahl; zahl:=10; procedure addiere(cbn a:integer); integer zahl; begin zahl:=5; a:=a+10; end addiere(zahl); Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol-60 Medos-2 Oberon integer zahl; zahl:=10; procedure addiere(cbn a:integer); integer zahl; begin zahl:=5; a:=a+10; end addiere(zahl); Ergebnis: 15 ALGOL W 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol W Medos-2 Oberon ➔ Verbund (Record) ➔ Zusammenfassung von Variablen unterschiedlicher Datentypen ➔ Zeiger • Vermeidung unerwünschter Verhalten (vgl. call by name) • Programmierung verketteter Listen möglich ➔ Ereignisbehandlung Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Algol W Liltith Ceres Medos-2 Oberon record STUDENT( class STUDENT{ integer MATRIKEL_NR; int MATRIKEL_NR; string(20) NAME; String NAME; string(100) Anschrift; String Anschrift; ); } reference(STUDENT) S; Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Algol W Medos-2 Oberon record EXCEPTION( logical XCPNOTED; integer XCPLIMIT; XCPACTION; logical XCPMARK; string(64) XCPMSG; ); reference(EXCEPTION) ENDFILE, OVFL, DIVZERO; begin Integer ZAHL; ENDFILE := EXCEPTION(false,1,1,false,); READ(ZAHL); while ¬ XCPNOTED(ENDFILE) do begin WRITEON(ZAHL); READON(ZAHL) end end. PASCAL 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Pascal Medos-2 Oberon ➔ Sprache für den Lehrbereich ➔ Sprache sollte leicht erlernbar sein ➔ Sprachumfang möglichst einfach und gering ➔ Sprache für eigene Entwicklungen Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Pascal Medos-2 Oberon ➔ Single-Pass-Compiler ➔ Verschachtelung von Prozeduren ➔ P-Code Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Pascal Medos-2 Oberon procedure Drucke(); procedure oeffneSchnittstelle(); begin ... end; begin Schnittstelle(); ... end; Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Pascal Medos-2 Oberon Pascal UCSD Pascal Turbo Pascal Object Pascal Delphi Free Pascal Virtual Pascal Modula-2 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Modula-2 Medos-2 Oberon ➔ Sprache für den Lehrbereich ➔ Sprache sollte leicht erlernbar sein ➔ Sprache für eigene Entwicklungen Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Modula-2 Medos-2 Oberon ➔ Modulkonzept ➔ Aufteilung großer Probleme in Teilprobleme ➔ Leichte Wartbarkeit von Systemen ➔ Wiederverwendbarkeit von Systemteilen ➔ Module gegliedert in ➔ Programmmodule ➔ Lokale Module ➔ Globale Module Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Modula-2 Medos-2 Oberon Module Programm- lokale globale Module Module Module Benutzer- Basis- Bibliotheks- Module Module Module Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Modula-2 Medos-2 Oberon ➔ Separate Erstellung und Übersetzung von Modulen ➔ Kommunikation nur über Schnittstellen ➔ Definition ➔ Implementation ➔ Programmierung „paralleler“ Prozesse ➔ Kein Goto Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Modula-2 Medos-2 Oberon ➔ Modula-2 Compiler: http://www.modula2.org/source/ Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Lilith Medos-2 Oberon ➔ Basiert auf der Single-user workstation Alto ➔ Innovationen ➔ Grafikfähiger Bildschirm ➔ Fenstertechnologie ➔ Maus ➔ Nutzen ➔ Arbeitsinstrument zur Verwaltung des Instituts ➔ Lehrzweck ➔ M-Code direkt ausführbar Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Medos-2 Oberon ➔ Betriebssystem der Lilith ➔ Realisierung quasi-paralleler Prozesse ➔ System und Programme in Modula-2 geschrieben • Software und Hardware aufeinander abgestimmt Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Medos-2 Oberon Parallele Prozesse K1 K2 als Koroutinen: Oberon 60 63 68 70 74 82 86 Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Medos-2 Oberon Oberon steht für ➔ Betriebssystem ➔ Systemsprache Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon ➔ Sprache für den Lehrbereich ➔ Sprache sollte leicht erlernbar sein ➔ Sprache für eigene Entwicklungen Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon ➔ Vereinfachung der Schnittstellendefinitionen Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon MODULE Ausgabe; MODULE Ausgabe; FROM InOut IMPORT WriteString, WriteLn; IMPORT Write; (* nicht qualifizierter Import *) IMPORT RealInOut; (* qualifizierter Import *) BEGIN BEGIN WriteString("Hallo!"); WriteLn; Write.String("Hallo!"); Write.Ln; RealInOut.WriteReal(1.0, 0); Write.Real(1.0, 0); END Ausgabe. END Ausgabe. Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon MODULE Ausgabe; MODULE Ausgabe; FROM InOut IMPORT WriteString, WriteLn; IMPORT Write; (* nicht qualifizierter Import *) IMPORT RealInOut; (* qualifizierter Import *) BEGIN BEGIN WriteString("Hallo!"); WriteLn; Write.String("Hallo!"); Write.Ln; RealInOut.WriteReal(1.0, 0); Write.Real(1.0, 0); END Ausgabe. END Ausgabe. - Vermeidung von Konflikten durch gleichnamige Prozeduren - Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon ➔ Typerweiterung ➔ Erweiterbare Records Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Oberon Liltith Ceres Programmiersprache Medos-2 Oberon TYPE Figur Figur = RECORD x, y: INTEGER; (* center *) x y END; Rechteck = RECORD (Figur) b, h: INTEGER; END; Rechteck Kreis x y x y Kreis = RECORD (Figur) r: INTEGER; b h r END; Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Ceres Liltith Ceres Medos-2 Oberon Euler Algol-60 Algol-W Pascal Modula Modula-2 Oberon Ceres Liltith Ceres Medos-2 Oberon Beziehungen Tony Hoare Edsgar Dijkstra Algol W Algol Wirth Lilith Oberon Richard Ohran Jürg Gutknecht Zusammenfassung Algol W – Algol-Nachfolger Strukturierte Programmierung Pascal – Strukturierte Programmierung Modula(-2) – Modularisierung Oberon – Objektorientierung Quellen Rudolf Herschel FORTRAN Systematische Darstellung für den Anwender Edsgar Dijkstra A Primer of ALGOL 60 Programming Walter Bosse Einführung in das Programmieren mit ALGOL W Quellen T.Ottmann / P.Widmayer Programmierung mit PASCAL Hermann Gehring / Peter Röscher Einführung in Modula-2 Niklaus Wirth From Modula to Oberon.