Programski jezik visokog nivoa

Iz Vikipedije, slobodne enciklopedije
Skoči na: navigacija, pretraga

Programski jezik visokog novoa je programski jezik sa jakom apstrakcijom u odnosu na bazično korišćenje kompjutera. U poređenju sa programskim jezikom niskog nivoa, programski jezik visokog novoa može koristiti elemente iz prirodnih jezika, biti lakši za korišćenje i tako čineći proces izrade programa jednostavnijim i razumljivijim u odnosu na jezik niskog nivoa. Količina apstrakcije definiše na koliko „visokom nivou“ je programski jezik.

Prvi programski jezik visokog nivoa koji je dizajniran za računare je Plankalkul, kreiran od strane Konrad Zuse [1]

Sadržaj

Karakteristike [uredi]

"Jezik visokog nivoa“ odnosi se na viši nivo apstrakcije od mašinskog jezika. Umesto da se maniputacije registarima, memorijskim adresama i poziva steka, na visokom nivou programski jezici rade sa promenljivim, nizovima, objektima, složenom aritmetikom i Bulovim izrazima, potprocedurama i funkcijama, petljama, nitima i njihovom sinhronizacijom, regularnim izrazima i drugim apstraktnim pojmovima računarske nauke, sa fokusom na upotrebljivost u odnosu na optimalanu programsku efikasnosnost. Za razliku od programskih jezika niskog nivoa, visoki jezici imaju malo, ili nimalo, jezičkih elemenata koji se direktno prevode u nativni mašinski kod. Ostale karakteristike, kao što su rutine za rukovanje niskama i objektno-orijentisane odlike jezika kao i procedure za upis/čitanje iz datoteka, mogu biti prisutne u ovim jezicima.

Cena apstrakcije [uredi]

Dok su visoki jezici namenjeni da se kompleksno programiranje učini jednostavnije, jezici niskog nivoa će često proizvesti efikasniji kod. Cena apstrakcije je barijera koja sprečava da se tehnike programiranja iz jezika visokog nivoa primenjuju u situacijama u kojima su računarski resursi ograničeni ili je naglasak na efikasnosti i optimizaciji programa. Odlike visokih jezika kao što su generičke strukture podataka, interpretacija koda u toku izvršavanja programa i datoteke sa kodom često rezultuju sporijim izvršenjem programa, većom memorijskom potrošnjom i programom veće veličine. Iz tog razloga, kod koji treba da se izvršava vrlo brzo i efikasno može da zahteva korišćenje jezika nižeg nivoa, čak i ako bi pisanje koda u jeziku višeg nivoa olakšalo programiranje. U mnogim slučajevima, kritični delovi u jezicima visokog nivoa mogu da se ručno ispišu u asemblerskom jeziku, što bi dovelo do mnogo bržeg, efikasnijeg i optimizovanijeg programa.

Međutim, sa sve većom složenošću savremenih mikroprocesorskih arhitektura, dobro dizajnirani kompajleri za jezike visokog nivoa će često proizvesti kod koji je gotovo istog reda efikasnosti u odnosu na kod koji je programer ručno napisao na jeziku niskog nivoa, i veća apstrakcija može omogućava moćne tehnike programiranja koje obezbeđuju bolje ukupne rezultate od svojih kolega koji rade u okruženju jezika niskog nivoa.

Jezici visokog nivoa su dizajnirani da budu nezavisni od strukture i arhitekture određenog kompjutera. Ovo omogućava da se program napisan u ovom jeziku izvršava na različitim računarima.

Relativno značenje [uredi]

Pojmovi visok nivo i nizak nivo (apstrakcije programskih jezika) su u suštini relativni. Pre nekoliko decenija, programski jezik S, i slični jezici, su najčešće smatrani jezicima na „visokom nivou“, jer podržavaju koncepte kao što su evaluacija izraza, parametarizonane rekurzivne funkcije, i tipove podataka i strukture, dok je asemblerski jezik smatran za jezik „niskog nivoa“. Mnogi programeri danas smatraju programski jezik S kao jezik niskog nivoa, jer nema razne karakteristike mnogih modernih jezika (nema objektno-orijentisan pristup, sistem za sakupljanja smeća, itd), u osnovi podržava samo skalarne operacije, i pruža direktno memorijsko adresiranje. To se lako uklapa sa asemblerskim jezikom i mašinskom nivou procesora, a i mikrokontrolera.

Asemblerski jezik se može smatrati za viši nivo predstavljanja mašinskog koda, jer podržava koncepte kao što su konstante i (delimično) izraze, ponekad čak i promenljive, procedure i strukture podataka. Mašinski kod, sa svoje strane, je na nešto višem nivou nego mikro-kod ili mikro-operacija koje se koriste interno u mnogim procesorima.

Modeli izvršavanja [uredi]

Postoje tri modela izvršavanja savremenih visokih jezika:

Interpreted (engl. Interpreted)
Interpretiran jezik se čita, a potom se odmah direktno izvršava, bez faze prevođenja. Program nazvan prevodilac čita svaku programsku liniju programskog toka, konvertuje je u mašinski kod, i izvršava je. Mašinski kod se zatim odbacuje, i iznova se tumačiti ako se linija programskog koda ponovo izvršava.
Kompailed (engl. Compiled)
Kompiliran jezik se transformiše u izvršni oblik pre nego što se pokrene. Program koji to obavlja zove se kompajler(prevodilac). Postoje dve vrste kompilacije:
Mašina za generisanje koda (engl. Machine code generation)
Neki kompajleri kompajliraju izvorni kod direktno u mašinski kod. Ovo je originalni način kompilacije, a jezici koji se direktno i potpuno transformišu u nativni mašinski kod na ovaj način bi se mogli nazvati „pravi“ kompajlirani jezici.
Srednja reprezentacija (engl. Intermediate representations)
Kada je jezik kompajliran na srednjoj reprezentaciji, ta reprezentacija može biti optimizovana ili sačuvana za kasnije izvršenje bez potrebe da ponovo učitava izvorna datoteka. Kada se srednja reprezentacija sačuva, ona se često predstavlja kao bajt-kod. Srednja reprezentacija zatim mora se interpretira ili da se dalje kompajlira da bi se izvršila. Virtuelna mašina tada izvršava bajt-kod direktno ili ga transformiše se dalje u mašinski kod.
Prevod (engl. Translated)
Jezik se može prevesti u niži nivo programskog jezika za koji nativni kompajleri su već široko dostupni. Programski jezik S je tipičan odabir za takve prevodilace.

Reference [uredi]

  1. ^ Giloi, Wolfgang, K. (1997). "Konrad Zuse's Plankalkül: The First High-Level "non von Neumann" Programming Language". IEEE Annals of the History of Computing, vol. 19, no. 2, pp. 17–24, April-June, 1997. (abstract), Pristupljeno 24. 4. 2013.

Vidi još [uredi]

Spoljašnje veze [uredi]