Pascal (programmeertaal)

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Pascal
Paradigma Imperatief
Verschenen in 1970
Ontworpen door Niklaus Wirth
Typesysteem statisch, sterk
Implementaties GNU Pascal, HP Pascal, Apple Pascal en anderen
Dialecten Borland Pascal, Turbo Pascal, Object Pascal en anderen
Beïnvloed door Algol
Invloed op Modula-2, Ada, Oxygene
Besturingssysteem Multiplatform
Portaal  Portaalicoon   Informatica

Pascal is een programmeertaal die in 1970 ontwikkeld werd door Niklaus Wirth en die is genoemd naar de Franse wiskundige Blaise Pascal. In Pascal wordt de nadruk gelegd op eenvoud, gestructureerd programmeren en datastructuren. De taal was gebaseerd op de enkele jaren eerder ontwikkelde taal Algol-60 en een alternatief voor de te ingewikkelde opvolger daarvan (Algol-68).

Het was de bedoeling dat Pascalprogramma's op een minicomputer konden worden gecompileerd en uitgevoerd. In feite had Wirth al een soort personal computer voor ogen. Pascal is echter 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 mogelijkheden 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 mainframegebruikers 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 verving toen Algol-60 als 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.

Basisgrammatica[bewerken]

Een veel gebruikt voorbeeld om een indruk te krijgen van de grammatica van een taal is het "Hello world" programma.

 program helloworld(output);
 begin
 writeln('Hello world!');
 end.

Bijna alle Pascalprogramma's starten met het sleutelwoord "program". Een blok code wordt aangegeven met de sleutelwoorden "begin" en "end". Statements 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.

Verschillen met Algol-60[bewerken]

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:

  1. Syntactische verschillen
  2. Beperkingen
  3. Uitbreidingen

Syntactische verschillen[bewerken]

  • De basissymbolen zijn gereserveerde woorden. Een identifier 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.

Beperkingen[bewerken]

  • 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 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-variabele vervalt. Deze werd weinig gebruikt en was lastig te implementeren.
  • De switch vervalt. De functie wordt overgenomen door case.

Uitbreidingen[bewerken]

  • Constanten kunnen een naam krijgen. Daarmee wordt gedeeltelijk 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 het case-statement kan een keuze uit verschillende mogelijkheden gemaakt worden.

Pascal en C[bewerken]

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-statement uit te voeren. Moderne compilers maken de programmeur op dit soort zaken attent, waarmee de grond voor discussie grotendeels is 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 doordat 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 identifiers beginnen met 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.

Implementaties[bewerken]

Vroege implementaties (met name de UCSD p-system-compiler, die 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-statement 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 hij 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. De Linux-versie van Delphi en daarmee ook Pascal, is beschikbaar als Kylix.

Algemeen beschikbare compilers (laatste release)[bewerken]

Er zijn veel verschillende Pascal-compilers beschikbaar:

  • De P4-compiler, de basis voor veel in Pascal geïmplementeerde Pascal-compilers, inclusief het UCSD p-System. In 2003 werd de site voor het laatst aangepast, de laatste versie waarschijnlijk vroege negentiger jaren.
  • 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, 1 januari 2010.
  • Lazarus (software), een open RAD omgeving, met Free Pascal als compiler. Lazarus+Free Pascal zijn ruwweg opgezet als een substituut voor Delphi, 5 maart 2010.
  • 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), v7: 1994.
  • 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. Augustus 2006, GNU Pascal lijkt gestopt te zijn met formele releases, maar sporadisch worden er wel nieuwe patches/source archives beschikbaar gesteld.
  • Delphi is het vlaggeschip van Borland. Dit Rapid Application Development-product (RAD) 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. Augustus 2009, volgende augustus 2010.
  • 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. Recentelijk is hier de reden voor bekend geworden: Embarcadero recyclet de Kylix-onderdelen voor zijn crosscompilinguitbreidingen in Delphi 2011. Kylix : 2003, D2011 verwacht in augustus 2010.
  • Prospero Extended Pascal 32-bit Extended Pascal compiler en linker voor PC Windows omgeving. Augustus 2006.

Kritiek uit het verleden[bewerken]

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.[1] Aan de andere kant werd het tegendeel bewezen; veel grote ontwikkelprojecten in de jaren '80, zoals voor de Apple Lisa en Apple 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.[bron?] Veel jonge studenten die thuis 32-bits C gebruikten, keken neer op deze ouderwetse 16-bit omgeving.

Sommigen[bron?] 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 één na (na Visual Studio) meest verkochte ontwikkelomgeving ter wereld.

Bronnen[bewerken]

  1. Why Pascal Is Not My Favorite Programming Language
  • Pascal: User manual and report, Kathleen Jensen and Niklaus Wirth, Springer Verlag 1974, 1985, 1991, ISBN 0-387-97649-3, ISBN 3-540-97649-3
  • Wirth,N. Algorithms+Data Structures=Programs, Prentice Hall, Englewood Cliffs N.J. , 1976.
Wikibooks Wikibooks heeft een studieboek over dit onderwerp: Cursus programmeren in Pascal.