Kõrgkeel

**Kõrgkeeleks** nimetatakse arvutiteaduses programmeerimiskeelt, mis konkreetse arvuti ülesehitusest ja operatsioonisüsteemist ei sõltu. Erinevalt madalkeeltest võib kõrgkeeltes esineda loomuliku keele elemente ning neid võib olla tunduvalt kergem kasutada. Kõrgkeeled võivad automatiseerida või isegi täielikult varjata olulisi arvutisüsteemide alasid (näiteks mäluhaldust), tehes programmi arendamise protsessi arusaadavamaks ja lihtsamaks. Abstraktsioonitaseme suurus näitab, kui kõrgetasemeline vaadeldav programmeerimiskeel on.

Esimene arvutite jaoks välja töötatud kõrgkeel oli Konrad Zuse loodud Plankalkül. Kuigi Plankalkül ei leidnud tema ajal rakendust, mõjutas see Heinz Rutishauseri keelt Superplan (ja mõnel määral ka ALGOLit). Esimene tõeliselt levinud kõrgkeel oli Fortran. 1958. ja 1960. aastatel Euroopa ja Ameerika arvutiteadlaste määratletud keel ALGOL võttis esimesena kasutusele rekursiooni ja plokkstruktuurid ning oli esimene keel, mis tegi selget vahet väärtustel, nimeparameetritel ja nendele vastaval semantikal. Samuti võttis ALGOL kasutusele `while-do`-tsüklid ja `if-then-else`-konstruktsiooni. Umbes samal ajal võttis COBOL kasutusele kirjed ja Lisp hakkas esimese programmeerimiskeelena kasutama lambda-arvutust.

## Iseärasused
"Kõrgkeel" viitab masinkeelest kõrgemale abstraktsioonitasemele. Registrite, mäluaadresside ja pinudega tegelemise asemel käsitlevad kõrgkeeled muutujaid, objekte, massiive, keerukaid aritmeetilisi või kahendmuutujatega avaldisi, alamprogramme ja funktsioone, silmuseid, harusid, lukke ja muid abstraktseid infotehnoloogia mõisteid, keskendudes programmi optimaalse tõhususe asemel kasutatavusele. Erinevalt madalatasemelistest assemblerkeeltest ei oma kõrgkeeled palju elemente, mis oleksid otse masina operatsioonikoodidesse tõlgitav. Võib esineda ka muid omadusi, nagu sõnede käsitlemise rutiine, objektorienteeritud keelte funktsioone ja failide sisendeid ja väljundeid.

## Suhteline tähendus
Mõned tänapäeval kasutatavad kõrgkeeled on Python, Visual Basic, Delphi, Perl, PHP, ECMAScript, Ruby, Ada, ALGOL, BASIC, COBOL, C, C++, Fortran, Lisp, Pascal, Prolog ja paljud teised.

Terminid "kõrgkeel" ja "madalkeel" on olemuselt suhtelised. Mõne aastakümne eest peeti C programmeerimiskeelt ja muid sarnaseid keeli kõrgetasemelisteks ning assemblerkeelt madalkeeleks. Tänapäeval võivad paljud programmeerijad viidata C-keelele kui madalkeelele, kuna sellel puudub käitusajateek ning see toetab põhimõtteliselt ainult skalaaroperatsioone ja mälu otseaadresse. Seega seguneb see kergesti assemblerkeelega ja masina tasemel protsessorite ja mikrokontrolleritega.

Assemblerkeelt ennast võib pidada masinkoodi kõrgema taseme esindajaks, sest see võib pooldada lisaks konstantidele ka (piiratud) avaldisi, muutujaid, protseduure ja andmestruktuure. Masinkood on omakorda oma olemuselt veidi kõrgemal tasemel kui mikrokood või paljudes protsessorites sisemiselt kasutatavad mikrotehted.

## Täitmisviisid
Nüüdisaegsetel kõrgkeeltel on kolm üldist täitmisviisi:

; Interpreteeritud : Interpreteeritud koodi puhul loetakse selle süntaksit ja täidetakse see kohe, ilma kompileerimisetapita. Programm, mida kutsutakse interpretaatoriks, loeb igat programmi rida ning täidab vajalikud käsud. Interpretaatori ja kompilaatori hübriid koostab programmi alusel masinkoodi ning käivitab selle. Võrreldes teiste variantidega on interpretaatorid tavaliselt lihtsaimad keele käitumise rakendused.
; Kompileeritud : Kompileeritud koodi puhul viiakse selle süntaks enne käivitamist täitmisprogrammi kujule. Esineb kahte tüüpi kompileerimist:
:; Masinkoodi genereerimine : Mõned kompilaatorid viivad lähtekoodi otse masinkoodi. See on kompileerimise originaalviis. Keeli, mis tõlgitakse otse ja täielikult masinkoodi, võidakse kutsuda "täielikult kompileeritavateks" keelteks. Vaata näiteks assemblerkeelt.
:; Vahekeelde tõlkimine : Mõnikord võidakse lähtekood tõlkida esmalt vahekeelde ja alles seejärel masinkoodi. Vaheetapil võib programm olla näiteks baitkoodi kujul. Seejärel tuleb vaheetapi tulemus enne programmi täitmist interpreteerida või täiendavalt kompileerida. Virtuaalmasinad, mis täidavad baitkoodi või viivad selle täiendavalt üle masinkoodi, on hajustanud kord selge piiri vahekeelte ja täielikult kompileeritavate keelte vahel.
; Transkompileeritud : Kood võidakse viia mõne madalama keele terminitele, mille jaoks kompilaatorid juba laialdaselt saadaval on. Selliseks tõlkimiseks on levinud sihtmärgid JavaScript ja C-programmeerimiskeel. Mõned näited on CoffeeScript, Chicken Scheme ja Eiffel.

## Kõrgkeele arhitektuur
Alternatiivselt on arvutil võimalik kõrgkeelt otseselt rakendada. Arvutiarhitektuuri, mis on välja töötatud konkreetse kõrgkeele jaoks, kutsutakse kõrgkeele arhitektuuriks.

## Viited

## Välislingid
* WikiWikiWebi artikkel kõrgkeeltest
* Kõrgkeeled hajusarvutuses
* Programmeerimiskeelte tüübid ning nende eelised ja puudused