Pascal (programmeertaal)
Van Wikipedia
Pascal is een programmeertaal die in 1970 ontwikkeld werd door Niklaus Wirth, en die is genoemd naar de Franse wiskundige Blaise Pascal. In deze taal wordt de nadruk gelegd op eenvoud. Daarmee vormde deze taal een verbetering van de enkele jaren eerder ontwikkelde taal Algol-60 en een alternatief voor de te ingewikkelde opvolger daarvan Algol-68. De nadruk wordt gelegd op gestructureerd programmeren en datastructuren.
Het was ook de bedoeling dat Pascalprogramma's op een minicomputer konden worden gecompileerd en uitgevoerd. In feite had Wirth al een soort personal computer voor ogen. In zijn opzet om een eenvoudige, goed gestructureerde bruikbare taal te ontwerpen is Wirth uitstekend geslaagd; niettemin is Pascal voor praktische toepassingen nooit zo populair geworden als de programmeertaal C van Brian Kernighan en Dennis Ritchie, die dezelfde structuren biedt als Pascal, maar daarnaast ook meer sluipweggetjes om ze te kunnen omzeilen en mogelijkheden om optimalisaties voor de te gebruiken computer uit te kunnen voeren, zaken die Wirth juist wilde vermijden maar waar programmeurs wel behoefte aan hadden.
In de jaren 1970 sloeg Pascal nog niet zo aan. Enerzijds waren de minicomputers nog te duur om stand-alone te gebruiken, anderzijds bleven mainframe gebruikers aan talen als Algol-60 en Fortran vasthouden. Dat veranderde in de jaren 1980, toen compilers voor verschillende varianten voor personal computers beschikbaar kwamen. Pascal werd toen de meest gebruikte taal voor het programmeeronderwijs aan universiteiten en hogescholen. Na het gestructureerd programmeren, waarvan Edsger Dijkstra de grote voorvechter was, werd de volgende grote ontwikkeling het object-georiënteerd programmeren; zowel van C als van Pascal zijn later object-georiënteerde varianten gemaakt.
Inhoud |
[bewerk] Basisgrammatica
Een veel gebruikt voorbeeld om een indruk te krijgen van de grammatica van een taal is het programma "Hello world".
program helloworld(output); begin writeln('Hello world!'); end.
Alle Pascalprogramma's starten met het sleutelwoord "program". Een blok code wordt aangegeven met de sleutelwoorden "begin" en "end". Opdrachten worden gescheiden door een puntkomma, en een punt geeft het einde van een programma (of unit) aan. Sommige compilers staan toe de "program"-opdracht weg te laten.
Pascal is, in zijn oorspronkelijke vorm, een puur procedurele taal, met de standaardverzameling constructies als if, while, for enz.
[bewerk] Verschillen met Algol-60
Pascal is duidelijk gebaseerd op Algol-60 en het is dus zinvol de verschillen met die taal en de redenen voor die verschillen te beschrijven. In de meeste gevallen zijn de vernieuwingen in Pascal ook in latere talen overgenomen. Er zijn drie soorten verschillen:
- Syntactische verschillen
- Beperkingen
- Uitbreidingen
[bewerk] Syntactische verschillen
- De basissymbolen zijn gereserveerde woorden. Een variabele kan dus niet de naam begin of if hebben.
- Declaraties staan vóór de bijbehorende begin.
- De parameters van procedures worden op een andere manier gedefinieerd
- Commentaar staat tussen accolades en niet achter comment
- Een functie wordt als function gedefinieerd en niet als real procedure of integer procedure
[bewerk] Beperkingen
- Declaraties komen alleen voor aan het begin van programma en procedures en niet in blokken die midden in het programma kunnen staan. Dit dwingt de programmeur er toe het programma uit procedures en functies op te bouwen.
- De grenzen van arrays moeten constanten zijn. Dit vereenvoudigt de implementatie.
- Formele parameters van procedures maken kunnen alleen by value en by reference aangeroepen worden. De call by name, het gebruik van procedures als parameter en het Jensen device vervallen. Dit vereenvoudigt de implementatie.
- De own variabale vervalt. Deze werd weinig gebruikt en was lastig te implementeren.
- De switch vervalt. De functie wordt overgenomen door de case opdracht
[bewerk] Uitbreidingen
- Constanten kunnen een naam krijgen. Daarmee wordt gedeeltelijkl voorzien in de behoefte aan arrays met variabele grenzen.
- De datatypes char, record, set en file zijn toegevoegd. Daarmee wordt het toepassingsgebied uitgebreid.
- Nieuwe datatypes kunnen in het programma gedefinieerd worden. Dit is vooral van belang bij het gebruik als parameter.
- Het datatype pointer is toegevoegd. Hiermee kunnen echt dynamische datastructuren als lijsten en bomen worden gedefinieerd. Van alle elementen uit Pascal hebben de pointers waarschijnlijk tot de meeste hoofdpijn bij studenten en docenten geleid.
- Met de case-opdracht kan een keuze uit verschillende mogelijkheden gemaakt worden.
[bewerk] Pascal en C
Pascal is rond dezelfde tijd ontwikkeld als C, en er zijn veel overeenkomsten tussen beide talen. Het oorspronkelijke Pascal en C zijn beide simpele procedurele talen waarin gestructureerd kan worden geprogrammeerd. Ze hebben voorzieningen voor dynamisch geheugenbeheer en pointermanipulatie. Uiterlijk echter zijn de talen totaal verschillend, waarbij C veel compacter, maar minder "leesbaar" is.
Een belangrijk verschil, dat de bron is van veel 'heilige oorlogen', is het gebruik in Pascal van := als toewijzigingsoperator, terwijl = voor vergelijkingen wordt gebruikt. Omdat = in de wiskunde voor beide doeleinden wordt gebruikt, gebruiken velen het kortere symbool wanneer het andere symbool (hetzij := in Pascal dan wel == in C) bedoeld wordt. De ontwerpers van C argumenteerden dat toewijzingen veel vaker voorkwamen dan vergelijkingen, en dat dus de toewijzing het kortste symbool verdiende. Aanhangers van Pascal brengen daar tegenin dat het per ongeluk uitvoeren van een vergelijking veel minder schadelijk is dan van een toewijzing, hetgeen zeker waar is als, zoals in C, het volkomen correct is een toewijzing midden in een if-opdracht uit te voeren. Moderne compilers maken de programmeur op dit soort zaken attent, waarmee de grond voor discussie grotendeels is komen te vervallen.
Dit debat is een illustratie van de verschillen die aan het ontwerp van beide talen ten grondslag lagen. Pascal was gedeeltelijk ontworpen als studietaal. Foutgevoelige constructies werden bewust vermeden en er werd veel zorg besteed aan het eenvoudig leesbaar maken van de code. De ontwerpers van C legden daarentegen de nadruk op kort-en-bondigheid.
Een ander belangrijk verschil is dat Pascal sterke typering heeft. Dit betekent dat alle variabelen vooraf als van een bepaald type gedefinieerd moeten zijn voordat zij gebruikt kunnen worden. Toewijzingen tussen niet-uitwisselbare typen zijn verboden, tenzij zij door een expliciete typecast geconverteerd worden. Dit voorkomt veelgemaakte fouten waar variabelen niet correct gebruikt worden omdat de programmeur niet in het oog had gehouden wat het type van de variabelen was. Er is ook geen noodzaak meer voor Hongaarse notatie, een gewoonte waarbij variabelenamen voorafgegaan worden door een letter die het type identificeert.
In tegenstelling tot C is het in Pascal mogelijk procedures te nesten. Oorspronkelijk had Pascal geen mechanismen voor gescheiden compilatie en de afhandeling van arrays van onbekende grootte; er zijn echter al tientallen jaren implementaties beschikbaar die deze functionaliteit wel bieden, vaak netter en beter geïmplementeerd dan in C.
[bewerk] Implementaties
Vroege implementaties (met name de UCSD p-system-compiler, welke gebaseerd was op de Zürich-P4-compiler, beide geschreven in Pascal zelf) vertaalden Pascal-code in een machine-onafhankelijke P-Code-representatie. Deze tussenvorm werd vervolgens geïnterpreteerd door een programma dat specifiek was voor een computerarchitectuur. Het gevolg was dat alleen deze compacte interpreter aan de verschillende architecturen aangepast diende te worden.
In de jaren '80 schreef Anders Hejlsberg de Blue Label Pascal-compiler voor de Nascom-2-computer. Hejlsberg ging later voor het bedrijf Borland werken en herschreef zijn compiler tot wat Turbo Pascal voor de IBM-PC zou worden. Deze nieuwe compiler lag voor 49 dollar in de winkel, veel minder dan de prijs die Hejlsberg oorspronkelijk vroeg voor de Blue Label-compiler.
De goedkope compiler van Borland heeft veel invloed gehad op de Pascalgemeenschap, die zich eind jaren '80 hoofdzakelijk op de IBM-PC begon te concentreren. Veel PC-hobbyisten zochten een gestructureerde programmeertaal die BASIC kon vervangen, en kwamen veelal bij Turbo Pascal terecht. Turbo Pascal vertaalde rechtstreeks naar de machinetaal van de Zilog Z80 of de Intel 8086, de enige architecturen die het ondersteunde, en was daardoor veel sneller dan geïnterpreteerde systemen.
Super Pascal was een variant die niet-numerieke labels, een return-opdracht en expressies als typenamen toevoegde.
In de jaren '90 werden compilers die flexibel op meerdere computerarchitecturen toegepast konden worden dominanter. Dit maakte het mogelijk Pascal direct naar machinetaal te vertalen en tegelijk eenvoudig aan andere hardware aan te passen.
Met de introductie van versie 5.5 voegde Borland object-georiënteerd programmeren aan Pascal toe. Later echter besloot Borland dat het uitvoeriger object-georiënteerde mogelijkheden wilde en begon opnieuw in Delphi, waarbij men de kladstandaard Object Pascal die door Apple was voorgesteld implementeerde. (Object Pascal is overigens nooit een formele standaard geworden.) In de eerste versies van Delphi werd de geïmplementeerde taal nog gewoon Object Pascal genoemd, maar in latere versies werd het hernoemd naar "programmeertaal Delphi". De belangrijkste wijzigingen met betrekking tot de oudere object-georiënteerde extensies waren een op referentie gebaseerd objectmodel, en virtuele constructors, destructors en eigenschappen. Er zijn verscheidene compilers die dit dialect implementeren: zie Ontwikkelomgeving Delphi. De Linux-versie van Delphi, en daarmee ook Pascal, is beschikbaar als Kylix.
[bewerk] Algemeen beschikbare compilers
Er zijn verscheidene Pascal-compilers algemeen beschikbaar:
- De P4-compiler, de basis voor veel in Pascal geïmplementeerde Pascal-compilers, inclusief het UCSD p-System.
- Free Pascal is geschreven in Pascal (zodat het zichzelf kan compileren), en mikt op het aanbieden van een gemakkelijke en krachtige compiler welke in staat is bestaande programma's te compileren, en heeft moderne aantrekkelijke functies om er nieuwe software in te schrijven. Wordt vrijelijk beschikbaar gesteld onder de GNU GPL-licentie. Het kan Turbo Pascal-code combineren met Delphi-code en ondersteunt veel platforms.
- Turbo Pascal was de dominante Pascal-compiler voor PC's gedurende de jaren '80 en begin jaren '90, vooral dankzij de krachtige taaluitbreidingen en snelle compilatie. Tegenwoordig zijn oudere versies van Turbo Pascal (tot en met 5.5) gratis te downloaden vanaf Borlands website (registratie verplicht).
- De GNU Pascal Compiler (GPC) is een aanvulling op de GNU Compiler Collection (GCC) en is geschreven in C. Hij wordt vrijelijk beschikbaar gesteld onder de GNU General Public License. De ondersteuning van Borland/Turbo Pascal is daarentegen aan de beperkte kant.
- Delphi is Borlands vlaggenschip-RAD-(Rapid Application Development)product. Het gebruikt de programmeertaal Delphi, afgeleid van Pascal, en dient om programma's voor het Windows-platform te schrijven. De meest recente versie kan ook compileren voor het .NET-platform.
- Kylix is Borlands nieuwste telg in de Pascal-familie. Het is een variant van Delphi met ondersteuning voor het besturingssysteem Linux en een verbeterde objectbibliotheek. De compiler en ontwikkelomgeving zijn tegenwoordig gratis te downloaden van de website van Borland. Delen van Kylix zouden oorspronkelijk open source worden, maar tot op heden is dit niet gebeurd.
- Lazarus, een open source-compiler, nog in ontwikkeling.
- Prospero Extended Pascal 32-bit Extended Pascal compiler en linker voor PC Windows omgeving.
[bewerk] Kritiek uit het verleden
Hoewel erg populair (maar dan meer in de jaren '80 en begin jaren '90), werden vroege versies van Pascal breed bekritiseerd omdat zij ongeschikt zouden zijn om serieuze programma's mee te schrijven. Brian Kernighan, mede-auteur van de programmeertaal C, zette al in 1981 sterke bezwaren uiteen, in zijn rapport Why Pascal Is Not My Favorite Programming Language. Aan de andere kant werd het tegendeel bewezen; veel grote ontwikkelprojecten in de jaren '80, zoals voor de Apple Lisa en Macintosh, maakten namelijk zwaar gebruik van Pascal. Dit doordat bij de in de praktijk gebruikte dialecten alle problemen die Kernighan aanstipt al opgelost waren. In de decennia daarna is Pascal blijven doorevolueren en de meeste bezwaren zijn niet meer van toepassing op de huidige implementaties. Dat dit stigma zo lang heeft kunnen blijven bestaan is voornamelijk te wijten aan het lang doorgebruiken van Borland Pascal in het onderwijs. Veel jonge studenten die thuis met 32-bits C rommelden keken neer op deze ouderwetse 16-bit omgeving.
Sommigen vinden dat Pascal niet voor "serieus" programmeren geschikt is. Aanhangers van Pascal vinden daarentegen vaak weer dat degenen die dit zeggen niet goed geïnformeerd zijn. Ze realiseren zich volgens hen niet dat het gebruik van de taal nog steeds veel voordelen heeft. Dit stigma zou het probleem van Pascal zijn, veel meer dan eigenlijke deficiëntie. Overigens is het op Pascal gebaseerde Delphi nog altijd de op een na (na Visual Studio) meest verkochte ontwikkelomgeving ter wereld.
[bewerk] Bronnen
- Pascal: User manual and report, Kathleen Jensen and Niklaus Wirth, Springer Verlag 1974, 1985, 1991, ISBN 0-387-97649-3, ISBN 0-540-97649-3
- Wirth,N. Algorithms+Data Structures=Programs, Prentice Hall, Englewood Cliffs N.J. , 1976.
{{{afb_links}}} | Overzicht van programmeertalen | {{{afb_rechts}}} | {{{afb_groot}}} |
---|---|---|---|
Industrieel: Ada - AWK - Assembler - C - C++ - C# - COBOL - F# - Fortran - J# - Java - JavaScript - Lisp - Object Pascal - Pascal - Perl - PHP - Python - Visual Basic Academisch: Eiffel - Haskell - Logo - ML - Prolog - Scheme - Smalltalk Historisch: ALGOL - APL - BASIC - Clipper - MUMPS - PL/I - PowerBuilder - Simula |