Pascal

**Pascal** on kõrgtaseme programmeerimiskeel, mille looja on Niklaus Wirth. Keel töötati välja aastatel 1968–1969 ja avaldati 1970. aastal. Pascal oli mõeldud eelkõige programmeerimise õpetamiseks ning kavandatud lihtsustatud versiooniks programmeerimiskeelest ALGOL.

Vaatamata suurele akadeemilisele edule pole Pascal ärimaastikul kuigi laialdaselt kasutusel. Põhjuseks tema jäikus ning suurte rakenduste loomiseks vajalike funktsioonide puudumine. Vastuseks kriitikale kavandas Wirth uue programmeerimiskeele Modula-2, mis sarnaneb väga Pascaliga, kuid sisaldab lisafunktsioone.

TeX ja originaalne Macintoshi operatsioonisüsteem on kirjutatud suurelt osalt just Pascali programmeerimiskeeles.

Pascalil põhinev Object Pascal, mis on mõeldud eelkõige objektorienteeritud programmeerimise jaoks, töötati välja aastal 1985.

## Lühiülevaade
Pascalile pandi nimi 17. sajandi prantsuse matemaatiku, füüsiku ja filosoofi Blaise Pascali auks, kellel oli tähtis roll arvuti arengu ajaloos.

 Enne Pascali loomist oli Niklaus Wirth loonud ka programmeerimiskeeled Euler ja ALGOL W. Lisaks Pascalile on Wirth ka keelte Modula, Modula-2, Oberon ja Oberon-2 peamine väljatöötaja.

Wirthi eesmärgiks oli luua struktureeritud programmeerimisel põhinev programmeerimiskeel, mis oleks eelkõige kiire ja efektiivne, võimaldaks luua hästi struktureeritud ja organiseeritud programme ning sobiks programmeerimise põhimõtete õpetamiseks.
Pascali otseseks eelkäijaks on Algol-60, kuid lisatud on veel mitmeid vahendeid, mis võimaldavad programmeerijatel defineerida oma enda (struktureeritud) andmetüüpe. Lisaks muutus lihtsamaks ka dünaamiliste ja rekursiivsete andmestruktuuride, näiteks loendite, puude ja graafide kasutamine.

Pascal oli peamine kõrgtaseme keel Apple Lisa arendamisel ning oli kasutusel ka Macintoshi algusaastatel. Donald E. Knuthi loodud tekstilaosüsteem TeX on kirjutatud keeles WEB, mis põhineb Pascalil. Programmides nagu Skype, FL Studio ja Total Commander on kasutatud Delphit (Object Pascal). Delphi on ka tänapäeval kasutusel Windowsi rakenduste loomisel (võimaldab kompileerida sama koodi ka Maci ja IOS-i platvormi jaoks).

Tänapäeval leiavad kasutust veel Borland Pascal (Turbo Pascal), Delphi, Compaq Pascal, THINK Pascal ja CodeWarrior Pascal. Turbo Pascalit ja THINK Pascalit pole juba mõnda aega uuendatud, kuid Delphi ja Compac Pascal on mõlemad kaubanduslikult elujõulised tooted koos iga-aastaste uuenduste ning täieliku tehnilise toega. 

Kuni 1990. aastate alguseni oli Pascal suurimates kolledžites ja ülikoolides peamine keel programmeerimise õpetamisel. 

## Võrdlus C-keelega
Keeltel on sarnasusi, aga ka palju erinevusi. Programmeerija seisukohast erinevad Pascal ja C vägagi nii süntaksi, struktuuri kui ka mõtteviisi poolest. Mõlemad keeled toetavad tugevat tüüpimist, kuid Pascal kõrgema taseme keelena üritab rohkem vältida vigaseid tüübiteisendusi.

C-keeles on võimalik koodi kirjutada väga tihedalt (ühele reale järjest väga palju teksti), mis võib halvendada koodi loetavust ja arusaadavust. Pascali süntaks teeb koodi üldiselt kergemini loetavaks.

## Võimekus ja jõudlus
Pascali standardi esialgne täiendamata versioon (Unextended Pascal) ei toetanud objektorienteeritud stiili. Hilisemad versioonid Extended Pascal ja Object Pascal lisasid uusi võimalusi ja objektorienteerituse. Objektorienteeritust toetavad ka Think Pascal, CodeWarrior Pascal, Borland Pascal ning nii mõnigi avatud lähtekoodiga Pascali versioon. Pascali kompilaatorid, mis uusi versioone toetasid, suurendasid sealjuures oluliselt ka kompileeritud programmide jõudlust.

Pascali kood on kompilaatori poolt kergesti optimeeritav ning võimaldab luua võimekaid programme. Ingemar Ragnemalm, programmeerija ja raamatu "Tricks of the Mac Game Programming Gurus" kaasautor, on öelnud: "Ma saan Pascalis teha kõike, mida on võimalik teha C-keeles, kuid ma saan seda teha elegantsemalt."

Pascal toetab programmeerimise häid tavasid ning võimaldab luua kompleksseid andmestruktuure, kasutades hästi määratletud tüüpe. Pascalit kasutatakse kaubanduslikes rakendustes, tööstuslikes ja teaduslikes keskkondades ning ka õppekeelena.

Mõned näited Macintoshi rakendustest, mis on kirjutatud Pascalis:
*InterArchy – FTP-klientrakendus
*"Ingemar's Skiing Game" – *action*-mäng
*"Klondike" – üks populaarsemaid pasjansitüüpi mänge
*Scripter – arenduskeskkond AppleScripti jaoks
*SuperLock – failiturbeprogramm
*JacqCAD Master – CAD-i programm tekstiilidisaini jaoks
*FlightMath – lennuanalüüsiprogramm
*NIH Image – pildianalüüsiprogramm

## Keele eripära
### Hello World
Pascali eripärana peab igal programmil olema nimi (näites "Hello") ning programmi lõpetab punkt. Sõned kirjutatakse erinevalt mitmest teisest keelest jutumärkide asemel ülakomade vahele.
Hello world näeb Pascalis välja järgmine:

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


### Andmetüübid
Pascalis, nagu ka paljudes teistes programmeerimiskeeltes, määrab andmetüüp väärtuste vahemiku, mida ta on võimeline hoiustama. Lisaks on igal andmetüübil määratud toimingud, mis on samast tüübist muutujatega lubatud. Eeldefineeritud tüübid:

Programmeerija saab ka ise defineerida uusi andmetüüpe. Pascali tüübideklaratsioon näeb välja selline:

```
type
  byte        = 0..255;
  signed_byte = -128..127;
  string      = packed array[1..255] of char;
```


### Kommentaarid
Klassikalised Pascali kommentaarid kirjutatakse looksulgudesse: 

```
{See on kommentaar, mis ei mõjuta kuidagi programmi tööd.}
```


Mitmerealiste kommentaaride jaoks tuleks tekstilõik asetada {* ja *} vahele: 

```
{* See on samuti kommentaar,
mis ei mõjuta programmi tööd *)
```


### Reserveeritud sõnad
Pascali keele üheks osaks on reserveeritud sõnad, millel on juba konkreetne funktsioon ning mida kasutaja ei saa kasutada muutujate nimedena. Pascal pole tõstutundlik, seega kompilaatoril pole vahet, kas kirjutada suur- või väiketähtedega. 

## Vaata ka
*Programmeerimiskeel
*Algol-60
*Object Pascal
*Turbo Pascal
*Free Pascal
*GNU Pascal
*Delphi (programmeerimiskeel)

## Viited

## Välislingid
*FreePascal
*GNU Pascal Compiler (GPC)
*Turbo Pascal
*Lazarus