Pascal (forritunarmál)

**Pascal** er stefjumál sem var þróað af Niklaus Wirth árið 1970 sem forritunarmál sem myndi henta vel í mótaða forritun. Pascal á sér ættingja Object Pascal sem er sniðið að hlutbundinni forritun.

## Saga
Pascal er byggt á forritunarmálinu ALGOL og er nefnt eftir og til heiðurs stærðfræðingnum og heimsspekingnum Blaise Pascal. Forritunarmálin Modula-2 og Oberon voru þróuð út frá Pascal og eru svipuð.

Í upphafi var Pascal þróað sem forritunarmál ætlað til að kenna nemendum mótaða forritun. Margar kynslóðir nemenda hafa “slitið barnsskónum” í forritun með Pascal sem fyrsta mál í grunnáföngum forritunar til margra ára. Pascal er til í hinum ýmsu útfærslum í dag, til dæmis Free Pascal sem er meðal annars til bæði í 32-bita og 64-bita útgáfum. Allar gerðir Pascal henta til bæði kennslu og hugbúnaðarþróunar.

Hlutar af fyrsta Macintosh stýrikerfinu voru handþýddir yfir í Motorola 68000 smalamál úr Pascal kóða sem var skrifaður fyrir Lisa stýrikerfið, forvera Macintosh (Seinni útgáfur notuðust einnig við töluvert af C++ kóða). Fyrstu ár Macintosh var Pascal aðal æðra-stigs forritunarmálið í hugbúnaðargerð fyrir Makkann. 

## Útfærslur
Fyrsti þýðandinn fyrir Pascal var hannaður í Zurich fyrir CDC 6000 series tölvukerfin og varð nothæfur 1970.

Fyrsta velheppnaða útfærslan af CDC Pascal þýðandanum fyrir önnur stórtölvukerfi var sett saman af Welsh og Quinn við Queens háskólann í Belfast árið 1972 fyrir ICL 1900 tölvuna.

Fyrsti bandaríski Pascal þýðandinn var settur saman í Háskólanum í Illinois undir stjórn Donald B. Gillies fyrir PDP-11 og skilaði út hreinu vélamáli.

Í Zurich var búinn til “port pakki” til þess að hraða útbreiðslu tungumálsins. Í pakkanum var þýðandi sem bjó til kóða fyrir sýndarvél auk túlks fyrir “p-kóða” kerfið. Þó svo að “p-kóðinn” hafi í upphafi verið hannaður til að vera þýddur yfir í hreint smalamál þá er í það minnsta eitt kerfi, UCSD útfærslan, sem nýtti það í að búa til stefjumálskerfið UCSD p-System. P-kerfis þýðendur eru merktir P1-P4, þar sem P1 er elsta útgáfan og P4 sú nýjasta.

Watcom Pascal var þróað fyrir IBM stórtölvur í upphafi níunda áratugarins.

IP Pascal var útfærsla af Pascal forritunarmálinu sem notaðist við Micropolis DOS, en var fljótlega færst yfir í CP/M sem keyrði á Z80.

Í upphafi níunda áratugarins var UCSD Pascal flutt yfir á Apple II og Apple III til þess að bjóða mótvægi við BASIC túlkana sem fylgdu með vélunum.

Apple bjó til sýna eigin útfærslu, Lisa Pascal fyrir Lisa námsstefnuna árið 1982 og 1985 færði Apple þennan þýðanda yfir á Macintosh og MPW. Sama ár skilgreindi Larry Tesler í samráði við Niklaus Wirth Object Pascal og voru þeim viðbótum bætt inn í Lisa Pascal og Mac Pascal þýðendurna.

Á níunda áratugnum skrifaði Anders Hejlsberg Blue Label Pascal þýðandann fyrir Nascom-2. 
Endurútfærsla af þessum þýðanda fyrir CP/M og IBM PC var markaðsett undir heitunum Compas pascal og PolyPascal áður en Borland eignaðist hann.
Þýðandinn var endurskýrður *[[Turbo Pascal]]* og varð gríðarlega vinsæll, að hluta til vegna hagstæðs verðs og hins vegna þess að hann var einn fyrsti þýðandinn í þróunarumhverfi sem bauð upp á vinnusvæði sem náði yfir allan skjáinn. Anders Hejlsberg færði svo Turbo Pascal yfir á Macintosh 1986 og setti viðbæturnar úr Object Pascal yfir í Turbo Pascal. Þessar viðbætur skilu sér síðan inn í útgáfu 5.5 af Turbo Pascal fyrir PC.

Hinn ódýri Borland þýðandi hafði mikil áhrif á Pascal samfélagið sem í lok níunda áratugarins var farið einbeita sér mestmegnis að þróun fyrir IBM PC. Margir PC áhugamenn sem leituðu af mótuðu forritunarmáli í stað BASIC hófu að nota Turbo Pascal. Á sama tíma byrjuðu margir atvinnuforritarar að skoða tungumálið. Á sama tíma var fjöldi eiginleika C forritunarmálsins bætt inn í því markmiði að leyfa Pascal forriturum að nota API skilin úr Microsoft Windows milliliða laust. Þessar viðbætur innihéldu núllstrengi, benda reikning, fallabendla, viðfang virkja og óöruggar tagbreytingar.

Borland ákvað hins vegar seinna að þeir vildu hlutbundnu eiginleikana aðeins fágaðri og hófu þróunina á Delphi umhverfinu og notuðu uppkastið af Obect Pascal frá Apple sem grunn. (Drögin frá Apple eru ekki opinber staðall). Borland kallaði þetta Obect Pascal í fyrstu útgáfunum af Delphi en breyttu nafninu formlega í Delphi í seinni útgáfum. Aðal viðbæturnar frá hlutbundnu eiginleikum eldra kerfisins voru tilvísanir á hluti, sýnadrsmiðir og eyðar, og eigindi. Margir aðrir þýðendur bjóða uppa á það sama, sjá Object Pascal.

Super Pascal er útgáfa sem bætti við ótölulegum merkjum, “return” skipun og segðir sem tagnöfn.

Háskólarnir í Zurich, Karlsruhe og Wuppertal hafa þróað *E*'X**tension for **S**cientific **C**omputing'' (Pascal XSC) byggt á Oberon, sem er frí lausn til að forrita tölulega útreikninga með kvarðaðri nákvæmni.

== Málskipan ==
Pascal er í sinni upprunalegu mynd stefjumál með hefðbundnum skipunum s.s. <code>if</code>, <code>while</code>, <code>for</code> o.s.frv..
Málfræðilega greinist Pascal frá öðrum forritunarmálum í C fjölskyldunni aðallega eftir því hvernig (ensk) lykilorð eru notuð þar sem C notar sértákn. Til dæmis til þess að reikna leyfð (modulus) í Pascal notar þú lykilorðið “mod” en C notar táknið <code>%</code>. Annar smávægilegur munur er hlutverk semikommunnar. Í Pascal aðgreina semikommur einfaldar setningar (af öllum gerðum) innan samsettrar setningar (afmarkað með { ... } ) en semikomman er hluti setningunni í C. Þessi munur er ekki sýnilegur þegar þú lítur á röð segða og virkja þar sem hver lína endar á semikommu í hvoru tilfelli. Munurinn er sést helst við tvær aðstæður. Semikomma getur ekki verið beint á undan “else” í Pascal en þarf að vera í C nema að setningin sé innin hornklofa ( {...} ). Síðasta setning á undan “end” ætti heldur ekki hafa semikommu í Pascal. Margir Pascal forritarar setja samt sem áður semikommu á eftir síðustu setningunni til að halda stílnum og búa í rauninni til “tóma segð” við enda setningarinnar. Margir kennarar eru ekki hrifnir af þessu því það gæti ruglað nemandann um raunverulegt hlutverk semikommunar í Pascal.

=== Halló heimur ===
Öll Pascal forrit byrja á "Program" lykilorðinu, valkvæmum lista of útværum skráalýsingum og síðan forritsbút merktum með "<code>Begin</code>" og "<code>End</code>" lykilorðunum. Semikommur skipta setningum, og punktur lætur forritið hætta. Pascal lítur sömu augum á há- og lágstafi.

Hér er dæmi um kóða í mjög einföldu forriti:
 **program** HelloWorld(output);<br />
 **begin**
   writeln('Halló heimur!')
 **end**.

=== Gagnaskipan ===
Í Pascal eru einföldu tögin [[floating point|real]], [[integer (computer science)|integer]], [[character (computing)|character]] og [[boolean type|boolean]] auk [[enumerated type|enumeration]], sem var kynnt sem nýtt tag í Pascal.

 **program** myprog;
  
 **var**
   r: real;
   i: integer;
   c: char;
   b: boolean;
   e: (one, two, three, four, five);

Hægt er að búa til undirsvið úr raðtögum.

 **var**
   x: 1..10;
   y: 'a'..'z';
   z: two..four;

Hægt er að búa til tög úr öðrum tögum með tagskilgreiningu.

 **program** myotherprog;
  
 **type**
   x = integer;
   y = x;
 ...

Fleiri flóknari tög er hægt að setja saman úr einfaldari tögum:

 **type** 
   a = **array** [1..10] of integer;
   b = **record**
         a: integer;
         b: char
       **end**;
   c = file of a;

==== Bendlar ====
Pascal styður notkun [[bendir|benda]]:
 **type** 
   a = ^b;
   b = **record**
         a: integer;
         b: char;
         c: a
       **end**;<br />
 **var**
   pointer_to_b: a;

Hér er breytan ''pointer_to_b'' bendir á tagið ''b'', færsla. Til að búa til nýja færslu og setja gildin ''10'' og ''A'' í svæðin ''a'' og ''b'' í skránni myndi forritið verða svona;
   **new**(pointer_to_b);
   pointer_to_b^.a := 10;
   pointer_to_b^.b := 'A';
   pointer_to_b^.c := **nil**;
 ...
Hægt er að búa til[[Tengdur listi|tengdan lista]] með því að nota tag með bendli (c) í skránna.

=== Flæðisskipanir ===
Pascal er [[Mótuð forritun|mótað forritunuarmál]]. Sem þýðir að flæði er stjórnað með stöðluðum setningum, án '[[goto (command)|go to]]' skipana.

 **while** a <> b **do** writeln('Waiting');
  
 **if** a > b **then**
   writeln('Condition met')
 **else**
   writeln('Condition false');
  
 **for** i := 1 **to** 10 **do** writeln('Iteration: ', i:1);
  
 **repeat** a := a + 1 **until** a = 10;

=== Stefjur og föll ===
Pascal mótar forrit í stefjur og föll.

 **program** mine(output);
   **var** i : integer;
   
   **procedure** print(**var** j: integer);
  
     **function** next(k: integer): integer;
     **begin**
       next := k + 1
     **end**;
  
   **begin**
     writeln('The total is: ', j);
     j := next(j)
   **end**;
  
 **begin**
   i := 1;
   **while** i <= 10 **do** print(i)
 **end*'.

Stefjur og föll geta komið innan hvers annars eins djúpt og maður vill og 'program' setningin er alltaf sú ysta.

Hver stefja eða fall getur haft sínar eigin skilgreiningar á goto merkjum, föstum, tögum, breytum og öðrum skilgreiningum sem þurfa öll að vera í þessari röð. Krafan um þessa röð var í upphafi til þessa að geta þýtt á hagkvæman hátt með því að lesa aðeins einu sinni yfir. Flestir nútíma þýðendur hafa hins vegar fallið frá þessari ströngu kröfu um röðun.

== Tilföng ==
=== Þýðendur ===
Fjölmargir Pascal þýðendur eru fáanlegir fyrir almenning:
* [http://www.borland.com/delphi/ Delphi]  er aðal RAD forritunartólið frá Borland. Það notar Object Pascal málið (Nefnt '[[Delphi programming language]]' frá Borland), þróað út frá Pascal til að gera forrit fyrir Windows. Nýjustu útgáfurnar frá 2005 og 2006 styðja einnig að þýða fyrir [[.NET Framework|.NET]] umhverfið.

* [[Free Pascal]] ([http://www.freepascal.org/ www.freepascal.org] ) er kerfi sem keyrir á mörgum verkvöngum og er skrifað í Pascal (þýðir sig sjálft). Markmið Free Pascal er að skaffa hentugan og öflugan þýðanda sem getur bæði þýtt eldri kerfi og nýtist til forritunar á nýjum kerfum. Free Pascal er dreyft ókeypis í gegnum GNU GPL. Það getur blandað standard Pascal, Extended Pascal (Turbo Pascal) og Object Pascal (Delphi) kóða samanog styður fjöldan allan af stýrikerfum.

* Dev-Pas ([http://www.bloodshed.net/devpascal.html Dev-Pascal] ) er Pascal þýðandi sem var hannaður í [[Borland Delphi]] og er Win32 þýðandi.

* Chrome ([[Chrome programming language]]) (website: [http://www.chromesville.com/ www.chromesville.com] ) er næstu kynslóðar Visual Studio viðbót og frístandandi (í .NET umhverfinu) þýðandi fyrir [[Object Pascal]] málið með [[.NET Framework|.NET]] og[[Mono (software)|Mono]]. 
* [http://www.borland.com/kylix/ Kylix]  
* [https://www.gnu-pascal.org/ GNU Pascal Compiler] 
* [http://www.vpascal.com/ Virtual Pascal] 
* [https://homepages.cwi.nl/~steven/pascal/ P4 compiler]
* [https://www.wdsibyl.org WDSybil]  Delphi samhæft umhverfi og þýðari fyrir [[Microsoft Windows]] og [[OS/2]].
* [[Turbo Pascal]] 
* [http://www.visible-software.com/prod-dp.html Dr. Pascal]  
* [http://www.moorecad.com/ippas/ IP Pascal]  
* [http://www.winsoft.sk/pstudio.htm Pocket Studio]  

* [[MIDletPascal]] 
* [https://www.dcs.gla.ac.uk/~wpc/reports/compilers/compilerindex/Doc2.html Vector Pascal] 

Hægt er að skoða mjög ítarlegan lista á [http://pascaland.org Pascaland] . Síðan er á frönsku en er bara listi með tenglum á þýðendur. [http://pascal-central.com Pascal Central]  er síða með upplýsingum um Pascal fyrir þá sem forrita fyrir Mac. Þar eru margar áhugaverðar greinar og kennsluefni sem vert er að kíkja á.

== Staðlar ==
Árið 1983 var forritunarmálið staðlað samkvæmt alþjólega staðlinum ISO/IEC 7185 ásamt nokkrum sérlenskum stöðlum, t.d. hinn ameríska ANSI/IEEE770X3.97-1983. Viðbætur voru svo settar inn í Pascal staðalinn 1990 sem ISO/IEC 10206.

ISO 7185 var skilgreindur sem útskýringar á forritunarmáli Wirts frá 1974 eins og því var lýst í notkunarleiðbeiningum og skýrslu [Jensen and Wirth] en bætti við "Conformant Array Parameters" sem stig 1 í staðlinum þar sem “Pascal without Conformant” er stig 0.

Niklaus Wirth leit sjálfur á útgáfuna frá 1974 sem “staðalinn” til að aðgreina hana frá útgáfum sem voru gerðar í CDC 6000 þýðandanum fyrir sértilvik.

Á stærri vélum var Pascal staðlinum almennt fylgt eftir en svo var ekki á IBM-PC. Á PC voru Borland þýðendurnir Turbo Pascal og Delphi með lang flesta notendur. Það er því miklvægt að reynda að skilja hvort tiltekin útfærsla tilheyri opinbera Pascal staðlinum eða útfærslu Borland á honum.

== Gagnrýnisraddir ==
Þó að Pascal sé mjög vinsælt (reyndar vinsælla á níunda og tíunda áratugunum en nú) hafa eldri útgáfur af Pascal verið gagnrýndar fyrir að vera óhentugt fyrir “alvöru” forritun utan kennslu. [[Brian Kernighan]] frægur stuðningsaðili [[C (programming language)|C forritunarmálsins]] setti fram sína helstu gagnrýni á Pascal 1981 í riti sínu [https://www.cs.virginia.edu/~evans/cs655-S00/readings/bwk-on-pascal.html Why Pascal Is Not My Favorite Programming Language]. Hins vegar voru margir stór áfangar í hugbúnaðargerð forritaðir að miklum hluta í Pascal, eins og [[Apple Lisa]] og [[Apple Macintosh|Macintosh]] (svo mikið að skilin fyrir C á Macintosh þurftu að notast við taggerðir úr Pascal).

Á þeim langa tíma síðan þá hefur Pascal haldið áfram að þróast og flest gagnrýnisatriði Kernighans eiga ekki lengur við. Svo óheppilega vill til að eins og Kernighan hafði spáð fyrir voru lagfæringar á þessum vandamálum ósamhæfð milli þýðenda. Síðasta áratuginn hefur þróunin hins vegar farið á betri veg en Kernighan sá fyrir og skipst í tvo póla, eftir ISO eða Borland. 

Út frá reynslu sinni með Pascal (og áður ALGOL) þróaði [[Niklaus Wirth]] nokkur önnur forritunarmál: [[Modula]], [[Modula-2]] og [[Oberon programming language|Oberon]]. Þessi tungumál taka á mörgum gagnrýnisatriða Pascal og eru ætluð öðrum notendahóp, o.s.frv. en ekkert þeirra hefur náð jafn mikilli útbreiðslu eða vinsældum eins og Pascal.

== Meira efni ==

* [[ALGOL]] 
* [[C (programming language)|C forritunarmálið]] 
* [[Ada programming language]]: Afkomandi Pascal gerður af Bandaríska varnarmálaráðuneytinu. Hannað til að vera ítarlegra og öflugra en Pascal.
* [[Delphi programming language]]: 
* [[Modula programming language]]: 
* [[Modula 2]]
* [[Oberon programming language]]
* [[Object Pascal]]
* [[Pascal and C]]: Samanburður á Pascal og C.
* [[IP Pascal]]
* [[Chrome programming language]]: Object Pascal fyrir .Net framework.

== Tenglar ==
=== Tilvísunarefni ===
* [[Bill Catambay]], [http://pascal-central.com/ppl/index.html The Pascal Programming Language] 

=== Kennsluefni ===
* [http://www.allegro.com/papers/htpp.html How To Code: Pascal] 

=== Bækur ===
* [[Kathleen Jensen]] and Niklaus Wirth: *PASCAL - User Manual and Report.* Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 and ISBN 3-540-97649-3[http://www.cs.inf.ethz.ch/~wirth/books/Pascal/] 
*: also in N. Wirth, and A. I. Wasserman, ed: *Programming Language Design.* IEEE Computer Society Press, 1980

* Þú finnur ókeypis Pascal bók á netinu hér: [http://writerguy.users.btopenworld.com/ Joe Dorward's] .

=== Dagbækur ===
* Niklaus Wirth: *The Programming Language Pascal.* Acta Informatica, 1, (Jun 1971) 35-63

=== Tilföng ===
* [http://pascal-central.com/ Pascal Central]  
* [http://www.moorecad.com/standardpascal Standard Pascal]  
* [http://www.xsc.de PASCAL XSC]  
* [http://www.gdsoft.com/swag/downloads.html SWAG]  
* [https://www.turbo-pascal.com/ Turbo-Pascal] free turbo pascal site

=== Staðlar ===
* [http://www.pascal-central.com/standards.html Pascal standards]  ISO/IEC 10206: *Extended Pascal*
* [http://www.moorecad.com/standardpascal/ ANSI-ISO Pascal]  ISO/IEC 7185: *PASCAL*

=== Saga ===
* N. Wirth, M. Broy, ed, and E. Denert, ed: [https://www.swissdelphicenter.ch/en/niklauswirth.php *Pascal and its Successors*] in *Software Pioneers: Contributions to Software Engineering.* Springer-Verlag, 2002, ISBN 3-540-43081-4
* N. Wirth: [http://portal.acm.org/citation.cfm?id=155378 *Recollections about the Development of Pascal.''] ACM SIGPLAN Notices, Volume 28, No 3, March 1993.
* Pascal User's Group Newsletters  — An early Pascal history resource that contains many letters from Wirth and others concerning Pascal.

### Gagnrýni
* Brian W. Kernighan, Why Pascal is Not My Favorite Programming Language

### Grín
* Real Programmers Don't Use Pascal — Grín um hvers vegna “alvöru” forritarar nota ekki Pascal.