Compiler: Forskelle mellem versioner

Content deleted Content added
m Retter tankestreger – burde ignorere [[ ]], {{ }} og <math> samt <gallery>; kosmetiske ændringer
Opdateret indledning
Linje 1:
En '''compiler''' (også kaldet '''kompiler''' eller '''oversætter''') er et [[program]], der oversætterautomatisk kan oversætte fra et [[programmeringssprog]] til et andet. programEn (kaldetcompiler kildekoden)bruges til etat tredjelave programnye programmer med idet man oversætter fra [[kildekode]] til [[maskinkode]] og derved opnår ''eksekverbare filer'' ("''.exe-filer''").
 
Processen hvorved et program oversættes mellem to formelt definerede sprog kan også kaldes en transformation. Transformationen foregår typisk fra et sprog med meget [[abstraktion (datalogi)|abstraktion]] til et med mindre. Denne skelnen kan også karakteriseres ved at kalde det ene sprog for et højniveausprog og det andet for et lavniveausprog.
Sagt på en anden måde er det typisk et transformationsværktøj for programmører der oversætter/transformerer højniveaukode (der kan skrives, læses og forstås af mennesker) til et lavere niveau som f.eks. det sprog en computer forstår (ultimativt binære instruktionssæt). Det behøver ikke nødvendigvis at være fra høj- til lavniveau men kan også være fra eet højniveausprog til et andet (fra [[Java (programmeringssprog)|java]] til [[XML]]). En javacompiler ([[javac]]) oversætter fra programmeringssproget java til java-bytekode, som kan fortolkes/forstås af en java [[virtuel maskine]] (JVM).
 
Der er dog også praktiske grunde til at oversætte til andre højniveausprog eller til maskinkode til [[virtuel maskine|virtuelle maskiner]]. Hvis man oversætter til et højniveausprog, kan man afvikle sit program i de miljøer som eksisterer til det givne sprog og derved opnå fordele. For eksempel oversættes programmeringssproget [[Haskell]] til programmeringssproget [[C (programmeringssprog)|C]] før det oversættes til maskinkode.
Et eksempel på en compiler er en [[Java (programmeringssprog)|java]]-compiler, der oversætter java-[[kildekode]] til java-bytecode (.class fil), der kan udføres af en java-[[Virtuel maskine|virtual maskine]] (som er en form for [[fortolker]]). Et andet eksempel kunne være en C-compiler, der oversætter [[C (programmeringssprog)|C]]-kildekode til en binær fil, der kan udføres direkte.
 
Hvis man oversætter til en virtuel maskine, kan man afvikle sit program på alle fysiske maskiner, der understøtter en simulering af den virtuelle maskine. Eksempler på sprog som udnytter sidstnævnte er [[Java]] til [[JVM]] og [[ActionScript]] til ''AVM''.
 
== Teknikken ==
En compiler oversætter typisk fra kildekode, der kan læses af et menneske, til et binært format, der kun kan læses af andre programmer. En compiler indeholder typisk kontrol af fejl i kildekoden og optimering mht. udførelsestid og lagerforbrug af den resulterende kode. Derfor kan det resulterende binæreprogram typisk udføres hurtigere og med mindre brug af plads. Dette er i modsætning til en fortolker der udføre kildekoden direkte, linje for linje, og derfor ikke kan udføre programmet så hurtigt som hvis det var compileret.
 
En anden fordel ved at compilere er at man kan nøjes med at give den binære version af programmet til andre så de kun kan udføre programmet, men ikke umiddelbartnemt kan rette i programmet.
 
Til nogle [[programmeringssprog]], som f.eks. [[BASIC]], findes både compiler og fortolker. Når man udvikler i den slags sprog bruger man typisk en fortolker, mens programmet udvikles (debugger/fejlfinder), og en compiler, når resultatet skal afleveres til kunden.