Pascal (Programmiersprache)
aus Wikipedia, der freien Enzyklopädie
Pascal | |
---|---|
{{{Logo}}} |
|
Basisdaten | |
Paradigmen: | imperativ, strukturiert |
Erscheinungsjahr: | 1970 |
Designer: | |
Entwickler: | Niklaus Wirth |
Aktuelle Version: | () |
Typisierung: | |
wichtige Implementierungen: | |
Dialekte: | UCSD-Pascal, Borland Turbo Pascal |
Einflüsse: | ALGOL |
Beeinflusste: | Modula-2, Ada, Delphi, Chrome |
Betriebssystem: | |
Lizenz: | |
Website: |
Pascal ist eine Programmiersprache, die 1968 bis 1972 von dem Schweizer Informatiker Niklaus Wirth entwickelt wurde. Sie ist nach Blaise Pascal benannt.
Inhaltsverzeichnis |
[Bearbeiten] Allgemeines zur Sprache
Pascal ist eine Weiterentwicklung von ALGOL.
Das wichtigste Konstruktionsprinzip war, die Sprache so einfach und strukturiert wie möglich zu gestalten - die Sprache wurde von Niklaus Wirth ausdrücklich und speziell als Lehrsprache entwickelt.
Gleichzeitig sollte strukturierte Programmierung möglich sein. Alle Variablen müssen vor der Benutzung deklariert werden. Der erste Pascal-Compiler selbst entstand auf der CDC Cyber 6000 der ETH Zürich. Daraus entstand dann Pascal 6000, welches als erste operative Version eines Compilers der Sprache gesehen werden kann.
Ein zweiter Pascal-Compiler – der P4 „Portable Pascal Compiler“ von Urs Ammann, Kesav Nori und Christian Jacobi – stammte ebenfalls von der ETH Zürich. Der P4 erzeugte eine plattformunabhängige, an Assemblersprache erinnernde Zwischensprache, den P-Code, der durch die sogenannte virtuelle Maschine (ein Programm) interpretiert wird. Später entstanden dann Compiler, die auf dem P4 basierten. Die bekannteste Version wurde unter dem Namen UCSD Pascal bekannt, das auf vielen Systemen implementiert wurde, u. a. auf Apple II und Texas Instruments TI-99/4A. Im Mai 2006 wurden die Sourcen von UCSD-Pascal freigegeben.
Bei den meisten Pascal-Compilern handelte es sich um so genannte Ein-Pass-Compiler, d. h., der Compiler muss die Quelle nur ein einziges Mal lesen und analysieren. Das Design der Sprache war so gehalten, um genau das zu ermöglichen. Bei der damaligen Geschwindigkeit der Rechner war dies ein großer Vorteil.
Pascal zeichnet sich durch eine strikte und einfach verständliche Syntax aus, sowie dadurch, dass es keine kontextabhängigen Interpretationen des Codes gibt. Somit erlaubt Pascal im Vergleich zu Sprachen wie C und Fortran eine gute Lesbarkeit und verglichen mit Fortran auch eine bessere Unterstützung von strukturierter Programmierung.
Ein wichtiges Konzept, das Wirth zur Anwendung brachte, ist die starke Typisierung (strong typing): Variablen sind bereits zur Übersetzungszeit einem bestimmten Datentyp zugeordnet und dieser kann nicht nachträglich verändert werden. Typenstrenge bedeutet, dass Wertzuweisungen ausschließlich unter Variablen gleichen Typs erlaubt sind. In Pascal gibt es von diesem strikten Zwang lediglich zwei Ausnahmen:
- Wertzuweisungen der Form [Variable vom Typ
real
]:=
[Wert vom Typinteger
] - Wertzuweisungen von eingeschränkten Wertebereichen eines ordinalen Typs. Beispiel:
type int10 = 1 .. 10
; Werte dieses Typs konnten dann Integervariablen zugewiesen werden.
Wegen der guten Prüfbarkeit des Codes und der klaren Zuordnung der Variablen wird Pascal auch heute noch für kommerzielle Anwendungen z. B. in sicherheitsrelevanten Bereichen verwendet. So ist die erst 2005 eingeführt Betriebsleittechnik IV der Transrapid-Versuchsanlage Emsland in Pascal programmiert.
[Bearbeiten] Datentypen
Pascal kennt als einfache Datentypen char
, boolean
, integer
, real
und ordinale Datentypen. In Dialekten wurden die einfachen numerischen Datentypen teilweise erweitert, um passende Wortlängen abzudecken. Strukturierte Datentypen sind array
, record
, set
(Mengen) und file
. Der Datentyp text
entspricht der Definition file text = file of char
;
[Bearbeiten] Programmstrukturen
Charakteristisch für Pascal ist das Konzept der Verschachtelung von Prozeduren und Funktionen. Im Deklarationsteil einer Prozedur bzw. Funktion können andere Prozeduren und Funktionen auftauchen. Dabei gibt es klar verständliche Prinzipien über die Sichtbarkeit von Deklarationen in übergeordneten Funktionen und Prozeduren.
[Bearbeiten] Kontrollstrukturen
Kontrollstrukturen sind if
then
else
, case
(in Dialekten mit einem else
bzw. otherwise
versehen), for
, repeat
, while
und goto
. Da Pascal der strukturierten Programmierung dient, soll das goto
lediglich strukturerhöhend eingesetzt werden. Pascal unterstützt in seiner Urform keine Anweisungen, mit denen Prozeduren oder Schleifen hart verlassen werden können. Als strukturerhöhendes goto
werden Sprünge ans Ende von Prozeduren oder unmittelbar hinter Schleifendenden akzeptiert, sofern sich dadurch umfangreiche Konstruktionen schlecht lesbarer if
-Anweisungen oder undurchschaubarer boolescher Ausdrucke vermeiden lassen. Viele Pascal-Compiler erlauben keine goto
, die zu instabilen Systemzuständen führen, z. B. der Sprung in den Anweisungsblock einer Schleife oder eines if
.
[Bearbeiten] Nachteile
Da die Sprache ursprünglich nur als Lehrsprache konzipiert war, wies das Standard Pascal (wie es N. Wirth definierte) einige Mängel auf, die den kommerziellen Einsatz schwieriger machten: Das File-I/O-Konzept war schwach, die Laufzeitbibliothek eher rudimentär (im Vergleich zur C-Bibliothek), und Zeichenketten konnten nur über seltsame Umwege (packed array) direkt im Code verwendet werden. Das führte dazu, dass praktisch jede kommerzielle Implementierung das auszumerzen versuchte und damit einen neuen Pascal-Dialekt produzierte – und diese Dialekte waren nur sehr bedingt zueinander kompatibel.
Ein anderer wesentlicher Nachteil der ursprünglichen Implementierung war, dass eine Modularisierung im Sinne getrennter Compilierung nicht vorgesehen war – ein Manko, das mit der Weiterentwicklung Modula-2 behoben wurde. Plattformspezifische Implementierungen sahen für diese Lücke ebenfalls immer eine Lösung vor (z. B. die Units von Turbo-Pascal, oder später die Module in ANSI/ISO Extended Pascal).
Heute findet Turbo Pascal auf dem PC selten Anwendung. Neuere Pascalversionen sind besonders in sicherheitskritischen Anwendungsbereichen verbreitet. Eine pascalähnliche Notation wird von jeher in der Informatik und Mathematik zur Darstellung von Algorithmen benutzt. Dies, und frei verfügbare portierbare Pascalcompiler (Free Pascal, GNU Pascal), erklärt, warum im aktuellen Informatikunterricht teilweise Pascal eingesetzt wird.
[Bearbeiten] Unterschiede zu C
- keine Nullterminierten Strings – Standard Pascal hatte zwar String-Literale aber keinen Typ string (s. oben). In einigen späteren Versionen werden Strings nicht durch ein Null-Byte terminiert, sondern es wird die Länge des Strings im ersten Character
String[0]
) gespeichert und über die Funktionlength(<Bezeichner>)
abgefragt. Somit beginnt das erste Nutzzeichen beiString[1]
. Da in vielen Implementierungen (z. B. Turbo Pascal) für die Speicherung der Stringlänge nur ein Byte vorgesehen war, ist die Länge auf 255 Zeichen begrenzt. Diese Einschränkung galt als die markanteste überhaupt. Im Extended Pascal Standard wurden Strings als Scheme-Typ definiert. Auch hier muss die Kapazität angegeben werden, sie wird aber in runde Klammern geschrieben und es gibt kein formales Limit:String(10240)
. - strikte Trennung zwischen Funktionen und Prozeduren – Pascal trennt strikt zwischen einer Funktion (Rückgabewert) und einer Prozedur (kein Rückgabewert, Typ
void
in C). Eine Funktion darf nicht als Prozedur aufgerufen werden – d. h. der Rückgabewert muss stets entgegen genommen werden. - parameterlose Funktionen/Prozeduren – Verfügt eine Prozedur/Funktion über keine Parameter, so darf beim Aufruf dieser keine Leerklammer
()
gesetzt werden. - Deklarationen – Variablen und Typdefinitionen dürfen nicht innerhalb der Implementierung einer Funktion/Prozedur (zwischen
BEGIN
undEND
) deklariert werden – dies muss in einem speziellen Block im Definitionsteil geschehen. Anders als C erlaubt Pascal die Deklarationen von lokalen Funktionen/Prozeduren. - Namen – In Pascal ist die Groß-/Kleinschreibung bei Namen (Typen, Konstanten, Variablen, Funktionen/Prozeduren) irrelevant.
- Blockmarkierungen – Pascal verwendet zur Kennzeichnung von Blöcken die Schlüsselwörter
BEGIN
undEND
statt{
und}
wie in C. - Semikolon – Das Semikolon wird nicht wie in C als Befehls-Abschluss interpretiert, sondern als Trennzeichen zwischen Bezeichnern. Vor einem
END
oderUNTIL
kann es somit weg gelassen werden. Vor einemELSE
darf es i. d. R. gar nicht stehen, da sonst derIF
-Zweig als abgeschlossen angesehen werden würde. Ein Fall, wo es vor dem ELSE steht (und stehen muss), ist am Ende einer CASE-Auflistung. - Delimiter – Für String-Literale und Character-Literale wird das selbe Begrenzungszeichen (Delimiter), nämlich der Apostroph verwendet
- Zuweisungen – Zuweisungen an Variablen werden durch die Sequenz
:=
definiert, das Gleichheitszeichen allein dient dem Vergleich. - Operatoren – Pascal verwendet die Operatoren
and
,or
,not
,div
(nur für Integer, bei Real ist es/
),mod
und<>
anstatt der C Operatoren&&
,||
,!
,/
,%
und!=
. Die „Shortcut“-Funktionalität von&&
und||
in C (wenn beimand
der linke Teil FALSE ist, wird der rechte nicht mehr ausgewertet) schloss N. Wirth explizit aus (Die Reihenfolge der Auswertung von Expressions obliegt dem Compiler). In Standard Pascal gibt es keine Bitoperationen für INTEGER (wie&
,|
,^
und~
von C), aber stattdessen den Typset of
(mit den Operatoren*
,+
und-
für Durchschnitt, Vereinigung und Mengendifferenz). - strenge Typentrennung – u. a. ist
CHAR
nicht austauschbar mitINTEGER
, die Umwandlung muss mit den FunktionenORD()
undCHR()
durchgeführt werden. Explizite Typumwandlungen, sog. type casts wurden erst mit Turbo Pascal eingeführt. In Standard Pascal musste dafür ein Umweg über Variantenrecords (union
in C) genommen werden.
[Bearbeiten] Standards
Es gibt drei Standards, die sich auf Pascal beziehen:
- Standard Pascal: ANSI/IEEE770X3.97-1993 oder ISO 7185:1990
- Extended Pascal: ANSI/IEEE770X3.160-1989 oder ISO/IEC 10206:1991
- sowie einen Entwurf zu „Object-Oriented Extensions to Pascal“
Allerdings sind nur die wenigsten Compiler zu diesen Standards kompatibel. Diese Tatsache verleitete Scott A. Moore zu der bissigen Bemerkung „Pascal is, unfortunately, very much a‚ great improvement on its successors“ („Pascal ist leider so ziemlich eine große Verbesserung seiner Nachfolger“ – damals bereits ein geflügelter Satz, der schon früher über ALGOL oft gesagt worden war).
Selbst großen Compilern wie Delphi oder FreePascal fehlen bis heute einige Elemente aus Standard Pascal, während Extended Pascal von kaum einem unterstützt wird. Lediglich Prospero Pascal ist vollständig kompatibel zu Extended Pascal, während auch GNU Pascal vollständige Kompatibilität anstrebt.
[Bearbeiten] Implementierungen (Compiler, Interpreter und IDEs)
Pascal hatte von Anfang an im universitären Bereich sehr großen Erfolg, was sich u. a. auch in der Programmiersprache Ada niederschlug, die sehr stark an der Syntax von Pascal angelehnt ist.
Trotz seiner Einschränkungen erlebte Pascal eine Blütezeit, als die Firma Borland eine Version mit dem Namen Turbo Pascal publizierte, in der die ursprünglich nur zu Lehrzwecken geschaffene Sprache so stark erweitert wurde, dass viele weit verbreitete Programme damit entwickelt werden konnten. U. a. wurde dabei auch in der Version 5.5 die Objektorientierung in Pascal eingeführt.
Heute gibt es einige Freeware-Implementationen:
[Bearbeiten] Virtual Pascal
Diese inzwischen freie Implementierung eines Borland-kompatiblen Pascal Compilers für OS/2 wurde auch auf ander Plattformen portiert, wird aber seit 2005 nicht mehr weiterentwickelt.
[Bearbeiten] Free Pascal
Ein unter der GNU Lesser General Public License stehendes Open Source-Projekt, das sich zum Ziel gesetzt hat, einen freien Compiler zu erzeugen, der 100%ig kompatibel zu Turbo Pascal und Delphi sein soll.
[Bearbeiten] GNU Pascal
Ein Pascal Compiler, der als Frontend zur Gnu Compiler Collection konzipiert ist. Es ist kein Bestandteil der GCC selbst, ist aber durch die Verwendung der GCC plattformunabhängig. Die entwicklung von GPC hat sich im letzten Jahr verzoegert.
[Bearbeiten] Dev-Pascal
Eine unter Windows laufende IDE, die auf Free-Pascal oder GNU-Pascal als Compiler aufsetzen kann. Wird nicht mehr weiterentwickelt.
[Bearbeiten] Lazarus
Eine Entwicklungsumgebung für Free Pascal, die auch verschiedene Komponenten zur Verfügung stellt. Die IDE ist sehr Delphi-ähnlich gestaltet und verwendet unter Unix das GTK+ als Grafik-Toolkit, unter Windows (win32/win64/wince) setzt es auf der nativen API auf.
[Bearbeiten] Hallo Welt
Das Beispielprogramm Hallo Welt sieht in Pascal folgendermaßen aus:
program Hallo (input, output); begin writeln ('Hallo Welt'); readln end.
Detail am Rande: In manchen alten Beispielen findet man ein READLN
- nach dem WRITELN
-Befehl. Das war nur notwendig, weil die I/O-Architektur der CDC-Cyber 6000, auf der Wirth den ersten Pascal-Compiler entwickelte, das benötigte, um die internen Buffer zu leeren – sonst wäre im interaktiven Betrieb kein Output zu sehen gewesen. IDEs konnte man mit diesem READLN zwingen, am Ende der Programmausführung nicht sofort wieder in den Editor-Modus umzuschalten, was den Output bei manchen IDEs (z. B. Turbo-Pascal) sonst hätte verschwinden lassen. Im Batch-Betrieb war das ohnehin nie notwendig.
[Bearbeiten] Weiterentwicklungen
- Modula, Modula-2
- Oberon, Oberon-2
- Ada
- Component Pascal
- Delphi
- Kylix
- PocketStudio
- FreePascal
[Bearbeiten] Literatur
- Kathleen Jensen, Nicolaus Wirth: Pascal User Manual and Report. ISO Pascal Standard. Broschiert, 266 Seiten, Springer-Verlag, 4th ed. 1991, ISBN 3-540-97649-3. (Nicht für Anfänger der Programmierung geeignet!)
- Steven Pemberton and Martin Daniels, Ellis Horwood: Pascal Implementation: The P4 Compiler and Interpreter, ISBN 0-13-653-0311
[Bearbeiten] Weblinks
- Eine ausführliche Beschreibung der Pascal Operatoren
- www.moorecad.com/standardpascal/
- www.moorecad.com/standardpascal/standards.html
- Borland Delphi
- Pascal-S
- GNU Pascal
Wikibooks: GNU-Pascal in Beispielen – Lern- und Lehrmaterialien |
- Free Pascal
- www.tutorials.at – Eine Pascal-Einführung
- UCSD-Pascal Source-Code