Wikipedia · einfach zusammengefasst · Stand
Pascal (Programmiersprache)
Besonderheiten · Sehr hohe Prozesssicherheit · Keine nullterminierten Zeichenketten · Strikte Trennung zwischen Programm, Funktionen und Prozeduren · Deklarationen.
Inhalt6 Abschnitte
Wesen und Einsatz
Pascal ist eine imperative und strukturierte Programmiersprache, die Niklaus Wirth an der ETH Zürich entwickelte und 1971 veröffentlichte. Sie wurde zunächst als Lehrsprache eingeführt, um strukturierte Programmierung zu vermitteln. Pascal ist eine Weiterentwicklung von Algol 60; seine Syntax orientiert sich teilweise an der englischen Grammatik und soll dadurch gut lesbar und für Programmiereinsteiger geeignet sein.
Ein zentrales Merkmal ist die starke, statische Typisierung. Jede Variable erhält bereits bei der Übersetzung einen Datentyp, der später nicht geändert werden kann. Zuweisungen sind grundsätzlich nur zwischen Werten desselben Typs erlaubt. Ausnahmen bestehen unter anderem bei der Zuweisung von integer an real, bei bestimmten eingeschränkten Wertebereichen und bei einigen String-Typen. Werden Werte außerhalb eines zulässigen Zielbereichs zugewiesen, kann ein Laufzeitfehler entstehen.
Die Typstrenge, die klare Zuordnung von Variablen und die gute Prüfbarkeit machen Pascal wartbar und vergleichsweise fehlersicher. Deshalb wird es weiterhin in universitärer Ausbildung und Entwicklung sowie in sicherheitskritischen Bereichen wie Verkehrstechnik, Energieversorgung, Medizintechnik, Raumfahrt und Militär eingesetzt. Die 2005 eingeführte Betriebsleittechnik IV der 2011 stillgelegten Transrapid-Versuchsanlage Emsland war beispielsweise in Pascal programmiert. Auch im Informatikunterricht wird Pascal wegen seiner Typstrenge, Fehlersicherheit und frei verfügbaren portierbaren Compiler wie Free Pascal und GNU Pascal verwendet.
Syntax, Datentypen und Programmablauf
Ein einfaches Pascal-Programm lautet beispielsweise: program Hallo(output); begin writeln('Hallo Welt') end. In der im Revised Report von 1973 beschriebenen Version waren input und output vordefinierte Programmparameter. In Dialekten wie Delphi kann der Programmkopf meist entfallen, muss aber, falls vorhanden, syntaktisch korrekt sein.
Die vier einfachen Standarddatentypen sind integer für ganze Zahlen wie 4, 0 und -17, real für Gleitkommazahlen wie 0.4 und -17.74445, boolean mit den Werten true und false sowie char für ein einzelnes Zeichen. Die genaue Länge der Datentypen außer boolean hängt vom Compiler ab. Zusätzlich können eigene Typen definiert werden. Aufzählungstypen nennen ihre möglichen Werte, etwa Besteck = (Gabel, Messer, Loeffel). Ein Ausschnittstyp beschränkt den Wertebereich eines anderen Typs, etwa byte = 0 .. 255.
Strukturierte Datentypen speichern mehrere Werte. Ein array enthält eine feste Anzahl von Werten desselben Typs, zum Beispiel array [1..100] of integer. Ein set speichert, welche Werte einer Menge enthalten sind; Reihenfolge und mehrfaches Auftreten spielen keine Rolle, etwa set of 13..55. Ein record verbindet eine feste Anzahl von Feldern, deren Datentypen verschieden sein können. Eine Person kann beispielsweise Alter, Haarfarbe, Groesse und kurzsichtig als Felder besitzen. Der Typ file stellt eine beliebig lange Folge von Werten desselben Typs dar, etwa file of integer.
Zeiger ermöglichen dynamische Datenstrukturen wie Listen und Bäume. Der benötigte Speicherplatz kann während der Laufzeit angefordert und bei Bedarf erweitert werden. Pascal unterstützt jedoch keine Zeigerarithmetik; Arrays werden über ihren Index durchlaufen.
Programme, Funktionen und Prozeduren besitzen einen Kopfteil, einen Deklarationsteil und einen Definitionsteil. Im Deklarationsteil können Typen, Variablen sowie verschachtelte Prozeduren und Funktionen stehen. Verschachtelte Routinen sind außerhalb der umgebenden Routine nicht sichtbar. Eine Funktion liefert einen Rückgabewert, eine Prozedur nicht; Pascal trennt beide Konzepte grundsätzlich.
Für Verzweigungen gibt es if und case. Schleifen werden mit while, repeat oder for geschrieben: while prüft die Abbruchbedingung vor jedem Durchlauf, repeat danach, und for ist für eine vorgegebene Anzahl von Durchläufen gedacht. Die with-Anweisung ist keine Schleife, sondern erleichtert Zugriffe auf Felder eines record. Mit goto sind Sprünge möglich, deren Verwendung umstritten ist.
Typische Sprachregeln
Pascal unterscheidet Groß- und Kleinschreibung bei Schlüsselwörtern sowie Bezeichnern nicht. Das Semikolon trennt Anweisungen, statt wie in C zwingend den Abschluss jeder Anweisung zu markieren. Vor end oder until kann es entfallen; vor else darf es in der Regel nicht stehen. Zeichen- und String-Literale werden mit dem Apostroph begrenzt.
Zuweisungen werden mit := geschrieben. Das Gleichheitszeichen dient dem Vergleich und der Definition von Konstanten. Daher lautet eine Erhöhung beispielsweise i := i + 1; verkürzte Schreibweisen wie i++ oder i *= 2 gibt es nicht. Für solche Fälle stehen unter anderem inc(i) und dec(i) zur Verfügung.
Als Operatoren verwendet Pascal and, or, not, div, mod und <>. div ist die Ganzzahldivision, während / bei real verwendet wird. Standard-Pascal besitzt keine Bitoperationen für Integer; an ihrer Stelle können Mengen des Typs set of mit den Operatoren *, + und - für Durchschnitt, Vereinigung und Mengendifferenz verwendet werden. Die Short-Circuit-Auswertung von and und or war im ursprünglichen Pascal ausdrücklich ausgeschlossen, weil Optimierungen die Auswertungsreihenfolge verändern können. Spätere Versionen erlaubten sie teilweise lokal oder global.
Die strikte Typentrennung verhindert unbeabsichtigte Umwandlungen. char ist nicht automatisch mit integer austauschbar; dafür dienen ord() und chr(). Der Ausdruck i := 7/2 führt bei einer Integer-Variablen i zu einer Fehlermeldung, weil / ein Ergebnis vom Typ real liefert. Spätere Dialekte führten explizite Typumwandlungen, sogenannte Typecasts, ein.
Standard-Pascal hatte keinen allgemeinen Datentyp string. Spätere Implementierungen verwendeten häufig char-Arrays, deren erstes Byte die Länge speicherte; dadurch ergab sich eine Begrenzung von 255 Zeichen. Extended Pascal definiert Strings als Scheme-Typen, beispielsweise string(10240), wobei die Kapazität angegeben wird. Im Unterschied zu C sind Pascal-Zeichenketten nicht NUL-terminiert.
Compiler, Standards und Verbreitung
Pascal-Compiler sind überwiegend Single-Pass-Compiler: Die Quelle wird nur einmal gelesen und analysiert. Das war wegen der geringen Rechnergeschwindigkeit Anfang der 1970er Jahre ein wichtiger Vorteil. Der erste Compiler entstand auf der CDC Cyber 6000 der ETH Zürich; daraus wurde Pascal 6000, die erste operative Compiler-Version der Sprache.
Der P4, der Portable Pascal Compiler von Urs Ammann, Kesav Nori und Christian Jacobi, erzeugte die plattformunabhängige Zwischensprache P-Code. Diese wurde von einer virtuellen Maschine interpretiert. Auf P4 beruhende Compiler führten unter anderem zu UCSD Pascal, das auf vielen Systemen wie Apple II und Texas Instruments TI-99/4A verbreitet war und erheblich zur Verbreitung von Pascal in den Vereinigten Staaten und später in Europa beitrug. Die Quelltexte von Version II.0 wurden im Mai 2006 freigegeben.
Wirth veröffentlichte 1971 eine 28 Seiten lange Beschreibung, 1973 eine überarbeitete 54 Seiten lange Spezifikation. Der gemeinsam mit Kathleen Jensen verfasste Bericht von 1974 beschrieb das sogenannte Standard Pascal. Heute beziehen sich drei Standards auf Pascal: Standard Pascal nach ANSI/IEEE770X3.97-1993 beziehungsweise ISO 7185:1990, Extended Pascal nach ANSI/IEEE770X3.160-1989 beziehungsweise ISO/IEC 10206:1991 sowie ein Entwurf zu objektorientierten Erweiterungen.
Nur wenige Compiler sind vollständig standardkompatibel. Selbst Delphi und Free Pascal enthalten nicht alle Elemente von Standard Pascal, während Extended Pascal von kaum einem Compiler vollständig unterstützt wird. Prospero Pascal gilt als vollständig kompatibel zu Extended Pascal; GNU Pascal strebt diese Kompatibilität an. Das erklärt, warum Pascal trotz klarer Sprachregeln in unterschiedlichen Dialekten auftritt.
In den 1970er und 1980er Jahren wurde Pascal auf Plattformen wie Apple II, Apple III, Apple Lisa, Commodore-Systemen, Z-80-Maschinen und IBM-PCs bedeutend. UCSD Pascal und Turbo Pascal trugen wesentlich dazu bei. In den 1990er Jahren näherten sich die Varianten im Wesentlichen den beiden Gruppen ISO-Pascal und Borland-ähnliches Pascal an. Free Pascal kann mit Modus-Direktiven verschiedene Dialekte unterstützen.
Implementierungen, Geschichte und Weiterentwicklungen
Im professionellen und kommerziellen Bereich verbreiteten sich besonders Borland Turbo Pascal, Borland Pascal und Delphi. Diese Produkte erweiterten den ursprünglichen Sprachstandard stark; mit Version 5.5 wurde Objektorientierung eingeführt. Freie Implementierungen sind unter anderem UCSD Pascal, Free Pascal und GNU Pascal. Free Pascal steht unter der GNU Lesser General Public License und soll einen freien 32/64-Bit-Compiler bereitstellen, der zu Turbo Pascal und Delphi kompatibel ist. GNU Pascal war als Frontend für die GNU Compiler Collection konzipiert, wird aber nicht mehr weiterentwickelt. Virtual Pascal, eine Borland-kompatible Implementierung, wird seit 2005 nicht mehr weiterentwickelt.
Als Entwicklungsumgebung für Free Pascal dient Lazarus. Sie ist Delphi-ähnlich, unterstützt verschiedene Betriebssysteme und Cross-Compiling. Weitere im Artikel genannte Entwicklungsumgebungen sind unter anderem Delphi, Dev-Pascal, Turbo Pascal, QuickPascal sowie historische Systeme für Apple II, Commodore 128 und andere Heimcomputer. Turbo Pascal war die kommerziell erfolgreichste Pascal-IDE für MS-DOS.
Pascal wurde nach Blaise Pascal benannt. Niklaus Wirth begann die Entwicklung 1968 an der ETH Zürich und stellte die Sprache im Laufe des Jahres 1969 fertig. Der erste Compiler wurde etwa ein Jahr später entwickelt und 1970 auf Computern der CDC-6000-Serie eingesetzt. Pascal sollte eine geeignete Unterrichtssprache sein, zugleich aber zuverlässige und effiziente große Programme sowie Anwendungen in Wirtschaft, Forschung, Compiler- und Betriebssystementwicklung ermöglichen.
Apple verwendete Pascal bei der Entwicklung des Macintosh-Betriebssystems und seiner Anwendungen. Eine von Apple entwickelte Object-Pascal-Variante, aus Clascal hervorgegangen, wurde für MacApp benötigt und 1986 fertiggestellt. Mit dem Wechsel von Motorola-68K- zu IBM-PowerPC-Prozessoren beendete Apple 1994 den Schwerpunkt auf Object Pascal. Aus Gründen der Rückwärtskompatibilität blieben Betriebssystemaufrufe bis Mac OS 9.2.2, veröffentlicht im Dezember 2001, an Pascal-Konventionen angelehnt.
Zu den Weiterentwicklungen und verwandten Varianten gehören Pascal-XSC, Modula-2, Concurrent Pascal, Oberon und Oberon-2, Component Pascal, Delphi beziehungsweise Object Pascal, Free Pascal, Pascal Script, StatPascal, PocketStudio, RemObjects Chrome beziehungsweise Oxygene und HP PPL.
Kritik und Grenzen
Standard-Pascal war als Lehrsprache konzipiert und hatte deshalb Einschränkungen für kommerzielle Anwendungen. Die Dateiverarbeitung war wenig leistungsfähig, die Laufzeitbibliothek klein, und Zeichenketten konnten nur umständlich über packed array direkt im Code verwendet werden. Kommerzielle Implementierungen entwickelten eigene Lösungen. Dadurch entstanden zunächst viele Pascal-Dialekte und Kompatibilitätsprobleme. Die Dominanz von Borlands Turbo-Pascal-Produkten verringerte diese Unterschiede später weitgehend.
Außerdem sah das ursprüngliche Pascal keine Modularisierung durch getrennte Kompilierung vor. Diese Schwäche wurde in Modula-2 weiterentwickelt. Plattformabhängige Lösungen waren unter anderem die Units von Turbo Pascal, die später von Free Pascal und Delphi übernommen wurden, sowie Module in ANSI/ISO Extended Pascal.
Die starken Typregeln und die Trennung von Programm, Funktion und Prozedur erhöhen zwar die Prüfbarkeit, können aber zusätzliche ausdrückliche Umwandlungen oder Deklarationen erforderlich machen. Auch die Unterschiede zwischen Standard-Pascal, Extended Pascal und den verbreiteten Borland-Dialekten begrenzen die vollständige Austauschbarkeit von Programmen.
Lernvideos zu Pascal (Programmiersprache)
6:35
Pascalsches Dreieck, Abzählen von Möglichkeiten, Binomialkoeffizient | Mathe by Daniel Jung
Mathe by Daniel Jung · 309.020 Aufrufe
4:56
Pascalsches Dreieck - Klammern ausmultiplizieren
Mathe - simpleclub · 196.357 Aufrufe
10:46
Hohe Potenzen auflösen – PASCALSCHES DREIECK, Klammer hoch 4, Summe, binomische Formeln
MathemaTrick · 100.229 Aufrufe
10:11
Das ungelöste Rätsel im Pascalschen Dreieck
Entwurzler · 58.704 Aufrufe