Pascal (programovací jazyk)

**Pascal** je imperatívny a procedurálny programovací jazyk.

Prvá verzia Pascalu bola publikovaná v roku 1971, v roku 1974 bola definícia jazyka opravená a v roku 1981 bola vydaná ako norma ISO 7185. 

Jazyk bol navrhnutý na začiatku 70. rokov profesorom Niklausom Wirthom. Cieľom bolo vytvoriť programovací jazyk vhodný pre výuku programovania, pomocou malého množstva základných dátových štruktúr. Jazyk bol pomenovaný po francúzskom matematikovi Blaise Pascalovi.

## História
Pascal, pomenovaný po francúzskom matematikovi a filozofovi Blaise Pascalovi, bol vytvorený na začiatku 70. rokov Niklausom Wirthom.

Wirth pred vytvorením Pascalu vytvoril programovacie jazyky Euler a ALGOL W, a neskôr sa podujal vytvoriť Pascalu podobné jazyky Modula-2 and Oberon.

Pascal bol spočiatku zamýšľaný najmä ako nástroj pre výuku štruktúrovaného programovania. Jedna celá generácia študentov používala Pascal ako úvodný jazyk na vysokých školách. Varianty Pascalu boli často používané vo viacerých oblastiach od vedeckých projektov po PC hry a vnorené systémy. Existujú aj novšie kompilátory Pascalu a sú široko dostupné.

Pascal bol ako primárny jazyk vyššej úrovne použitý pri vývoji Apple Lisa, a tiež v počiatočných rokoch existencie Macintoshu. Pôvodné časti operačného systému Mac OS boli ručne preložené zo zdrojových kódov v Pascale do jazyka symbolických inštrukcií Motoroly 68000. TeX, populárny program pre sadzbu textu od Donalda E. Knutha, bol napísaný vo WEBe, čo je pôvodný literate programming systém založený na DEC PDP-10 Pascale. Aplikácie ako napríklad Total Commander, Skype a Macromedia Captivate boli napísané v Delphi, čiže v Object Pascale.

Object Pascal (Embarcadero Delphi) je stále používaný pri vytváraní Windows aplikácií, a navyše má tiež schopnosť krížového prekladu pre Mac a iOS. Ďalšia medzi-platformová verzia Pascalu Free Pascal, ktorá podporuje napíš raz, skompiluj hocikde a obsahuje Lazarus IDE, je populárna u používateľov Linuxu.

## Krátky opis
Wirthovym zámerom bolo vytvoriť efektívny jazyk (vzhľadnom na rýchlosť kompilácie ako aj generovaného kódu) založený na takzvanom štruktúrovanom programovaní, koncepte, ktorý začal byť v tej dobe populárny. Pascal má svoje korene v jazyku ALGOL 60, ale tiež zaviedol pojmy a mechanizmy (nad rámec skalárov a polí ALGOLu), ktoré umožnili programátorom definovať ich vlastné zložené (štruktúrované) dátové typy, a taktiež umožnil jednoduchšie vytváranie dynamických a rekurzívnych dátových štruktúr ako napríklad *zoznamy* (angl. list), *stromy* a grafy. Medzi najdôležitejšie vlastnosti jazyka patria *záznamy* (angl. record*)*, *vymenovania*, *subranges*, dynamicky alokované premenné s ukazovateľmi, a množiny*.* Aby to bolo umožnené a zmysluplné, Pascal má silnú typovú kontrolu všetkých objektov, čo znamená, že bez explicitných konverzií nie je možné jeden dátový typ skonvertovať na iný dátový typ alebo ho interpretovať ako iný dátový typ. Podobné mechanizmy sú štandardnou súčasťou mnohých dnešných programovacích jazykov. Niektoré vlastnosti jazyka Pascal pochádzajú z iných programovacích jazykov ako COBOL, Simula 67 a z Wirthovho vlastného programovacieho jazyka ALGOLa W.

Pascal, ako mnoho dnešných programovacích jazykov (ale na rozdiel od väčšiny jazykov patriacich do rodiny jazyka C), dovoľuje definovať vnorené procedúry na ľubovoľnej hĺbke vnorenia, a tiež dovoľuje vo vnútri funkcií a procedúr uvádzanie väčšiny druhov definícií a deklarácií. Toto umožňuje veľmi jednoduchú a koherentnú syntax, kde celý **program** môže byť syntakticky takmer identický jedinej procedúre (**procedure**) alebo funkcii (**function**), samozrejme až na samotné kľúčové slová "program", "procedure" a "function".

## Implementácie
### Prvé kompilátory Pascalu
Prvý kompilátor Pascalu bol vytvorený v Zürichu pre sálové počítače série CDC 6000. Niklaus Wirth uvádza, že prvý pokus o implementáciu vo Fortrane v roku 1969 nebol úspešný z dôvodu nevhodnosti Fortranu pre vyjadrovanie zložitých dátových štruktúr. Druhý pokus bol naformulovaný v samotnom Pascale a stal sa funkčným v polovici 70-tych rokov. Od toho času bolo veľa kompilátorov Pascalu podobne samo-hostiteľských, čiže tieto kompilátory boli napísané v Pascale, a väčšinou boli schopné samé seba rekompilovať keď boli do jazyka pridané nové črty alebo keď bol kompilátor portovaný do nového prostredia. Kompilátor GNU Pascal, napísaný v jazyku C, je jediná podstatná výnimka z tohto pravidla.

Prvý úspešný port kompilátora CDC Pascal na iný sálový počítač bol dokončený Welshom a Quinnom na Queen's University v Belfaste (QUB) v roku 1972. Cieľovým počítačom bola séria ICT 1900 vyrobená spoločnosťou International Computers Limited (ICL). Tento kompilátor sa v zápätí stal predchodcom kompilátora Pascalu pre minipočítač ICS Multum. Multum bol vytvorený, s predpokladom používať na ňom Pascal ako systémový programovací jazyk, Findlayom, Cupplesom, Cavourasom a Davisom pracujúcimi na oddelení počítačových vied na univerzite v Glasgow. Myslí sa, že Multum Pascal, ktorý bol dokončený v lete 1973, mohol byť prvou 16-bitovou implementáciou.

Úplne nový kompilátor bol dokončený Welshom et al. na QUB v roku 1977. Ponúkal diagnostiku zdrojového jazyka (zahŕňajúcu profilovanie, trasovanie a postmortem výpisy (angl. dump) formátované podľa typov), ktorá bola implementovaná Findlayom a Wattom na univerzite v Glasgow. Táto implementácia bola v roku 1980 portovaná na sériu počítačov ICL 2900 tímom situovaným na univerzitách v Southampton a v Glasgow. Štandardná implementácia modelu jazyka Pascal bola tiež založená na tomto kompilátore, a v roku 1984 bola adaptovaná Welshom a Hayom na Manchesterskej univerzite za účelom rigorózneho overenia súladu so štandardom BSI 6192/ISO 7185 a za účelom generovania kódu pre prenosný abstraktný stroj.

Prvý kompilátor Pascalu napísaný v severnej Amerike bol skonštruovaný na University of Illinois pod vedením Donalda B. Gilliesa pre PDP-11 a generoval natívny strojový kód.

### Systém Pascal-P
Aby sa jazyk rýchlo rozšíril, v Zürichu bol vytvorený portabilný nástroj, ktorý obsahoval kompilátor generujúci kód pre virtuálny zásobníkový stroj (čiže kód, ktorý sa dá bez väčšej námahy pomerne rýchlo interpretovať), spolu s interpreterom tohto kódu - systém Pascal-P. Kompilátory systému P boli označené Pascal-P1, Pascal-P2, Pascal-P3 a Pascal-P4. Pascal-P1 bola prvá verzia, zatiaľ čo posledná verzia pochádzajúca z Zürichu bola Pascal-P4.

Pascal-P4 kompilátor/interpreter je stále možné spustiť na systémoch kompatibilných s originálnym Pascalom. Avšak, akceptuje len podmnožinu jazyka Pascal.

Pascal-P5, ktorý už nebol vytvorený pracovnou skupinou v Zürichu, akceptuje celý jazyk Pascal a je kompatibilný s normou ISO 7185.

UCSD Pascal, odnož Pascalu-P2, bol použitý Kennethom Bowlesom pri vytvorení interpretačného UCSD p-systému. Na začiatku 1980-tych rokov bol UCSD Pascal portovaný na počítače Apple II a Apple III, aby poskytol štruktúrovanú alternatívu k interpreterom BASICu, ktoré boli dodávané s týmito počítačmi. UCSD p-System bol jedným z troch operačných systémov dostupných pri uvedení pôvodného IBM PC. 

Kompilátor založený na kompilátore Pascal-P4, ktorý vytváral natívne binárne súbory, bol Austrálskou komisiou pre atómovú energiu (AAEC) vypustený pre sálový počítač IBM System/370. Bol pomenovaný „AAEC Pascal Compiler“ podľa skratky mena tejto komisie.

Na začiatku 1980-tych rokov bol vytvorený Watcom Pascal, ktorý bol taktiež určený pre System 370. 

IP Pascal bola implementácia programovacieho jazyka Pascal pre Micropolis DOS, ale rýchlo bola presunutá na CP/M bežiacim na Z80. V roku 1994 bola presunutá na počítače kompatibilné s procesorom 80386, a dnes existuje vo forme Windows/XP a Linux implementácií. V roku 2008 bol systém pozdvihnutý na novú úroveň a výsledný jazyk bol označený menom "Pascaline" (podľa Pascalovej mechanickej kalkulačky). Obsahuje objekty, nástroje pre menné priestory (angl. namespace controls), dynamické polia, ako aj veľa ďalších rozšírení, a vo všeobecnosti poskytuje tú istú funkcionalitu a typovú ochranu ako C#. Je to jediná takáto implementácia, ktorá je zároveň kompatibilná s originálnou implementáciou Pascalu, ktorá bola štandardizovaná normou ISO 7185.

Ako príklad využitia vo výuke je možné uviesť, že až po 1990-te roky bol Pascal používaný na VAX termináloch GMU. Boli predávané a vyučované knihy o Pascale, ktoré pokrývali s tým súvisiace programátorské potreby.

### Object Pascal, Turbo Pascal
Apple Computer vytvorili svoj vlastný Lisa Pascal pre Lisa Workshop v roku 1982 a prepísali tento kompilátor pre Apple Macintosh a MPW v roku 1985. V roku 1985 Larry Tesler, za prispenia Niklausa Wirtha, definoval Object Pascal a tieto rozšírenia boli začlenené tak do Lisa Pascal kompilátora ako aj do Mac Pascal kompilátora.

V roku 1980 Anders Hejlsberg napísal pre Nascom-2 kompilátor Blue Label Pascal. Reimplementácia tohto kompilátora pre IBM PC bola predávaná pod označeniami Compas Pascal a PolyPascal, až kým kompilátor neprešiel pod Borland. Premenovaný na Turbo Pascal sa stal neuveriteľne populárnym, sčasti vďaka agresívnej cenovej stratégii, sčasti vďaka tomu, že mal prvé celo-obrazovkové integrované vývojové prostredie a rýchly čas obrátky (obrátka compile-link-run trvala iba niekoľko sekúnd). Tiež bol napísaný a vysoko optimalizovaný v jazyku symbolických inštrukcií, čo z neho robilo program s malou spotrebou pamäte a rýchlosťou lepšou akú mala konkurencia. V roku 1986 Anders preportoval Turbo Pascal na Macintosh a zahrnul do neho rozšírenia pre Object Pascal. Tieto rozšírenia boli neskôr pridané do PC verzie Turbo Pascalu (Turbo Pascal 5.5). V tom istom čase Microsoft implementoval svoj Object Pascal kompilátor. Turbo Pascal 5.5 mal veľký vplyv na Pascal komunitu, ktorá sa začala koncom 1980-tych rokov koncentrovať najmä okolo IBM PC. Produkt začalo používať veľa PC amatérov ako štruktúrovanú náhradu za BASIC. Produkt tiež začal byť prijímaný profesionálnymi vývojármi softvéru. Približne v tomto čase boli do neho pridané koncepty z jazyka C, aby programátori používajúci Pascal mohli priamo využívať C API Microsoft Windows. Medzi tieto rozšírenia patrili nulou-ukončené reťazce, aritmetika s ukazovateľmi, ukazovatele na funkcie, operátor umožňujúci získať adresu premennej, a nezabezpečené pretypovanie.

Spoločnosť Borland sa neskôr rozhodla, že chce viac prepracované objektovo-orientované črty, a ako základ svojho  produktu Delphi použila návrh štandardu Object Pascal od Apple. (Tento Apple návrh ešte stále nie je plnohodnotným štandardom.) Prvé verzie jazyka Delphi sa preto nazývali Object Pascal. Hlavnými novými vlastnosťami v porovnaní so staršími OOP rozšíreniami boli objektový model založený na referenciách, virtuálne konštruktory a deštruktory, a privlastnenia (angl. properties). Tento dialekt implementuje aj viacero iných kompilátorov.

Turbo Pascal, a jeho odvodeniny s "jednotkami" (angl. unit) alebo konceptom modulov, sú modulárnymi jazykmi. Avšak, neposkytujú vnorené moduly ani kvalifikované importovanie a exportovanie programátorom určených symbolov.

### Ostatné varianty
Super Pascal bol variant, ktorý pridal ne-numerické návestia, príkaz **return** a výrazy ako mená typov.

Univerzity v Madisone, Zürichu, Karlsruhe a Wuppertale vyvinuli kompilátory Pascal-SC a Pascal-XSC (*E*'X**tension for **S**cientific **C**omputing''), určené pre numerické výpočty. Pascal-SC bol pôvodne určený pre procesor Z80, ale neskôr bol prepísaný pre DOS (x86) a [[Motorola 68000|Motorolu 68000]]. Pascal-XSC bol v rôznych časoch portovaný na operačné systémy unix (Linux, SunOS, HP-UX, AIX) a Microsoft/IBM (MS-DOS s EMX, OS/2, Windows). Funguje na základe generovania medzikódu v jazyku C, ktorý je potom skompilovaný do natívneho vykonateľného súboru. Niektoré z rozšírení jazyka Pascal-SC boli zahrnuté do [[GNU Pascal]]u.

==Jazykové konštrukcie==
Pascal, vo svojej pôvodnej podobe, je čisto [[procedurálny jazyk]], a obsahuje tradičnú množinu riadiacich štruktúr jazyka [[ALGOL]] s rezervovanými slovami ako **if**, **then**, **else**, **while**, **for**, a podobne. Avšak, Pascal má navyše prostriedky na štruktúrovanie a iné abstrakcie, ktoré neboli zahrnuté v pôvodnom [[ALGOL 60|ALGOLe 60]], ako napríklad [[Typový systém|definovanie typov]], [[Záznam (programovanie)|záznamy]], [[Ukazovateľ (informatika)|ukazovatele]], [[Vymenovanie (dátový typ)|vymenovania]], a [[Množina (dátová štruktúra)|množiny]]. Tieto konštrukcie boli sčasti zdedené alebo inšpirované [[Simula|Simulou]]&nbsp;67, [[ALGOL 68|ALGOLom 68]], [[Niklaus Wirth|Wirth]]ovym vlastným [[ALGOL W|ALGOLom W]] a podnetmi [[C. A. R. Hoare]]ho.

=== Program ===
 Program cyklus_repeat;     (* nazov programu *)
 uses crt;                  (* pouzitie jednotky crt *)
 var i:integer;             (* deklaracia celociselnej premennej i *)
 begin
     clrscr;                (* vycistit obrazovku *)
     repeat
          writeln('Zadaj cislo (koniec = 0): ');
          readln(i);
     until i = 0;
 end.

Tento program v jazyku Pascal demonštruje cyklus <code>repeat</code>. Na začiatku každého behu cyklu je užívateľ vyzvaný, aby zadal číslo. Program načíta zadanú hodnotu a testuje ju na rovnosť s nulou. Ak je rovná nule,
program končí, ináč sa cyklus opakuje.

''Jednotka (Unit) CRT je súbor konštánt, procedúr a funkcií, ktoré umožňujú pracovať s obrazovkou a klávesnicou, čiastočne i so zvukom a časom.''

'Výstup programu:

Zadaj cislo (koniec = 0): 2

Zadaj cislo (koniec = 0): 5

Zadaj cislo (koniec = 0): 8

Zadaj cislo (koniec = 0): 0

=== Hello world ===
Programy v Pascale začínajú [[Kľúčové slovo|kľúčovým slovom]] **program** so zoznamom externých [[Deskriptor (výpočtová technika)|deskriptorov súborov]] (nepovinné v Turbo Pascale a ďalších); potom nasleduje [[Blok (programovanie)|blok]] ohraničený kľúčovými slovami **begin** a **end**. Na oddeľovanie [[Programový príkaz|príkazov]] slúžia [[Bodkočiarka|bodkočiarky]], a celý program (alebo jednotka, angl. **unit**) je ukončený bodkou. V Pascale nezáleží na veľkosti písmen.

Tu je príklad takéhoto zdrojového kódu použitého na vytvorenie veľmi jednoduchého [[Hello world]] programu:

<source lang=pascal>
program HelloWorld(output);
begin
  WriteLn('Ahoj Svet!')
  {za posledným príkazom bloku nie je potrebná žiadna ";" -
   jej pridanie zaradí do programu "nulový príkaz"}
end.
</source>

=== Dátové typy ===
Typ v Pascale, podobne ako v iných populárnych jazykoch, definuje premennú a rozsah hodnôt, ktoré je možné do tejto premennej uložiť, a tiež definuje operácie, ktoré je možné vykonávať nad premennými tohto typu. Preddefinované typy sú:



Rozsah hodnôt každého typu (okrem typu boolean) závisí od implementácie. Pre niektoré typové konverzie sa používajú funkcie, napríklad pre konverziu z <code>real</code> na <code>integer</code> sú k dispozícii tieto funkcie: <code>round</code> (zaokrúhlenie na celé číslo, pomocou [[Bankárove zaokrúhľovanie|bankárovho zaokrúhľovania]]) a <code>trunc</code> (zaokrúhlenie smerom k nule).

Programátor môže ostatné bežné dátové typy (napríklad byte, alebo chýbajúci string) zadefinovať odvodením z preddefinovaných typov prostredníctvom typových deklarácií, napríklad:

<source lang="pascal">
type
  byte        = 0..255;
  signed_byte = -128..127;
  string      = packed array[1..255] of char;
</source>

V mnohých verziách Pascalu sú často používané typy ako ''byte'' a ''string'' zadefinované priamo implementáciou jazyka.

== Štruktúra zdrojového kódu ==
**PROGRAM** meno_programu;

**USES** zoznam použitých jednotiek;

**LABEL** deklarácia návestí;

**CONST** deklarácia konštánt;

**TYPE** definícia dátových typov;

**VAR** deklarácia premenných;

**PROCEDURE** deklarácia procedúry;

**FUNCTION** deklarácia funkcie;

**BEGIN**

príkazová časť hlavného programu;

**END.*'

== Vývojové prostredia ==
V [[80. roky 20. storočia|80. rokoch 20. storočia]] získal Pascal na popularite hlavne vďaka vývojovému prostrediu *Turbo Pascal'' od firmy Borland, ktoré obsahovalo viacero programovacích nástrojov, ako sú kompilátor a debugger v jednom balíku.

## Referencie


## Pozri aj
* Object Pascal 

Kategória:Programovacie jazyky
Kategória:Pascal