Pascal (programovací jazyk)

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".

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 (EXtension for Scientific Computing), 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 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 Pascalu.

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 ALGOLe 60, ako napríklad definovanie typov, záznamy, ukazovatele, vymenovania, a množiny. Tieto konštrukcie boli sčasti zdedené alebo inšpirované Simulou 67, ALGOLom 68, Wirthovym vlastným ALGOLom W a podnetmi C. A. R. Hoareho.

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 repeat. 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ým slovom program so zoznamom externých deskriptorov súborov (nepovinné v Turbo Pascale a ďalších); potom nasleduje blok ohraničený kľúčovými slovami begin a end. Na oddeľovanie príkazov slúžia 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:
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.

Š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. 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.