Datorprogram

Ett datorprogram, även kallat dataprogram, är en serie instruktioner som styr en dator, och beskriver de operationer som datorn ska utföra, då programmet körs. Datorprogrammet kan utföra en liten specifik uppgift eller bilda en omfattande helhet, som en operativsystemkärna, en ordbehandlare eller en webbläsare. En samling datorprogram eller datorprogram i allmänhet kallas ofta programvara eller mjukvara.

Ett datorprogram skrivs typiskt i ett människovänligt programspråk (till exempel Java, C++ eller Delphi) och kompileras eller tolkas sedan till maskinkod, som datorn förstår.

Olika klasser av datorprogram 
Datorprogram kan delas in
 systemprogram, som utgör plattformen, såsom operativsystemets kärna, drivrutiner och centrala verktyg samt program som behövs för bootningen (på en PC BIOS och bootloader), och systemverktyg;
 tillämpningsprogram, vilka uppfyller någon för användaren direkt meningsfylld funktion, såsom ordbehandlare, e-postprogram och webbläsare
 enkla program skrivna av användaren själv, ofta i form av skript eller makron för olika tillämpningsprogram
 programmeringsverktyg, datorprogram som används för att skriva datorprogram.
 skadlig programkod, som en dator exekverar utan användarens samtycke, för att sabotera eller för någon annans vinning, till exempel datorvirus eller spionprogram.

Man kan också göra skillnad till exempel mellan serverprogram och program avsedda att användas direkt eller mellan program för normala bords- och serverdatorer och program för inbyggda system, till exempel för mobiltelefoner, bilar och tvättmaskiner.

Maskinkod och källkod, portabilitet 
Maskinkoden är bunden till en viss typ av processor och övrig hårdvara, ofta också till ett visst operativsystem och de tjänster operativsystemet och olika programbibliotek erbjuder. I vissa fall kan man med olika trick skriva programmet så att olika maskinkod körs beroende på omgivningen.

Källkoden, d.v.s. koden i den form den ursprungligen skrivs, kan däremot någorlunda lätt skrivas så att programmet går att kompilera för olika hårdvara och olika operativsystem. Då programmet skall användas i en ny miljö måste det i allmänhet anpassas för denna, men anpassningen är enkel om programmet skrivits portabelt.

Genom att fri programvara alltid har sin källkod tillgänglig och dessutom delvis bygger på traditioner från GNU-projektet (som gärna gjorde programmen tillgängliga för alla Unix-varianter), går den relativt lätt att anpassa till varje hackares favoritmiljö och finns sålunda ofta tillgänglig på allt som det minsta liknar Unix (se Posix) och också till exempel för Windows.

Proprietär programvara distribueras däremot för det mesta färdigkomplierad eller utan rätt att sprida modifierad kod, varför proprietära program är mer bundna till den eller de omgivningar som stöds av programleverantören.

Olika typer av programspråk 
Det typiska datorprogrammet skrivs i ett eller flera programspråk, som sedan kompileras till maskinkod och länkas ihop med olika programbibliotek. Ett datorprogram kan också vara en lista av instruktioner i form av ett skript, som tolkas i realtid till maskinkod medan programmet körs.

Denna senare typ av program är inte direkt bundna till en viss typ av processor eller speciell dator om bara den skript-tolk som instruktionerna skrivits för finns tillgänglig. Skriptspråken innehåller ofta också mycket funktionalitet som i många mer maskinnära programspråk måste kodas skilt, och förutom att man slipper anpassa koden till nya datorplattformar går därför skrivandet också ursprungligen snabbare. Tolkningen kräver dock resurser när programmet körs, varför ett färdigt kompilerat program kör snabbare. De tolkade språken är också beroende av att tolken finns tillgängligt då programmet skall köras.

Som mellanting finns dels programspråk som kompileras strax innan de körs (till exempel perl) och programspråk som kompileras till en kompakt och snabbtolkad bytekod (som inte är avsedd att läsas av mänskor) så att de snabbare kan tolkas då de körs (till exempel java), dels program vars för effektiviteten kritiska delar är skrivna i maskinnära språk (till exempel C), medan skriptspråk eller andra högnivåspråk används för huvuddelen av programlogiken och sådana funktioner som väl stöds i dessa språk.

Skillnaden mellan tolkade och kompilerade språk är numera oklar, då det finns normala kompilatorer för många språk ursprungligen konstruerade som skriptspråk.

Se även 
 Algoritm
 Programvara
 Datorspel
 Programmering
 Programmeringsparadigm
 Programspråk
 Mobilapplikation
 Kompilator
 Interpretator, Interpreterande programspråk