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