**Programski jezik visoke razine** ili **viši programski jezik** je programski jezik koji, u usporedbi sa programskim jezicima niske razine, može biti apstraktniji, lakši za uporabu, ili prenosiviji po platformama. Takvi jezici često apstrahiraju CPU operacije poput modela pristupa memoriji i upravljanje djelokrugom.

Osobine jezika visoke razine
----------------------------

Naziv "jezik visoke razine" ne implicira nužno da je jezik uvijek superiorniji programskom jeziku niske razine - ustvari, vrijedi obrat ukoliko je kriterij dubina i sveobuhvatnost zahtijevanog znanja o djelovanju računala. Umjesto toga, naziv "jezik visoke razine" se više odnosi na višu razinu apstrakcije u odnosu na strojni jezik. Umjesto da se barata sa registrima, memorijskim adresama i pozivnim stogovima, jezici visoke razine barataju sa varijablama, nizovima te složenim aritmetičkim ili bulovskim izrazima.Također, nemaju opkode koji izravno prevode jezik u strojni kod, za razliku od jezika niske razine kao što je asemblerski jezik. Mogu biti prisutne i druge osobine, poput potprograma za manipulaciju stringovima, objektno-orijentirane osobine jezika te ulazno/izlazne operacije nad datotekama.

Stereotipično, jezici visoke razine čine složeno programiranje jednostavnijim, dok jezici niske razine proizvode učinkovitiji izvodivi strojni kod. U jeziku visoke razine, složeni elementi mogu biti razbijeni u jednostavnije, iako još uvijek relativno složene, gradivne elemente za koje jezik pruža apstrakcije, te na taj način onemogućuje programeru da "otkriva toplu vodu". Iz ovog razloga, strojni kod koji se treba izvršavati osobito brzo i učinkovito može biti napisan u jeziku niske razine, čak i kad bi jezik visoke razine učinio programiranje znatno jednostavnijim.

U drugu ruku, sa rastućom složenošću suvremenih mikroprocesorskih arhitektura, optimirajući jezični procesori za jezike visoke razine često proizvode učinkovitiji nego što bi većina programera niske razine učinila ručno.

### Relativno značenje

Nazivi "visoke razine" i "niske razine" su inherentno relativni. Izvorno, asemblerski jezik se smatrao niske razine a COBOL, C itd. su smatrani jezicima visoke razine, s obzirom da su dozvoljavali apstrakciju funkcija, varijabli i evaluacije izraza, te zbog toga što su trebali biti prevedeni u asembler prije prevođenja u strojni kod. Mnogi programeri današnjice mogu referirati na C kao na jezik niske razine, s obzirom da još uvijek dozvoljava izravan pristup memorijskim adresama, te pruža izravan pristup asemblerskoj razini.

Modeli izvršavanja
------------------

Postoje tri modela izvršavanja suvremenih jezika visoke razine:

Interpretirani Interpretirani jezici su izvedeni odmah nakon čitanja izvornog koda, bez međustadija prevođenja.
Kompiliran Kompilirani jezici su transformirani u izvodivi oblik prije pokretanja. Postoje dva tipa kompiliranja:
Međukod Kad je jezik kompiliran u međukod, ta reprezentacija može biti optimirana ili spremljena za kasnije izvršavanje bez potrebe za ponovnim čitanjem datoteke izvornog koda. Kad je međukod spremljen, često je predstavljen bajtkodom.
Generiranje strojnog kodaNeki jezici kompiliraju direktno u strojni kod (ili asemblerski jezik). Virtualni strojevi koji izvršuju bajtkod izravno ili ga dalje transformiraju su zamutili jednoć čistu distinkciju između međukoda i istinski kompiliranih jezika.
Preveden (translatiran) Jezik može biti translatiran u programski jezik niske razine za koji već postoje kompilatori koji generiranju nativni kod. C je česta meta za takve prevoditelje.

Povezano
--------

* Programski jezik niske razine