Programmeringsspråk

**Programmeringsspråk** er en betegnelse som henviser et ikke-menneskelig og kunstig språk som benyttes utelukkende for å styre og kontrollere en datamaskin. I likhet med menneskelige språk har programmeringsspråk syntaks og semantiske regler for å definere mening, men i motsetning til mennesker har en datamaskin behov for å få instruksjoner beskrevet 100&nbsp;% komplett, det vil si uten noen som helst form for tolkning. Dette stiller særskilte krav til programmeringsspråkene om å være entydig og komplett.

Programmeringsspråkene inndeles gjerne i høynivå- og lavnivåspråk, avhengig av hvor ulikt programmeringsspråket er fra den maskinkoden kompilatoren vil generere. Assembler er et typisk lavnivåspråk der kommandoer skrives nærmest direkte til prosessoren. Basic er på den annen side et høynivåspråk hvor en kommando i programmeringsspråket ofte blir til flere, mer sammensatte, kommandoer i maskinkoden.

For høynivå programmeringsspråk skiller en gjerne mellom *[[Kompilerte programmeringsspråk|kompilerte språk]]* &ndash; hvor en kompilator oversetter programteksten til direkte kjørbar maskinkode &ndash; og *[[scriptspråk|tolkede språk]]* &ndash; hvor en programtolk leser programmet og utfører det fortløpende. Etter hvert er det kommet til ulike mellomstadier, spesielt språk hvor programteksten oversettes til en plattformuavhengig bytekode som deretter eksekveres av en programtolk/et kjøretidsmiljø. Typiske eksempler på det siste er Java, Python og noen LISP-dialekter. Skillet mellom kompilerte og interpreterte programmeringsspråk er flytende – to forskjellige implementasjoner av samme språk kan godt være henholdsvis det ene og det andre.

Det er blitt tradisjon å demonstrere et programmeringsspråk ved at teksten *[[hello, world]]* blir produsert.

## Hensikt
Alle de dataprogram som en datamaskin kjører foreligger i maskinkode. Da det er upraktisk for et menneske å programmere direkte i maskinkode, er det laget ulike programmeringsspråk som gjør det enklere for programmereren å skrive et dataprogram. For å kunne nyttegjøre seg av det programmet en skriver i et visst programmeringsspråk (kildekoden), trengs en kompilator som oversetter kildekoden til maskinkode, som da maskinen kan bruke til å kjøre programmet.

Mange programmeringsspråk er blitt tatt fram, endret for å møte nye utfordringer, kombinert med andre språk og til slutt falt ut av bruk. Flere forsøk på å ta frem universelle programmeringsspråk er gjort, men disse er alltid blitt utkonkurrert av mer spesialiserte varianter. Behovet for ulike språk beror på de forskjellige sammenhengene språket skal brukes i:

* Program utgjør alt fra bittesmå *skript* skrevet av amatører til enorme systemer skrevet av hundrevis av utviklere.
* Programmerere har forskjellige ferdighetsnivåer, alt fra nybegynnere til eksperter.  Kompleksiteten de forskjellige kan håndtere er ulik.
* Programmene må finne en balanse mellom størrelse, hastighet, vedlikeholdbarhet og andre parametre.  Systemene de skal kjøre på er alt fra enkle mikrokontrollere til superdatamaskiner.
* Program som er «ferdigskrevet» kan være under nesten konstant modifikasjon, eller de kan være statiske gjennom hele sin levetid over flere tiår.
* Programmererens kompetanse i et bestemt språk kan også være utslagsgivende.

En generell trend innenfor utviklingen av programmeringsspråk er at nivået på abstraksjonene har blitt høyere med tiden.  De tidligste programmeringsspråkene var veldig nær datamaskinens egne, innebygde konsepter.  Etter hvert ble det bygget på mer abstrakte konsepter som lot programmeren uttrykke idéer på et høyere nivå.  Dette lot programmererne skrive mer kode på kortere tid..

Idéen om at naturlige språk vil overta for programmeringsspråkene ble tidlig lansert i denne prosessen. Dette målet er fremdeles langt unna, og om det egentlig er noen fordel er åpent for debatt.  Edsger Dijkstra hevdet at for å unngå meningsløse konstruksjoner er det viktig å nytte et formelt språk, og var helt avvisende til konseptet.  Alan Perlis var også avvisende til konseptet. .

## Se også
* Programvareutvikling
* Liste over programmeringsspråk
* Udefinert oppførsel

## Referanser


## Eksterne lenker
*