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]

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.

Načini izvršavanja[uredi]

Postoje tri načina izvršavanja programskih jezika visokog nivoa. Prema načinu izvršavanja koji je pretežno u upotrebi, ovi jezici mogu da se svrstaju u tri grupe:

Interpretirani (engl. Interpreted)
Interpretiran jezik se čita, a potom direktno izvršava. Program nazvan interpretator vrši ovo izvršavanje. U ovakve jezike se obično ubrajaju: Pajton, Rubi, Perl, Bejsik, ...
Kompilirani (engl. Compiled)
Kompiliran jezik se transformiše u izvršni oblik pre nego što se pokrene. Program koji to obavlja zove se kompilator (programski prevodilac). Postoje dve vrste kompilacije:
Stvaranje mašinskog koda (engl. Machine code generation)
Neki kompilatori pretvaraju izvorni kod direktno u mašinski kod. Ovo je prvobitni način kompilacije, a jezici čiji se kod direktno i potpuno transformiše u mašinski kod, mogli bi se nazvati „pravi“ kompilirani jezici. Primer ovakvih jezika su: C, Ada, Modula-2, FORTRAN, ...
Stvaranje međukoda (engl. Intermediate representations)
Kada se izvorni kod pretvori u međukod, u tom obliku može biti optimizovan ili sačuvan za kasnije izvršenje bez potrebe da se ponovo učitava izvorna datoteka. Ako se međukod čuva u datoteci, on se često nalazi u obliku bajt-kod. Međukod zatim mora da se interpretira ili da se dalje kompilira da bi se izbršio. Virtuelna mašina tada izvršava bajt-kod direktno ili ga transformiše u mašinski kod. Primer: Java, Icon, R...
Prevedeni (engl. Translated)
Kod napisan u jeziku visokog nivoa može se prevesti u jezik nižeg nivo za koji postoje već razvijeni kompilatori. Programski jezik S je tipičan izbor ciljnog jezika za takve prevodioce.

Vidi još[uredi]

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.

Spoljašnje veze[uredi]