Historische Innovationen von

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

::= |

::= ;

::= begin | ;

::= | | ...

::= | ...

::= end | ; 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

➔ 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