Programmeringsspråk

**Programmeringsspråk** er eit kunstig språk som blir brukt for å kontrollere ei datamaskin. Akkurat som menneskelege språk har programmeringsspråk syntaks og semantiske reglar for å definere meining. Til motsetning frå menneske, så har ei datamaskin trong til å få instruksjonar skildra 100 % komplett, det vil seie utan noko som helst tolking. Dette gjev særskilde krav til programmeringsspråka på ein eintydig og komplett måte.

Ein deler ofte programmeringsspråk opp i høgnivå- og lågnivåspråk, avhengig av kor ulikt programmeringsspråket er i forhold til maskinkoden kompilatoren vil lage. Assembler er eit typisk lågnivåspråk der ein nærmast skriv kommandoar direkte til prosessoren. BASIC er på den andre sida eit høgnivåspråk der ein kommando i programmeringsspråket ofte blir til fleire, og meir samansette kommandoar, i maskinkoden.

For høgnivå programmeringsspråk skil ein helst mellom *[[Kompilerte programmeringsspråk|kompilerte språk]]* – der ein kompilator omset programteksten til direkte køyrbar maskinkode – og *[[scriptspråk|tolka språk]]* – der ein programtolk les programmet og lagar det kontinuerleg. Etterkvart har det kome til ulike mellomstadiar, særleg språk der programteksten blir omsett til ei plattformuavhengig bytekode som etterpå eksekveres av ein programtolk/eit køyretidsmiljø. Typiske døme på det siste er Java, Python og Lisp. Skilnaden mellom kompilerte og interpreterte programmeringsspråk er flytande - to forskjellige implementasjoner av same språk kan godt vere både det eine og det andre.

Det har blitt tradisjon å demonstrere eit programmeringsspråk ved at teksten *[[Hello World]]* blir produsert.

## Formålet med programmeringsspråk
Alle dataprogram som ei datamaskin køyrer ligg i maskinkode. Då det er upraktisk for eit menneske å programmere direkte i maskinkode, er det laga fleire ulike programmeringsspråk som gjer det enklare for programmeraren å skrive eit dataprogram. For å kunne nyttegjere seg av programmet ein skriv i eit visst programmeringsspråk (kjeldekoden), må ein ha ein kompilator som omset kjeldekoden til maskinkode, som då maskina kan bruke til å køyre programmet.

Mange programmeringsspråk har blitt tatt fram, endra for å møte nye utfordringar, blitt blanda med andre språk og til slutt tatt ut av bruk. Fleire forsøk på å ta fram universielle programmeringsspråk har blitt gjort, men desse har alltid tapt for meir spesialiserte variantar. Trongen til forskjellige språk kjem av dei ulike samanhengane språket skal brukast i:

* Program utgjer alt frå små *skript* skrivne av amatørar til enorme system skrivne av hundrevis av utviklarar.
* Programmerarar har forskjellige dugleiksnivå, alt frå nybyrjarar til ekspertar. Vanskegrada dei forskjellige kan handtere er ulik.
* Programma må finne ein balanse mellom storleik, fart, vedlikehaldbarheit og andre parametrar. Systema dei skal køyre på er alt frå enkle mikrokontrollare til superdatamaskiner.
* Program som er «ferdigskrive» kan vere under nesten konstant forbetring, eller dei kan vere statiske gjennom heile si levetid over fleire tiår.
* Programmeraren sin kompetanse i eit bestemt språk kan også vere bestemmande.

Ein generell trend innanfor utviklinga av programmeringsspråk er at nivået på abstraksjonane har blitt høgare med tida. Dei tidlegaste programmeringsspråka var veldig nær datamaskina sine eigne, innebygde konsept. Etterkvart blei det bygd på meir abstrakte konsept som let programmeraren uttrykkje idéar på eit høgare nivå. Dette let programmerarane skrive meir kode på kortare tid.

Idéen om at naturlege språk vil overta for programmeringsspråka blei tidleg lansert i denne prosessen. Dette målet er framleis langt vekk, og om det eigentleg er nokon fordel er ope for debatt. Edsger Dijkstra hevda at for å unngå meiningslause konstruksjonar er det viktig å nytte eit formelt språk, og var heilt avvisande til konseptet. Alan Perlis var òg avvisande til konseptet.

## Sjå òg
* Programvare
* Liste over programmeringsspråk

## Kjelder