Програмски језик високог нивоа

Програмски језик високог нивоа је програмски језик са јаком апстракцијом у односу на базично коришћење компјутера. У поређењу са програмским језиком ниског нивоа, програмски језик високог нивоа може користити елементе из природних језика, бити лакши за коришћење и тако чинећи процес израде програма једноставнијим и разумљивијим у односу на језик ниског нивоа. Количина апстракције дефинише на колико „високом нивоу“ је програмски језик.

Први програмски језик високог нивоа који је дизајниран за рачунаре је Планкалкул, који је креирао Конрад Цузе.[1]

Карактеристике уреди

"Језик високог нивоа“ односи се на виши ниво апстракције од машинског језика. Уместо да се манипулише регистрима, меморијским адресама и позивима стека, на високом нивоу програмски језици раде са променљивим, низовима, објектима, сложеном аритметиком и Буловим изразима, потпроцедурама и функцијама, петљама, нитима и њиховом синхронизацијом, регуларним изразима и другим апстрактним појмовима рачунарске науке, са фокусом на употребљивост у односу на оптималану програмску ефикасност. За разлику од програмских језика ниског нивоа, високи језици имају мало, или нимало, језичких елемената који се директно преводе у нативни машински код. Остале карактеристике, као што су рутине за руковање нискама и објектно-оријентисане одлике језика као и процедуре за упис/читање из датотека, могу бити присутне у овим језицима.

Цена апстракције уреди

Док су високи језици намењени да се комплексно програмирање учини једноставније, језици ниског нивоа ће често произвести ефикаснији код. Цена апстракције је баријера која спречава да се технике програмирања из језика високог нивоа примењују у ситуацијама у којима су рачунарски ресурси ограничени или је нагласак на ефикасности и оптимизацији програма. Одлике високих језика као што су генеричке структуре података, интерпретација кода у току извршавања програма и датотеке са кодом често резултују споријим извршењем програма, већом меморијском потрошњом и програмом веће величине. Из тог разлога, код који треба да се извршава врло брзо и ефикасно може да захтева коришћење језика нижег нивоа, чак и ако би писање кода у језику вишег нивоа олакшало програмирање. У многим случајевима, критични делови у језицима високог нивоа могу да се ручно испишу у асемблерском језику, што би довело до много бржег, ефикаснијег и оптимизованијег програма.

Међутим, са све већом сложеношћу савремених микропроцесорских архитектура, добро дизајнирани компајлери за језике високог нивоа ће често произвести код који је готово истог реда ефикасности у односу на код који је програмер ручно написао на језику ниског нивоа, и већа апстракција може омогућава моћне технике програмирања које обезбеђују боље укупне резултате од својих колега који раде у окружењу језика ниског нивоа.

Језици високог нивоа су дизајнирани да буду независни од структуре и архитектуре одређеног компјутера. Ово омогућава да се програм написан у овом језику извршава на различитим рачунарима.

Релативно значење уреди

Појмови висок ниво и низак ниво (апстракције програмских језика) су у суштини релативни. Пре неколико деценија, програмски језик С, и слични језици, су најчешће сматрани језицима на „високом нивоу“, јер подржавају концепте као што су евалуација израза, параметаризонане рекурзивне функције, и типове података и структуре, док је асемблерски језик сматран за језик „ниског нивоа“. Многи програмери данас сматрају програмски језик С као језик ниског нивоа, јер нема разне карактеристике многих модерних језика (нема објектно-оријентисан приступ, систем за сакупљања смећа, итд), у основи подржава само скаларне операције, и пружа директно меморијско адресирање. То се лако уклапа са асемблерским језиком и машинском нивоу процесора, а и микроконтролера.

Асемблерски језик се може сматрати за виши ниво представљања машинског кода, јер подржава концепте као што су константе и (делимично) изразе, понекад чак и променљиве, процедуре и структуре података. Машински код, са своје стране, је на нешто вишем нивоу него микрокод или микрооперација које се користе интерно у многим процесорима.

Начини извршавања уреди

Постоје три начина извршавања програмских језика високог нивоа. Према начину извршавања који је претежно у употреби, ови језици могу да се сврстају у три групе:

  • Интерпретирани (енгл. Interpreted): Интерпретиран језик се чита, а потом директно извршава. Програм назван интерпретатор врши ово извршавање. У овакве језике се обично убрајају: Пајтон, Руби, Перл, Бејсик, ...
  • Компилирани (енгл. Compiled): Компилиран језик се трансформише у извршни облик пре него што се покрене. Програм који то обавља зове се компилатор (програмски преводилац). Постоје две врсте компилације:
    Стварање машинског кода (енгл. Machine code generation): Неки компилатори претварају изворни код директно у машински код. Ово је првобитни начин компилације, а језици чији се код директно и потпуно трансформише у машински код, могли би се назвати „прави“ компилирани језици. Пример оваквих језика су: C, Ада, Модула-2, FORTRAN, ...
    Стварање међукода (енгл. Intermediate representations): Када се изворни код претвори у међукод, у том облику може бити оптимизован или сачуван за касније извршење без потребе да се поново учитава изворна датотека. Ако се међукод чува у датотеци, он се често налази у облику бајт-код. Међукод затим мора да се интерпретира или да се даље компилира да би се извршио. Виртуелна машина тада извршава бајт-код директно или га трансформише у машински код. Пример: Јава, Icon, R...
  • Преведени (енгл. Translated): Код написан у језику високог нивоа може се превести у језик нижег ниво за који постоје већ развијени компилатори. C је типичан избор циљног језика за такве преводиоце.

Види још уреди

Референце уреди

  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), Приступљено 24. 4. 2013.

Спољашње везе уреди