Programski jezik: Razlika med redakcijama

Izbrisana vsebina Dodana vsebina
brisal neumnosti
m m/dp/slog/arg ktgr
Vrstica 1:
[[Slika:Classes_and_Methods.png|thumb|220x220px|PrimerZgled [[izvorna koda|izvorne kode]] napisane v programskem jeziku Java, ki bo izpisala sporočilo "Hello World!" na [[standardni izhod]] ko je le-ta [[prevajalnik|prevedena]] in [[izvršljiva datoteka|izvršena]].]]
 
'''Prográmski jêzik''' je [[stroj]]u berljiv [[umetni jezik]], ki je bil razvit, da izraža izračune oz. komputacije, katere lahko izvaja stroj oziroma računalnik. Programski jeziki so nastali zaradi razvoja [[računalnik]]ov in so bili sprva podrejeni temu razvoju in je zato zgodnje obdobje razvoja programskih jezikov hkrati tudi zgodovina računalnikov.{{sfn|Špegel|1971| p=147}}.
 
== Elementi ==
 
Vsi programski jeziki imajo nekaj [[osnovni podatkovni tip|osnovnih]] gradnikov za opis podatkov in procesov ali pretvorb, ki nanašajo nanje (kot npr. seštevanje dveh števil ali izbira elementa iz zbirke). Ti osnovni gradniki (primitivi) so opredeljeni s sintaktičnimi in semantičnimi pravili, ki opisujejo njihovo strukturo in pomen. Sintaksa je nabor pravil ali formul, ki določa množico (formalno pravilnih) stavkov. Pravila ne omogočajo samo ugotoviti ali je neko zaporedje stavek, določajo tudi samo zgradbo stavka, ki je nujna pri prepoznavanju njegovega pomena. Zato sta sintaksa in semantika tesno povezani.{{sfn|Wirth|1983| p=261}}
 
Vrstica 18 ⟶ 21:
Oklepaja "<" in ">" omogočata predstavitev gradnikov jezika s pomočjo besed oz. fraz naravnega jezika, znak "|" pa omogoča naštevanje alternativ. Takšna predstavitev sintakse je lahko razumljiva tako programerju kot računalniku, ki s prevajalnikom razpoznava programske stavke.{{sfn|Špegel|1971| p=169}}
 
Spodaj je preprost primerzgled sintakse, ki temelji na programskem jeziku [[Lisp (programski jezik)|Lisp programskem jeziku]]:
<source lang="bnf">izraz ::= atom | seznam
atom ::= število | simbol
Vrstica 37 ⟶ 40:
Vsi sintaktično pravilni programi niso pravilni tudi semantično. Mnogo sintaktično pravilnih programov je slabo napisanih in lahko (odvisno od specifikacij jezika in trdnosti implementacije) ustvarijo napako pri prevajanju ali izvajanju. V nekaterih primerih se lahko taki programi obnašajo nepričakovano.
 
PrimerZgled uporabe [[naravni jezik|naravnega jezika]] za sintaktično pravilni stavek, ki pa mu ni mogoče določiti pomena:
* »''Colorless green ideas sleep furiously''. -Brezbarvne zelene ideje spijo besno.«<ref>{{navedi knjigo|last=Chomsky|first=Noam|author=|authorlink= Noam Chomsky|title=Syntactic Structures|url=http://www.google.com/books?id=a6a_b-CXYAkC|year=1957|publisher=Mouton|location=The Hague/Paris}}</ref> ([[Noam Chomsky]], 1957), je slovnično pravilno oblikovan toda nima splošno priznanega pomena.
* »Janez je poročen samec.« je slovnično pravilno oblikovan stavek toda izraža pomen, ki ne more biti pravilen.
Vrstica 53 ⟶ 56:
 
=== Semantika ===
 
Izraz [[semantika]] se navezuje na pomen jezikovnih elementov v nasprotju z jezikovno obliko ([[#Sintaksa (skladnja)|sintakso]]). Včasih ima jezikovni element samo en pomen in mu je prirejena ena sama stvar. Običajno pa moremo pravi pomen besede razbrati šele iz konteksta.{{sfn|Špegel|1971| p=153}} Semantiko programskih stavkov je zelo težko opisati s formalnimi jeziki.
 
==== Statična semantika ====
 
Statična semantiksa opredeljuje omejitve za strukturo veljavnih besedil, ki jih težko izrazimo s standardnimi sintaktičnimi formalizmi.<ref name="Aaby 2004">{{cite book|last=Aaby|first=Anthony|title=Introduction to Programming Languages|year=2004|url=http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/intro.htm}}</ref> Za prevedene jezike statična semantika vključuje zlasti tista pravila, ki se jih lahko preveri med prevajanjem. Primeri vključujejo preverjanje prisotnosti deklaracij [[identifikator]]jev predno je uporabljen (v jezikih, ki takšne deklaracije zahtevajo) ali pa, da se uporabljene labele v [[vejitveni stavek|case stavku]] med seboj razlikujejo.<ref>Michael Lee Scott, ''Programming language pragmatics'', Edition 2, Morgan Kaufmann, 2006, ISBN 0-12-633951-1, p. 18–19</ref> Veliko pomembnih omejitev tega tipa (kot je to preverjanje, da so identifikatorji uporabljeni v ustreznem kontekstu, ali da klici [[podprogram]]ov vsebujejo pravilno število in tip argumentov) se lahko uveljavi tako, da se jih definira kot pravilo v [[logika|logiki]] imenovani [[sistem tipov]]. Druge oblike [[statična analiza kode|statične analize]] kot je [[analiza toka podatkov]] so lahko prav tako del statične semantike.
 
==== Dinamična semantika ====
 
Ko 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čin s katerim [[tok nadzora|kontrolne strukture]] pogojno izvajajo [[stavek (programiranje)|stavke]]. ''Dinamična semantika'' (poznana tudi kot "semantika izvajanja") jezika definira kako in kdaj naj določen konstrukt jezika izvede določeno obnašanje programa. Obstaja več načinov definiranja semantike izvajanja. Za določitev semantike izvajanja jezikov se pogosto uporabi naravni jezik.
 
Vrstica 64 ⟶ 70:
Sistem tipov definira kako programski jezik razvršča vrednosti in izraze v ''tipe'', kako z njimi ravna in kako so medsebojno povezani. Cilj sistema tipov je preverjanje in običajno uveljavljanje nekega nivoja pravilnosti napisanih programov z detekcijo nepravilnih operacij. Vsak odločljiv sistem tipov vključuje kompromis: medtem ko zavrača številne nepravilne programe, lahko prepove tudi nekatere pravilne četudi neobičajne programe. V večini tipiziranih jezikih se sistem tipov uporablja le za preverjanje tipov (''type checking'') programov, toda nekateri jeziki se zanašajo na programerja, da bo pravilno opredelil tipe. Formalno obravnavanje tipov se imenuje tudi ''[[teorija tipov]]''.
 
===== TipiziranTipizirani jezik proti netipiziranemu =====
 
Jezik je ''tipiziran'', če specifikacija vsake operacije definira tip podatkov te operacije.<ref name="typing">{{cite web|url=http://www.acooke.org/comp-lang.html|author=Andrew Cooke|title=Introduction To Computer Languages|accessdate=13 July 2012}}</ref> Na primer, podatek predstavljen z "<code>to besedilo med narekovaji </code>" je [[String literal|string]]. V večini programskih jezikov deljenje števila s stringom nima pomena; zato bo večina modernih programskih jezikov zavrnila vsak poskus izvajanja programa, ki bi izvajal takšno operacijo. V nekaterih jezikih se vsaka nesmiselna operacija zazna pri prevajanju programa (»statično« preverjanje tipov) in jo zavrne že prevajalnik; medtem ko se pri ostalih jezikih zazna šele pri izvajanju programa (»dinamično« preverjanje tipov), kar povzroči [[Obravnava izjem|izjeme]] v času izvajanja (''run-time exception''; programska napaka, ki običajno kaže na »hrošče«).
 
Vrstica 72 ⟶ 79:
 
===== Statično tipiziranje proti dinamičnemu =====
 
Glede na čas preverjanja tipov ločimo dve skupini programskih jezikov:{{sfn|Žumer|Mernik|2001| p=120}}
* jeziki statičnih tipov (''statically typed languages'') in
Vrstica 82 ⟶ 90:
 
===== Šibko tipiziranje proti močnemu =====
 
Glede na način preverjanja tipov (neodvisno od časa) programske jezike delimo na:{{sfn|Žumer|Mernik|2001| p=120}}
* močno tipizirane jezike (''strongly typed languages'') in
Vrstica 96 ⟶ 105:
 
=== Standardna knjižnica ===
 
Večina programskih jezikov ima pridruženo jedrno [[Knjižnica (računalništvo)|knjižnico]] (poznano tudi kot 'standardna knjižnica'), ki je običajno dostopna vsem implementacijam jezika. Jedrne knjižnice tipično vsebujejo definicije za splošno uporabne algoritme, podatkovne strukture in mehanizme za vhod in izhod (''input/output'').
 
Vrstica 116 ⟶ 126:
 
=== Specifikacija ===
 
Namen '''specifikacije''' programskega jezika je podroben opis jezika, ki ga lahko [[programer|uporabniki jezika]] in [[implementacija programskega jezika|implementatorji]] uporabijo pri določanju pravilnosti obnašanja [[računalniški program|programa]] glede na [[izvorna koda|izvorno kodo]].
 
Vrstica 123 ⟶ 134:
 
=== Implementacija ===
 
'''Implementacija''' programskega jezika zagotavlja način izvajanja programa na eni ali več konfiguracij strojne ali programske opreme. V splošnem obstajata dva pristopa k implementaciji programskega jezika:
''[[prevajalnik|prevajanje]]'' in ''[[interpreter|interpretiranje]]''.
Vrstica 133 ⟶ 145:
 
== Razvrstitev programskih jezikov ==
 
Od začetkov računalništva do danes je bilo napisanih veliko programskih jezikov, ki jih je mogoče razvrstiti po različnih kriterijih: po moči osnovnih operacij (po nivoju programskih jezikov), po namenu uporabe, po naravi osnovnih objektov in po drugih kriterijih.
 
Vrstica 142 ⟶ 155:
 
== Sklici ==
 
{{sklici|2}}
 
== Viri ==
 
* {{citation |editor-last=Spiller-Muys|editor-first=Franc|last=Špegel|first=Marjan|year=1971|place=Ljubljana |title=Elektronski računalniki| chapter =Programski jeziki|publisher=Elektrotehniška zveza Slovenije |isbn= |cobiss= }}
* {{citationcitat |editor-last=ŽumerSpiller-Muys|editor-first=ViljemFranc|last2last=MernikŠpegel|first2first=Marjan |year=20011971|place=Ljubljana |title=PrincipiElektronski programskihračunalniki| jezikovchapter =Programski jeziki|publisher=FakultetaElektrotehniška zazveza elektrotehniko, računalništvo in informatikoSlovenije |place=Maribor|isbn=86-435-0362-2 |cobiss=45721345 }}
* {{citationcitat |last=WirthŽumer|first=Niklaus Viljem|yearlast2=1983Mernik|placefirst2=LjubljanaMarjan |year=2001 |title=RačunalniškoPrincipi programiranjeprogramskih 2.deljezikov |publisher=DruštvoFakulteta matematikovza elektrotehniko, fizikovračunalništvo in astronomov SRSinformatiko |place=Maribor|isbn=86-435-0362-2 |cobiss=45721345 }}
* {{citat |last=Wirth|first=Niklaus |year=1983|place=Ljubljana |title=Računalniško programiranje 2.del |publisher=Društvo matematikov, fizikov in astronomov SRS |isbn= |cobiss= }}
 
{{računalniška škrbina}}
 
[[Kategorija:Programiranje]]
[[Kategorija:Programski jeziki|* ]]
 
{{Link FA|he}}