historische innovationen von niklaus wirth · biografie 1934 geboren am 15. februar, schweiz 1959...
TRANSCRIPT
Biografie
1934 geboren am 15. Februar, Schweiz
1959 Abschluss als Elektroingenieur
1963 Promotion, Berekley
1968 Professor an der ETH Zürich
1999 Emeritation
Entwicklungen
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
ALGOL 60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
➔ Backus Naur Form
➔ Strukturierte Programmierung
➔ Blockstruktur
➔ Rekursion
➔ Call by name
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
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
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
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>
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
begininteger zahl1, zahl2, summe;
procedure addiere(a,b); integer a,b;begin addiere:=a+bend
zahl1 := 3;Zahl2 := 255;
Summe := addiere(zahl1,zahl2);end
ISUMME = 0IZAHL1 = 0IZAHL2 = 255CALL SUM(SUMME,ZAHL1,ZAHL2)STOPEND
SUBROUTINE SUM(SUMME,A,B)SUMME = A + BRETURNEND
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
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);
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
integer zahl;zahl:=10;
procedure addiere(cbn a:integer);begin
a:=a+10;end
addiere(zahl);
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
integer zahl;zahl:=10;
procedure addiere(cbn a:integer);begin
a:=a+10;end
addiere(zahl);
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Ergebnis: 20
Algol-60
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
integer zahl;zahl:=10;
procedure addiere(cbn a:integer); integer zahl;beginzahl:=5;a:=a+10;end
addiere(zahl);
Algol-60
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
integer zahl;zahl:=10;
procedure addiere(cbn a:integer); integer zahl;beginzahl:=5;a:=a+10;end
addiere(zahl); Ergebnis: 15
ALGOL W
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
➔ Verbund (Record)➔ Zusammenfassung von Variablen unterschiedlicher
Datentypen
➔ Zeiger• Vermeidung unerwünschter Verhalten (vgl. call by name)• Programmierung verketteter Listen möglich
➔ Ereignisbehandlung
Algol W
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
record STUDENT( integer MATRIKEL_NR; string(20) NAME; string(100) Anschrift; );
reference(STUDENT) S;
Algol WAlgol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
class STUDENT{ int MATRIKEL_NR; String NAME; String Anschrift; }
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.
Algol W
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
PASCAL
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
➔ Sprache für den Lehrbereich➔ Sprache sollte leicht erlernbar sein➔ Sprachumfang möglichst einfach und gering
➔ Sprache für eigene Entwicklungen
Pascal
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
➔ Single-Pass-Compiler
➔ Verschachtelung von Prozeduren
➔ P-Code
Pascal
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
procedure Drucke();
procedure oeffneSchnittstelle();begin...end;
beginSchnittstelle();...end;
Pascal
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Pascal
Turbo Pascal
Delphi Free Pascal
Object Pascal
UCSD Pascal
Virtual Pascal
Pascal
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Modula-2
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
OberonModula-2
➔ Sprache für den Lehrbereich➔ Sprache sollte leicht erlernbar sein
➔ Sprache für eigene Entwicklungen
➔ Modulkonzept
➔ Aufteilung großer Probleme in Teilprobleme
➔ Leichte Wartbarkeit von Systemen➔ Wiederverwendbarkeit von Systemteilen
➔ Module gegliedert in
➔ Programmmodule➔ Lokale Module➔ Globale Module
Modula-2
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Modula-2
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Module
Programm-Module
lokaleModule
globaleModule
Benutzer-Module
Basis-Module
Bibliotheks-Module
➔ Separate Erstellung und Übersetzung von Modulen
➔ Kommunikation nur über Schnittstellen➔ Definition➔ Implementation
➔ Programmierung „paralleler“ Prozesse
➔ Kein Goto
Modula-2
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
➔ Modula-2 Compiler:
http://www.modula2.org/source/
Modula-2
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
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
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
OberonLilith
➔ Betriebssystem der Lilith
➔ Realisierung quasi-paralleler Prozesse
➔ System und Programme in Modula-2 geschrieben• Software und Hardware aufeinander abgestimmt
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
OberonMedos-2
K1 K2Parallele Prozesse als Koroutinen:
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
OberonMedos-2
Oberon
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
60 63 68 70 8274 86
Oberon steht für
➔ Betriebssystem
➔ Systemsprache
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Oberon
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
OberonProgrammiersprache
➔ Sprache für den Lehrbereich➔ Sprache sollte leicht erlernbar sein
➔ Sprache für eigene Entwicklungen
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
OberonProgrammiersprache
➔ Vereinfachung der Schnittstellendefinitionen
MODULE Ausgabe;
FROM InOut IMPORT WriteString, WriteLn; (* nicht qualifizierter Import *)
IMPORT RealInOut; (* qualifizierter Import *)
BEGIN WriteString("Hallo!"); WriteLn; RealInOut.WriteReal(1.0, 0); END Ausgabe.
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
MODULE Ausgabe;
IMPORT Write;
BEGIN Write.String("Hallo!"); Write.Ln; Write.Real(1.0, 0); END Ausgabe.
OberonProgrammiersprache
MODULE Ausgabe;
FROM InOut IMPORT WriteString, WriteLn; (* nicht qualifizierter Import *)
IMPORT RealInOut; (* qualifizierter Import *)
BEGIN WriteString("Hallo!"); WriteLn; RealInOut.WriteReal(1.0, 0); END Ausgabe.
MODULE Ausgabe;
IMPORT Write;
BEGIN Write.String("Hallo!"); Write.Ln; Write.Real(1.0, 0); END Ausgabe.
OberonProgrammiersprache
- Vermeidung von Konflikten durch gleichnamige Prozeduren -
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
OberonProgrammiersprache
➔ Typerweiterung➔ Erweiterbare Records
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
Figurx y
Rechteckx y
Kreisx y
b h r
TYPE Figur = RECORD x, y: INTEGER; (* center *) END;
Rechteck = RECORD (Figur) b, h: INTEGER; END;
Kreis = RECORD (Figur) r: INTEGER; END;
Algol-60
Euler
Algol-W Pascal Modula-2Modula Oberon
Liltith
Medos-2
Ceres
Oberon
OberonProgrammiersprache
Zusammenfassung
Algol W – Algol-NachfolgerStrukturierte Programmierung
Pascal – Strukturierte Programmierung
Modula(-2) – Modularisierung
Oberon – Objektorientierung
Rudolf HerschelFORTRAN Systematische Darstellung für den Anwender
Edsgar DijkstraA Primer of ALGOL 60 Programming
Walter BosseEinführung in das Programmieren mit ALGOL W
Quellen