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ð EXtension for Scientific Computing (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. if, while, for 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ð %. 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ð "Begin" og "End" 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);
 begin
   writeln('Halló heimur!')
 end.

Gagnaskipan 
Í Pascal eru einföldu tögin real, integer, character og boolean auk 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 benda:
 type 
   a = ^b;
   b = record
         a: integer;
         b: char;
         c: a
       end;
 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 tiltengdan lista með því að nota tag með bendli (c) í skránna.

Flæðisskipanir 
Pascal er mótað forritunuarmál. Sem þýðir að flæði er stjórnað með stöðluðum setningum, án '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:
 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 umhverfið.

 Free Pascal (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 (Dev-Pascal) er Pascal þýðandi sem var hannaður í Borland Delphi og er Win32 þýðandi.

 Chrome (Chrome programming language) (website: 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 ogMono. 
 Kylix  
 GNU Pascal Compiler 
 Virtual Pascal 
 P4 compiler
 WDSybil  Delphi samhæft umhverfi og þýðari fyrir Microsoft Windows og OS/2.
 Turbo Pascal 
 Dr. Pascal  
 IP Pascal  
 Pocket Studio  

 MIDletPascal 
 Vector Pascal 

Hægt er að skoða mjög ítarlegan lista á Pascaland. Síðan er á frönsku en er bara listi með tenglum á þýðendur. 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 forritunarmálsins setti fram sína helstu gagnrýni á Pascal 1981 í riti sínu 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 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. Þ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 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, The Pascal Programming Language

Kennsluefni 
 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 
 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: Joe Dorward's .

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

Tilföng 
 Pascal Central  
 Standard Pascal  
 PASCAL XSC  
 SWAG  
 Turbo-Pascal free turbo pascal site

Staðlar 
 Pascal standards  ISO/IEC 10206: Extended Pascal
 ANSI-ISO Pascal  ISO/IEC 7185: PASCAL

Saga 
 N. Wirth, M. Broy, ed, and E. Denert, ed: Pascal and its Successors in Software Pioneers: Contributions to Software Engineering. Springer-Verlag, 2002, ISBN 3-540-43081-4
 N. Wirth: 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.

Forritunarmál