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

Програмски језик је формални језик који се може користити за контролу понашања машине, нарочито рачунара.[2]

Изворни код једноставног рачунарског програма написан програмским језиком C, чији је излаз порука „Hello, world!” након што се програм компилира и изврши.[1]

Најранија позната програмибилна машина која је претходила изуму дигиталног рачунара био је аутоматски флаутиста, направа коју су у 9. веку описала браћа Муса из Багдада, током Исламске златне ере.[3] Почетком 1800-их, „програми” су кориштени за управљање радом машина као што су Жакаров разбој, музичка кутија или свирач клавира.[4]

Програмски језици се користе да олакшају комуникацију са рачунаром приликом организовања и манипулације информација, али и да прецизно изразе алгоритме. Неки аутори ограничавају израз „програмски језик“ само на језике којима се могу изразити сви могући алгоритми, а понекад се користи израз „рачунарски језик“, који се односи на више ограничене вештачке језике. Створено је више хиљада програмских језика, и нови се стварају сваке године. Многи програмски језици језици захтевају да се прорачун специфицира у императивној форми[5][6] (нпр., као секвенца операција које се морају извршити), док други језици користе друге форме програмских спецификација, као што је декларативна форма[7][8] (нпр. жељени резултат се специфицира, а не како да се оствари).

Опис програмског језика се обично дели у две компоненте синтаксу (форму) и семантику (значење). Неки језици су дефинисани спецификационим документом (на пример, C програмски језик је специфициран путем ISO стандарда), док други језици (као што је Перл) имају доминантну имплементацију која се третира као референца. Неки језици имају оба вида дефиниције, при чему је основни језик дефинисан стандардом, а екстензије се узимају из доминантне имплементације.

Дефиниције

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

Програмски језици се, према начину описивања рада програма, деле на функцијске (Лисп, Scheme), процедуралне (C, Паскал, Бејзик), секвенцијалне и објектно-оријентисане (Јава, Ада), структуралне (SQL) и многе друге. Програмски језици по овој подели могу бити и мешовити, тј. да дозвољавају различите парадигме у оквиру истог програма, те нпр. C++} дозвољава и објектно-оријентисани и процедурални приступ, штавише процедурални приступ је неопходан при дефиницији почетне тачке програма у функцији main.

Неки, мада не сви, аутори ограничавају термин „програмски језик” на оне језике који могу да изразе све могуће алгоритме.[2][9] Својства која се обично сматрају важним за конституцију програмског језика обухватају:

Функција и циљ
Рачунарски програмски језик је језик који се користи за писање рачунарских програма, чиме су обухваћени рачунар који изводи неку врсту рачунања[10] или алгоритам и могуће контролу спољашњих уређаја као што су штампачи, дискови за чување података, роботи,[11] и тако даље. На пример, PostScript програме фреквентно праве други програми ради контроле рачунарског притера или дисплеја. Генералније, програмски језик може да опише рачунање на некој, можда апстрактној, машини. Генерално је прихваћено да комплетна спецификација за програмски језик обухвата опис, често идеализовани, машине или процесора за тај језик.[12] У већини практичних сценарија, програмски језик је везан за рачунар; консеквентно, програмски језици се обично дефинишу и проучавају на тај начин.[13] Програмски језици се разликују од природних језика по томе што се природни језици једино користе за комуникацију међу људима, док програмски језици исто тако омогућавају људима да комуницирају инструкције машинама.
Апстракције
Програмски језици обично садрже апстракције за дефинисање и манипулисање структурама података или контролисање извршног протока. Практична неопходност да програмски језик подржава адекватне апстракције је изражена принципом апстракције,[14] који се понекад формулише као препорука програмеру да на одговарајући начин користи такве апстракције.[15]
Изражајна моћ
Теорија израчунљивости класификује језике по прорачунима које су способни да изразе. У свим језицима који су потпуни у Тјуринговом смислу може се имплементирати исти сет алгоритама. ANSI/ISO SQL-92 и Charity су примери језика који нису Тјурингов потпуни, мада се често називају програмским језицима.[16][17]

Језици за обележавање као што су XML, HTML, или troff, и који дефинишу структуиране податке, обично се не сматрају програмским језицима.[18][19] Програмски језици могу, међутим, да имају заједничку синтаксу са језицима за обележавање, ако је рачунарска семантика дефининсана. XSLT, на пример, је Тјурингов комплетан XML дијалекат.[20][21][22] Штавише, LaTeX, који се углавном користи за структуирање докумената, исто тако садржи пун Тјурингов комплетан подскуп.[23][24]

Термин рачунарски језик се понекад користи синонимно са програмским језиком.[25] Међутим, употреба ова два термина варира међу ауторима, а постоје разлике и у погледу њиховог тачног опсега. Један облик употребе описује програмске језике као подскуп рачунарских језика.[26]:163–170 У том смислу, језици који се користе у рачунарству са различитим циљевима него што су изражавања рачунарских програма генерално су наменски дизајнирани рачунарски језици. На пример, језици за обележавање се понекад називају рачунарским језицима да би се нагласило да они нису намењени да се користе за програмирање.[27]

Једно алтернативно гледиште на употребу језика сматра програмске језике теоретским констрактима за програмирање апстрактних машина, а рачунарске језике њиховим подскупом који се извршава на физичким рачунарима, који имају коначне хардверске ресурсе.[28] Џон Рејнолдс наглашава да су језици са формалном спецификацијом у истој мери програмски језици колико су и језици намењени извршавању. Он исто тако сматра да су текстуални, па и чак графички уноси, који утичу на понашање рачунара програмски језици, упркос чињенице да они обично нису Тјуриншки комплетни, и напомиње да је игнорисање концепата програмских језика разлог постојања многих недостатака у улазним форматима.[29]

Машински и асемблерски језици

Машински језик се састоји од нумеричког кода за операције који одређени рачунар може директно извршити.[30] Тај код је алфанумеричка серија 0 и 1, или бинарни код (бајт), који се често претвара у хексадецимални код (на бази броја 16), ради лакше читљивости и модификације. Инструкције машинских језика обично користе један број бајтова за представљање операција, сабирање на примјер, а други за представљање операнда (бројева са којима се врши операција) и/или локације за слиједећу инструкцију. Машински језик је тежак за читање и писање, пошто не личи на конвенционално математичко представљање нити на природни језик, а његов код варира од рачунара до рачунара.

Асемблерски језик је један ниво изнад машинског језика. Користи кратки мнемонички код за инструкције и омогућава програмеру да уноси имена за блокове меморије која садржи податке. Дизајниран је да омогући лако превођење у машински језик. Иако се блокови података у асемблерском језику позивају преко имена, a не преко адресе у меморији, ипак не постоји могућност софистикованог организовања сложених информација. Као и машински језик, асемблерски језик захтијева од програмера детаљно познавање рачунарске архитектуре. Користан је када су ти детаљи важни, односно приликом програмирања рачунара за интеракцију са улазним и излазним уређајима, као што су штампачи, скенери, уређаји за чување података и информација (оптички и чврсти дискови), итд.

Алгоритамски језици

Алгоритамски језици су дизајнирани да изразе математичка и симболичка израчунавања. Њима се могу изразити алгебарске операције на сличан начин као у математици и омогућавају коришћење потпрограма у којима се пакују најчешће коришћене операције, које је могуће поново искористити.

Фортран

Први важнији алгоритамски језик у историји програмирања је Фортран (скраћеница од енглеског „formula translation“). Дизајнирао га је тим програмера америчке компаније IBM, 1957. године, на чијем је челу био Џон Бакус. Дизајниран је са идејом да служи потребама научника и научних израчунавања са реалним бројевима (бројевима са покретним зарезом) као и скуповима реалних бројева организованих у један или више низова.

Алгол

Алгол (скраћеница од енглеског израза algorithmic language - „алгоритамски језик“) је дизајнирао комитет америчких и европских научника рачунарства за сврху објављивање алгоритама, али и за рачунарска израчунавања, између 1958. и 1960. године. Алгол посједује рекурзивне потпрограме, односно процедуре које могу саме себе позивати приликом рјешавања задатог проблема, редукујући га на мањи проблем било које врсте. Новост у Алголу је блоковна структура, гдје је програм компонован од блокова и може да садржи и податке и инструкције које имају исту структуру као и сам програм. Блоковна структура је врло брзо постала стандард за конструисање масивних програма од малих компоненти.

Лисп

Лисп (скраћеница од енглеског list processing) је развио и имплементирао Џон Макарти око 1960. године, базирајући га на математичкој теорији рекурзивних функција. Програм развијен у Lisp-у је функција примијењена на податке, а не секвенца процедуралних корака, као што је случај у Фортрану и Алголу.

C

Програмски језик C су развили Денис Ричи и Брајан Керниган 1972. године, у АТ&Т корпорацији за програмирање оперативних система.

Развој програмских језика

Види још

Референце

Литература

Спољашње везе