Die Entstehung von Pascal
Zum Anfang
Vollbild
Die 1970er Jahre waren eine ungeheuer produktive Zeit für die Informatik in Europa. Der Bedarf an neuen Programmiersprachen wurde durch den raschen Fortschritt der Computertechnik in den gut ausgestatteten Rechenzentren gesteigert. Mit Algol, Cobol und Fortran waren unglaublich aufwändige Softwareprojekte realisiert worden. Doch die Anforderung an Programmiersprachen wuchs.
Gar nicht so selten wird heute übersehen, dass die Programmiersprache Pascal in der Tradition von Algol60 steht. Das hat Pascal übrigens mit Modula-2 gemeinsam, die auch von Niklaus Wirth entwickelt wurde, der von 1968 bis 1999 als Informatik-Professor an der Eidgenössischen Technischen Hochschule Zürich lehrte und forschte.
Zum Anfang
Zum Anfang
Zum Anfang
Computersprachen - neu gedacht
Vollbild
Niklaus Wirth verfolgte beim Entwurf von Pascal einen stark pragmatischen Ansatz; jedes als notwendig erkannte Konzept wurde nur soweit ausgebaut, wie es Wirth notwendig erschien. Außerdem versuchte er, die statische Überprüfbarkeit von Programmeigenschaften so weit wie möglich zu treiben. Dies betraf sowohl die Syntax, die statische Semantik, also Sichtbarkeit und Typen, als auch Laufzeiteigenschaften.
Er übernahm von Algol 60 das Block- und das Prozedurkonzept und die lexikalische Sichtbarkeit von Namen. Allerdings gab es nur Value- und Referenzparameter und nur statische Felder (arrays). An Datenstrukturtypen gab es mehr als in Algol 60, nämlich Aufzählungstypen, Zeichenketten (strings), Verbunde (records) und vor allen Dingen Zeiger (pointer). Zeiger brauchte man unbedingt, um auf dynamisch kreierte, anonyme Objekte zugreifen und damit verzeigerte Datenstrukturen realisieren zu können. Anonyme Objekte wurden durch den new-Operator in einem speziellen Speicherbereich, der Halde (heap) kreiert und konnten mit dispose wieder freigegeben werden. Speicherverwaltung war also explizit vom Programmierer zu machen. Es gab keine automatische Speicherbereinigung.
Zum Anfang
Zum Anfang
Zum Anfang
Auf dem Weg zur Objektorientierung
Vollbild
Die Programmiersprache Modula 2 ist eine Nachfolgerin von Pascal. Sie wurde von Wirth entwickelt, als er die Wichtigkeit von nebenläufiger Programmierung erkannte, etwa beim Programmieren von Betriebssystemen. Pascal kann gewissermaßen als eine der erfolgreichsten Programmiersprachen für das Programmieren im Kleinen betrachtet werden. Für größere Systeme fehlte ein Modulkonzept. Dies war neben der Nebenläufigkeit die zweite große Neuigkeit in Modula 2.
Moduln in Modula 2 waren auch Einheiten der Übersetzung. Sie mussten vom Programmierer in zwei Teilen angegeben werden, einem Definitionsmodul und einem Implementierungsmodul. Der Definitionsmodul enthielt Definitionen der vom Modul exportierter Konstanten, Variablen, Typen und Prozeduren zum Gebrauch in anderen Moduln. Der Implementierungsmodul enthielt den Code für die Prozeduren.
Zum Anfang
Zum Anfang
Zum Anfang
Neue Strukturen für die Programmierung
Vollbild
Pascal löste konzeptionelle Probleme, die bei der Entwicklung mit Algol als äußerst schwierig erschienen. Zwar unterstützte Algol60 durch einige Sprachkonzepte wie Rekursion oder dynamische Felder den Programmierer schon wesentlich besser als die konkurrierende Sprache Fortran. „Aber es musste immer noch sehr viel vom Programmierer zu Fuß nachgebildet werden, was er für seine Anwendungen brauchte“, erläutert Reinhard Wilhelm.
Er hat da gleich ein Beispiel parat. „Ich möchte eine Adressdatei programmieren.“ Hier haben wir es überwiegend mit nicht-numerischen Daten zu tun. Name, Vorname, Straße und Wohnort sind Strings, für deren Bearbeitung der Programmierer erst ein Sprachkonstrukt nachbilden muss. Hausnummer und Postleitzahl dagegen sind auch für Algol 60 kein Problem.
Aber Algol60 hatte noch mit einem viel schwerwiegenderen Problem zu tun. „Die Autoren von Algol60 hatten einen gravierenden Fehler gemacht, indem sie die Ein- und Ausgabe als maschinenabhängig erklärten und deshalb nicht in der Sprachdefinition regelten“, erklärt Professor Wilhelm.
Der amerikanische Informatiker Donald Knuth, vielen als Entwickler des Textsatzsystems Tex bekannt, wollte diesen Fehler mit einem eigenen Vorschlag beheben. Er konnte sich damit allerdings nicht durchsetzen.
Wirth versuchte es mit einem sehr pragmatischen Vorgehen. „Er übernahm von Algol 60 das Block- und das Prozedurkonzept und die lexikalische Sichtbarkeit von Namen“, sagt Reinhard Wilhelm und erläutert: „Allerdings gab es nur Value- und Referenzparameter und nur statische Felder (arrays). An Datenstrukturtypen gab es mehr als in Algol 60, nämlich Aufzählungstypen, Zeichenketten (strings), Verbunde (records) und vor allen Dingen Zeiger (pointer). Zeiger brauchte man unbedingt, um auf dynamisch kreierte, anonyme Objekte zugreifen und damit verzeigerte Datenstrukturen realisieren zu können. Anonyme Objekte wurden durch den new-Operator in einem speziellen Speicherbereich, der Halde (heap) kreiert und konnten mit dispose wieder freigegeben werden. Speicherverwaltung war also explizit vom Programmierer zu machen. Es gab keine automatische Speicherbereinigung.“
Zum Anfang
Zum Anfang
Wirth - das Sprachengenie
Vollbild
Wirth sorgte mit mehreren Maßnahmen für eine weite internationale Verbreitung von Pascal: Er schrieb, zusammen mit Kathleen Jensen, einen sehr gut lesbaren Report und ein knappes, aber ausreichendes Manual, welches bis heute die höchste Auflage aller LNCS-Bände erzielte. Er hielt unzählige Vorträge über die Sprache, vor allen Dingen ab 1971, nachdem seine Gruppe an der ETH Zürich, insbesondere Urs Ammann, Pascal in einem vorbildlichen Programmierstil in der Sprache Pascal selbst implementiert hatten. Diese Implementierung wurde zum Bootstrap zur Verfügung gestellt. Für jede neue Zielarchitektur musste „lediglich“ ein neuer Codegenerator geschrieben werden.
Mit diesem einfachen Bootstrap hat Reinhard Wilhelm seine eigenen schmerzlichen Erfahrungen gemacht. Als Master-Student in Stanford war er an der Portierung von Pascal auf eine IBM 360 durch Dave Russel und Jeff Sue beteiligt. Das schwierigste Problem waren die verschiedenen File-Formate und Zeichencodierungen der CDC 6400, auf der Urs Amman Pascal an der ETH implementiert hatte, und der IBM 360. Die ersten Bootstrap-Schritte mussten auf einer CDC 6400 ablaufen, die Codeerzeugung musste aber IBM 360-Code ausspucken.
Im Silicon Valley ist bekanntlich nichts unmöglich. Es fanden sich im benachbarten Stanford Research Institute (SRI) tatsächlich eine CDC 6400 und eine IBM 360, allerdings in verschiedenen Flügeln des SRI-Gebäudes. Wilhelm und seine Kolegen bekamen die Genehmigung, diese beiden Maschinen zur Portierung zu benutzen. Da das SRI sehr viele vom Pentagon finanzierte Projekte laufen hatte, herrschten strikte Sicherheitsvorschriften. So wurde die Nutzung der beiden Maschinen in den verschiedenen Gebäudeteilen zum Alptraum. Jedes Mal, wenn die Master-Studenten einen Fehler auf einer IBM-Lochkarte hatten, brauchten sie militärischen Begleitschutz zum IBM-Lochkartenstanzer im anderen Flügel. Das hielten alle Beteiligten nicht lange durch, und so wurde der Port irgendwie doch im Gebäude des Computer Science Departments durchgezogen.
Reinhard Wilhelm machte dann noch mal eine ähnliche Erfahrung, als er nach Saarbrücken kam und mit Studenten eine Portierung auf den dortigen Telefunken-Großrechner TR440 machen wollte. Er kontaktierte einen Ansprechpartner an der ETH Zürich, der ihm prompt ein CDC 6400-Band mit dem Züricher Pascal-Übersetzer schickte und übergab dieses dann an das Rechenzentrum zum Einlesen. Die Mitarbeiter dort taten ihr Bestes, scheiterten aber an dem auf der TR440 unlesbaren CDC-Dateiformat. Deshalb rief Wilhelm seinen ETH-Ansprechpartner an und fragte ihn, wie all die Empfänger von CDC-Bändern mit dem Pascal-Übersetzer, die nicht selbst CDC-Maschinen hatten, mit den exotischen Datei-Formaten klar gekommen seien, und erhielt - in schönstem Schweizer Tonfall - die Antwort: „Das habe ich mich auch schon immer gefragt.“
Zum Anfang
Zum Anfang
Zum Anfang
Zum Anfang
Module über Module
Vollbild
Pascal war als Lehrsprache programmiert und wies deshalb einige Besonderheiten auf, die den kommerziellen Einsatz zunächst einmal etwas erschwerten. Aber es entstanden rasch einige Pascal-Dialekte für den kommerziellen Einsatz, und spätestens nachdem die Softwareschmiede Borland Turbo Pascal auf den Markt gebracht hatte, konvertierten sogar die ganz hart gesottenen Cobol-Programmierer.
Umfangreiche Softwaremodule mit sauberen Schnittstellen, die waren in Pascal elegant zu programmieren. Und mit den Möglichkeiten, die Pascal für eine dynamische Speicherverwaltung bot, arbeiteten die Entwickler natürlich begeistert.
„Es gab dazu ganz wesentlich Zeiger in Pascal“, hebt Professor Reinhard Wilhelm hervor. Die gab es zum Beispiel in der damals populären Programmiersprache Fortran nicht von Haus aus. Sie mussten mühsam in Fortran selbst numerisch nachgebildet werden. „Mit den Zeigern konnte man auch dynamische Speicherverwaltung implementieren“, erläutert Wilhelm. Das erlaubte ganz neue Möglichkeiten, die in Fortran eben nur mit einem erheblichen Implementierungsaufwand zu realisieren waren.
Zum Anfang
Zum Anfang
Zum Anfang
Scrollen, um weiterzulesen
Wischen, um weiterzulesen
Wischen, um Text einzublenden