b'\n_START_ARTICLE_\nProgramski jezik\n_START_PARAGRAPH_\nProgr\xc3\xa1mski j\xc3\xaazik je stroju berljiv umetni jezik, ki je bil razvit, da izra\xc5\xbea izra\xc4\x8dune oz. komputacije, katere lahko izvaja stroj oziroma ra\xc4\x8dunalnik. Programski jeziki so nastali zaradi razvoja ra\xc4\x8dunalnikov in so bili sprva podrejeni temu razvoju in je zato zgodnje obdobje razvoja programskih jezikov hkrati tudi zgodovina ra\xc4\x8dunalnikov.\n_START_SECTION_\nElementi\n_START_PARAGRAPH_\nVsi programski jeziki imajo nekaj osnovnih gradnikov za opis podatkov in procesov ali pretvorb, ki nana\xc5\xa1ajo nanje (kot npr. se\xc5\xa1tevanje dveh \xc5\xa1tevil ali izbira elementa iz zbirke). Ti osnovni gradniki (primitivi) so opredeljeni s sintakti\xc4\x8dnimi in semanti\xc4\x8dnimi pravili, ki opisujejo njihovo strukturo in pomen. Sintaksa je nabor pravil ali formul, ki dolo\xc4\x8da mno\xc5\xbeico (formalno pravilnih) stavkov. Pravila ne omogo\xc4\x8dajo samo ugotoviti ali je neko zaporedje stavek, dolo\xc4\x8dajo tudi samo zgradbo stavka, ki je nujna pri prepoznavanju njegovega pomena. Zato sta sintaksa in semantika tesno povezani._NEWLINE_Sintaksa (skladnja) opredeljuje strukturo stavkov programskega jezika, medtem ko semantika (pomenoslovje) predstavlja njen abstraktni pomen. Ker morajo vsi uporabniki jezika imeti enako predstavo o pomenu posameznih stavkov programskega jezika, morajo biti pravila, ki dolo\xc4\x8dajo sintakso in semantko natan\xc4\x8dno dolo\xc4\x8dena. Praviloma se sintakti\xc4\x8dne nepravilnosti ugotavljajo mnogo hitreje in enostavneje kot semanti\xc4\x8dne. Del programske opreme prevajalnika, ki je odgovoren za ugotavljanje omenjenih nepravilnosti, se imenuje raz\xc4\x8dlenjevalnik (angl. parser), kateri izvaja analize skladnje pred prevodom izvorne kode v strojno kodo programske opreme.\n_START_SECTION_\nSemantika\n_START_PARAGRAPH_\nIzraz semantika se navezuje na pomen jezikovnih elementov v nasprotju z jezikovno obliko (sintakso). V\xc4\x8dasih ima jezikovni element samo en pomen in mu je prirejena ena sama stvar. Obi\xc4\x8dajno pa moremo pravi pomen besede razbrati \xc5\xa1ele iz konteksta. Semantiko programskih stavkov je zelo te\xc5\xbeko opisati s formalnimi jeziki.\n_START_SECTION_\nStati\xc4\x8dna semantika\n_START_PARAGRAPH_\nStati\xc4\x8dna semantiksa opredeljuje omejitve za strukturo veljavnih besedil, ki jih te\xc5\xbeko izrazimo s standardnimi sintakti\xc4\x8dnimi formalizmi. Za prevedene jezike stati\xc4\x8dna semantika vklju\xc4\x8duje zlasti tista pravila, ki se jih lahko preveri med prevajanjem. Primeri vklju\xc4\x8dujejo preverjanje prisotnosti deklaracij identifikatorjev predno je uporabljen (v jezikih, ki tak\xc5\xa1ne deklaracije zahtevajo) ali pa, da se uporabljene labele v case stavku med seboj razlikujejo. Veliko pomembnih omejitev tega tipa (kot je to preverjanje, da so identifikatorji  uporabljeni v ustreznem kontekstu, ali da klici podprogramov vsebujejo pravilno \xc5\xa1tevilo in tip argumentov) se lahko uveljavi tako, da se jih definira kot pravilo v logiki imenovani sistem tipov. Druge oblike stati\xc4\x8dne analize kot je analiza toka podatkov so lahko prav tako del stati\xc4\x8dne semantike.\n_START_SECTION_\nDinami\xc4\x8dna semantika\n_START_PARAGRAPH_\nKo so enkrat podatki opredeljeni, se mora stroju podati navodila za izvajanje operacij nad podatki. Na primer, semantika lahko definira strategijo s katero se izrazi ovrednotijo za vrednosti ali na\xc4\x8din s katerim kontrolne strukture pogojno izvajajo stavke. Dinami\xc4\x8dna semantika (poznana tudi kot "semantika izvajanja") jezika definira kako in kdaj naj dolo\xc4\x8den konstrukt jezika izvede dolo\xc4\x8deno obna\xc5\xa1anje programa. Obstaja ve\xc4\x8d na\xc4\x8dinov definiranja semantike izvajanja. Za dolo\xc4\x8ditev semantike izvajanja jezikov se pogosto uporabi naravni jezik.\n_START_SECTION_\nSistemi tipov\n_START_PARAGRAPH_\nSistem tipov definira kako programski jezik razvr\xc5\xa1\xc4\x8da vrednosti in izraze v tipe, kako z njimi ravna in kako so medsebojno povezani. Cilj sistema tipov je preverjanje in obi\xc4\x8dajno uveljavljanje nekega nivoja pravilnosti napisanih programov z detekcijo nepravilnih operacij. Vsak odlo\xc4\x8dljiv sistem tipov vklju\xc4\x8duje kompromis: medtem ko zavra\xc4\x8da \xc5\xa1tevilne nepravilne programe, lahko prepove tudi nekatere pravilne \xc4\x8detudi neobi\xc4\x8dajne programe. V ve\xc4\x8dini tipiziranih jezikih se sistem tipov uporablja le za preverjanje tipov (type checking) programov, toda nekateri jeziki se zana\xc5\xa1ajo na programerja, da bo pravilno opredelil tipe. Formalno obravnavanje tipov se imenuje tudi teorija tipov.\n_START_SECTION_\nTipizirani jezik proti netipiziranemu\n_START_PARAGRAPH_\nJezik je tipiziran, \xc4\x8de specifikacija vsake operacije definira tip podatkov te operacije. Na primer, podatek predstavljen z "to besedilo med narekovaji " je string. V ve\xc4\x8dini programskih jezikov deljenje \xc5\xa1tevila s stringom nima pomena; zato bo ve\xc4\x8dina modernih programskih jezikov zavrnila vsak poskus izvajanja programa, ki bi izvajal tak\xc5\xa1no operacijo. V nekaterih jezikih se vsaka nesmiselna operacija zazna pri prevajanju programa (\xc2\xbbstati\xc4\x8dno\xc2\xab\xc2\xa0preverjanje tipov) in jo zavrne \xc5\xbee prevajalnik; medtem ko se pri ostalih jezikih zazna \xc5\xa1ele pri izvajanju programa (\xc2\xbbdinami\xc4\x8dno\xc2\xab\xc2\xa0preverjanje tipov), kar povzro\xc4\x8di izjeme v \xc4\x8dasu izvajanja (run-time exception; programska napaka, ki obi\xc4\x8dajno ka\xc5\xbee na \xc2\xbbhro\xc5\xa1\xc4\x8de\xc2\xab)._NEWLINE_Netipizirani jezik, kot je to ve\xc4\x8dina zbirnih jezikov, dovoljuje izvajanje katerekoli operacije nad katerimkoli podatkom, in se jih obi\xc4\x8dajno obravnava kot zaporedja bitov razli\xc4\x8dne dol\xc5\xbeine._NEWLINE_V praksi se malo jezikov opredeljuje kot tipizirane s stali\xc5\xa1\xc4\x8da teorije tipov (preverjanje in zavra\xc4\x8danje vseh operacij), ve\xc4\x8dina modernih jezikov ponuja dolo\xc4\x8deno stopnjo tipizacije. Nekateri jeziki omogo\xc4\x8dajo eksplicitne pretvorbe med podatkovnimi tipi; s tem se varnost tipiziranja zamenja z natan\xc4\x8dnej\xc5\xa1o kontrolo izvajanja programa (glej eksplicitne pretvorbe).\n_START_SECTION_\nStandardna knji\xc5\xbenica\n_START_PARAGRAPH_\nVe\xc4\x8dina programskih jezikov ima pridru\xc5\xbeeno jedrno knji\xc5\xbenico (poznano tudi kot \'standardna knji\xc5\xbenica\'), ki je obi\xc4\x8dajno dostopna vsem implementacijam jezika. Jedrne knji\xc5\xbenice tipi\xc4\x8dno vsebujejo definicije za splo\xc5\xa1no uporabne algoritme, podatkovne strukture in mehanizme za vhod in izhod (input/output)._NEWLINE_Jedrno knji\xc5\xbenico jezika uporabniki pogosto tretirajo kot del jezika, \xc4\x8deprav jo oblikovalci smatrajo kot lo\xc4\x8deno entiteto. Veliko specifikacij jezika definira jedro, ki mora biti na voljo vsem implementacijam in v primeru standardiziranih jezikom je tak\xc5\xa1na knji\xc5\xbenica lahko zahtevana. Meja med jezikom in njegovo jedrno knji\xc5\xbenico se razlikoju od jezika do jezika. Nekateri jeziki so zasnovani tako, da se dolo\xc4\x8denih sintakti\xc4\x8dnih konstruktov ne more opisati brez nana\xc5\xa1anja na jedrno knji\xc5\xbenico.\n_START_SECTION_\nImplementacija\n_START_PARAGRAPH_\nImplementacija programskega jezika zagotavlja na\xc4\x8din izvajanja programa na eni ali ve\xc4\x8d konfiguracij strojne ali programske opreme. V splo\xc5\xa1nem obstajata dva pristopa k implementaciji programskega jezika:_NEWLINE_prevajanje in interpretiranje._NEWLINE_Izhodni rezultat prevajalnika lahko izvaja strojna oprema ali program, ki se imenuje interpreter. V nekaterih implementacijah uporaba pristopa interpreterja zabri\xc5\xa1e mejo med prevajanje in interpreterjem. Na primer, nekatere implementacije programskega jezika BASIC prevajajo in potem izvajajo vir vrstico po vrstico.   _NEWLINE_Programi, ki se izvajajo direktno na strojni opremi, se obi\xc4\x8dajno izvajajo veliko hitreje kot tisti, ki jih izvaja interpreter v programski opremi._NEWLINE_Ena izmed tehnik za izbolj\xc5\xa1anje izvajanja interpretiranih programov je pred\xc4\x8dasno prevajanje (just-in-time compilation). Tukaj navidezni stroj, tik pred izvajanjem, prevede bloke bytecode, ki jih bo uporabila strojna koda za direktno izvajanje v strojni opremi.\n_START_SECTION_\nRazvrstitev programskih jezikov\n_START_PARAGRAPH_\nOd za\xc4\x8detkov ra\xc4\x8dunalni\xc5\xa1tva do danes je bilo napisanih veliko programskih jezikov, ki jih je mogo\xc4\x8de razvrstiti po razli\xc4\x8dnih kriterijih: po mo\xc4\x8di osnovnih operacij (po nivoju programskih jezikov), po namenu  uporabe, po naravi osnovnih objektov in po drugih kriterijih._NEWLINE_Programski jeziki  so glede na svoj abstrakcijski nivo kategorizirani od prve do pete generacije. Jeziki ni\xc5\xbejih nivojev so bli\xc5\xbeje zapisu, ki ga razumejo stroji, medtem ko so jeziki vi\xc5\xa1jih novojev razumljivej\xc5\xa1i \xc4\x8dloveku in so skladenjsko bolj podobni naravnim jezikom._NEWLINE_Prva generacija je strojni jezik, ki ga razume centralna procesna enota, druga generacija je zbirni programski jezik, katerega skladenjska pravila so opredeljena z mnemoniki in operandi oziroma parametri, tretja generacija so visokonivojski programski jeziki (angl. high-level programming languages - HLL), \xc4\x8detrta zelo visokonivojski programski jeziki (angl. very high-level programming languages - VHLL) in peta generacija (angl. domain-specific languages - DSL), ki opredeljuje programske jezike, ki slu\xc5\xbeijo re\xc5\xa1evanju specifi\xc4\x8dnih problemov ozkega podro\xc4\x8dja._NEWLINE_Visokonivojski programski jezik je skupek skladenjskih in pomenoslovnih pravil, podatkovnih struktur in vmesnikov, ki programerju slu\xc5\xbeijo kot orodje za re\xc5\xa1evanje problemov oziroma implementacijo ra\xc4\x8dunalni\xc5\xa1kega programa, v \xc4\x8dloveku bolj prijazni, razumljivi strukturi in pomenu. Programski jeziki od druge do pete generacije se uporabljajo zato, ker sta \xc4\x8dlovekova in ra\xc4\x8dunalnikova \xc2\xbbgovorica\xc2\xab\xc2\xa0tako razli\xc4\x8dni, da je pisati programje v jeziku ra\xc4\x8dunalnika (strojni kodi) zelo zahtevno. Zbirni jezik se \xc5\xa1e vedno uporablja zlasti med poklicnimi programerji na podro\xc4\x8dju sistemskega programiranja.'