Pascal (Programmiersprache) – Wikipedia Pascal (Programmiersprache)
Total Page:16
File Type:pdf, Size:1020Kb
10.12.12 Pascal (Programmiersprache) – Wikipedia Pascal (Programmiersprache) aus Wikipedia, der freien Enzyklopädie Die Programmiersprache Pascal (benannt nach dem Mathematiker Blaise Pascal) wurde von Niklaus Wirth Pascal an der ETH Zürich im Jahr 1972 als Lehrsprache Paradigmen: imperativ, strukturiert eingeführt, um die strukturierte Programmierung zu lehren. Erscheinungsjahr: 1972 Entwickler: Niklaus Wirth Typisierung: stark, statisch Inhaltsverzeichnis Dialekte: UCSD-Pascal, Borland Turbo Pascal 1 Allgemeines zur Sprache Beeinflusst von: ALGOL 1.1 Datentypen Beeinflusste: Modula-2, Ada, Oberon, 1.2 Programmstrukturen Object Pascal, Web 1.3 Steuerkonstrukte 1.4 Nachteile 1.5 Compiler 2 Unterschiede zu C 3 Standards 4 Pascal und Mac OS 5 Implementierungen (Compiler, Interpreter und IDEs) 6 Hallo Welt 7 Weiterentwicklungen Niklaus Wirth, der Entwickler von Pascal 8 Einzelnachweise 9 Literatur 10 Weblinks Allgemeines zur Sprache Pascal ist eine Weiterentwicklung von Algol 60. Als Lehrsprache wurde es so einfach und strukturiert wie möglich gestaltet. Seine große Verbreitung in der professionellen Programmierung fand es als Borland/Turbo Pascal (später Object Pascal) – gegenüber dem Ur-Pascal wesentlich erweiterte und verbesserte Versionen. Pascal zeichnet sich durch eine strikte und einfach verständliche Syntax sowie durch den Verzicht auf kontextabhängige Interpretationen des Codes aus. Somit erlaubt Pascal im Vergleich zu Sprachen wie C und Fortran eine gute Lesbarkeit und, verglichen mit den damaligen Versionen von Fortran, auch eine bessere Unterstützung von strukturierter Programmierung. Ein wichtiges Konzept, das Wirth zur Anwendung brachte, ist die starke Typisierung (engl. „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 wenige Ausnahmen: Wertzuweisungen der Form [Variable vom Typ real] := [Wert vom Typ integer]. de.wikipedia.org/wiki/Pascal_(Programmiersprache) 1/7 10.12.12 Pascal (Programmiersprache) – Wikipedia In Extended-Pascal Wertzuweisungen von ganzzahligen oder reellen Zahlen an Variablen vom Type Complex. Wertzuweisungen von eingeschränkten Wertebereichen eines ordinalen Typs. Beispiel: type int10 = 1 .. 10; Werte dieses Typs können dann Integervariablen zugewiesen werden. Wertzuweisungen von Mengen eines eingeschränkten Wertebereiches eines ordinalen Typs. Beispiel: type set10 = set of 1 .. 10; set20 = set of 1 .. 20; Werte des Typs set10 können dann Variablen des Typs set20 zugewiesen werden. Wertzuweisungen auf eingeschränkte Wertebereiche eines ordinalen Typs oder einer Menge. In diesem Fall rufen Werte bzw. Mengen-Elemente außerhalb des Zielbereichs einen Laufzeitfehler hervor. Wertzuweisungen zwischen unterschiedlichen String-Typen, inkl. Char, Zeichen-Arrays gemäß Standard- Pascal und den verschiedenen String-Typen in Extended-Pascal, Borland Pascal usw. Sofern die Länge des Wertes nicht innerhalb der Kapazität des Ziels liegt, ergibt sich auch hier ein Laufzeitfehler. Heute findet Pascal im universitären Bereich (Entwicklung/Ausbildung) und in sicherheitskritischen Bereichen (z. B. Verkehrstechnik, Energieversorgung, Medizintechnik, Raumfahrt, Militär, teilweise im Banken- und Versicherungswesen) Anwendung. Dies beruht hauptsächlich auf der guten Prüfbarkeit und Wartbarkeit des Codes und der klaren Zuordnung der Variablen. So ist die 2005 eingeführte Betriebsleittechnik IV der Transrapid-Versuchsanlage Emsland in Pascal programmiert. Eine pascalähnliche Notation wird von jeher in der Informatik und Mathematik zur Darstellung von Algorithmen benutzt.[1] Aus didaktischen Gründen, es seien hier die Typstrenge, hohe Fehlersicherheit und frei verfügbare portierbare Pascalcompiler (Free Pascal, GNU Pascal) genannt, wird im aktuellen Informatikunterricht Pascal ebenfalls häufig eingesetzt.[2] Im Hobby-Bereich erlangte Pascal zeitweilig eine sehr weite Verbreitung, die jedoch mit neueren Microsoft-Windows-Versionen wieder zurückging.[3] Datentypen Pascal kennt als einfache Datentypen char, boolean, integer, real und ordinale Datentypen. In einigen Dialekten wurden die einfachen numerischen Datentypen erweitert, um passende Wortlängen abzudecken. Strukturierte Datentypen sind array, record, set (Mengen) und file. Der Datentyp text entspricht der Definition type text = file of char; Programmstrukturen Charakteristisch für Pascal ist das Konzept der Verschachtelung von Prozeduren und Funktionen. Im Deklarationsteil einer Prozedur oder 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. Steuerkonstrukte Steuerkonstrukte sind if then else, case (in Dialekten mit einem else oder 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 Schleifenenden 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. de.wikipedia.org/wiki/Pascal_(Programmiersprache) 2/7 10.12.12 Pascal (Programmiersprache) – Wikipedia Nachteile Da die Sprache als Lehrsprache konzipiert war, wies das Standard-Pascal einige Merkmale auf, die den kommerziellen Einsatz erschwerten: Das Konzept für Dateizugriffe („file I/O“) war nicht mächtig, die Laufzeitbibliothek wenig umfangreich, und Zeichenketten konnten nur über Umwege (packed array) direkt im Code verwendet werden. Das führte dazu, dass praktisch jede kommerzielle Implementierung hierzu eigene Lösungen anbot, was zunächst (ähnlich wie die Diversifizierung bei C) zu eigenen Pascal-Dialekten und damit zu Kompatibilitätsproblemen führte. Mit der monopolartigen Dominanz der Borland Turbo-Pascal-Produkte verschwanden diese Unterschiede fast vollständig. Ein anderer wesentlicher Nachteil war, dass eine Modularisierung im Sinne getrennter Compilierung nicht vorgesehen war – was mit der Weiterentwicklung Modula-2 geändert wurde. Plattformspezifische Implementierungen sahen dafür eigene Lösungen vor (z. B. die Units von Turbo-Pascal, oder später die Module in ANSI/ISO Extended Pascal). Compiler Der erste Pascal-Compiler selbst entstand auf der CDC Cyber 6000 der ETH Zürich. Daraus entstand dann Pascal 6000, das 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, als Assemblersprache ausgelegte Zwischensprache, den P-Code, der durch eine sogenannte virtuelle Maschine (ein Programm) interpretiert wird. Später entstanden dann Compiler, die auf dem P4 basierten. Die verbreitetste 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 und wesentlich zur Verbreitung der Sprache sowohl (zuerst) in den Vereinigten Staaten, später auch in Europa beitrug. Im Mai 2006 wurden die Quelltexte von UCSD Pascal freigegeben. Bei den meisten Pascal-Compilern handelte es sich um Single-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 geringen Geschwindigkeit der Rechner war dies ein großer Vorteil. Unterschiede zu C Sehr hohe Prozesssicherheit – Da Pascal sowie der Quasi-Standard Borland/Turbo-Pascal eine strikte Trennung unterschiedlicher Typen vorsehen und die Zuweisungskompatibilität von Ausdrücken beachten, kommen „versteckte/automatische“ Typumwandlungen, anders als in C, praktisch nicht vor. Insbesondere bei der Übergabe von Daten (z. B. aus externen Dateien, aber auch innerhalb des Programms) an Funktionen oder Prozeduren kann der Compiler schon beim Compilieren die Korrektheit der Typen kontrollieren (gleiches gilt für Array-Grenzen, Integer-Überlauf, Wrap-Around-Fehler, Stack- Überlauf u. ä., die in anderen Programmiersprachen wie z. B. C++ oder C häufig subtile und schwer zu lokalisierende (Laufzeit-)Fehler erzeugen). keine nullterminierten Zeichenketten – Standard Pascal hatte zwar Zeichenketten-Literale, aber keinen Typ string (s. oben). In einigen späteren Versionen werden Zeichenketten nicht durch ein Null- Byte terminiert, sondern es wird die Länge im ersten Byte String[0]) gespeichert und über die Funktion length(<Bezeichner>) abgefragt. Somit beginnt das erste Nutzzeichen bei String[1]. Dies hatte eine sehr schnelle Verarbeitung (deutlich schneller als in Borland/GNU C++ oder C) zur Folge, aber auch den Nachteil, dass Zeichenketten nicht beliebig lang sein konnten. In vielen Implementierungen (z. B. Turbo Pascal) war für die Speicherung der Zeichenkettenlänge ein Byte de.wikipedia.org/wiki/Pascal_(Programmiersprache) 3/7 10.12.12 Pascal (Programmiersprache) – Wikipedia vorgesehen, so dass die Länge auf 255 Zeichen