Historische Innovationen von Niklaus Wirth · Biografie 1934 geboren am 15. Februar, Schweiz 1959...

45
Historische Innovationen von Niklaus Wirth Romain Schmitz 26. Januar 2006

Transcript of Historische Innovationen von Niklaus Wirth · Biografie 1934 geboren am 15. Februar, Schweiz 1959...

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

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

Ceres

Algol-60

Euler

Algol-W Pascal Modula-2Modula Oberon

Liltith

Medos-2

Ceres

Oberon

Ceres

Algol-60

Euler

Algol-W Pascal Modula-2Modula Oberon

Liltith

Medos-2

Ceres

Oberon

Beziehungen

Wirth

Tony HoareEdsgar Dijkstra

Jürg GutknechtRichard Ohran

Oberon

Algol W

Lilith

Algol

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

T.Ottmann / P.WidmayerProgrammierung mit PASCAL

Hermann Gehring / Peter RöscherEinführung in Modula-2

Niklaus WirthFrom Modula to Oberon

Quellen