Vad är programoptimering?
Programoptimering är processen för att modifiera ett datorprogram på ett sätt som får programmet att köra snabbare, konsumera färre resurser eller i allmänhet fungera med en högre effektivitetsnivå. Optimeringsuppgiften kan utföras automatiskt av vissa programmeringsspråkskompilatorer, avsiktligt med ett optimeringsprogram eller manuellt av programmerare som går igenom källkoden och försöker göra specifika förbättringar. I allmänhet utförs programoptimering med ett specifikt slut i åtanke, eftersom det finns väldigt få allmänna optimeringar som kan göras till ett program som inte på något sätt minskar det optimerade tillståndet för en annan del av programmet, vilket betyder att ett program vanligtvis kan vara optimerade för hastighet eller resursanvändning, men vanligtvis inte båda. En komplikation som kan inträffa med vissa typer av optimering är att många programmeringsspråk på hög nivå ger så stor abstraktion mellan inbyggd kod och datorspråk att optimering kan vara svår eller omöjlig att implementera på alla plattformar i alla situationer, särskilt med tolkade språk som använder just-in-time (JIT) sammanställning.
Ett viktigt koncept i programoptimering är tanken på att en optimering vanligtvis kommer med något slags pris. Ett exempel på detta är att när ett kodstycke är optimerat för att köra snabbare kan ökningen i hastighet komma till priset för kodläsbarhet, minnesanvändning, programflexibilitet eller ett antal andra kostnader. Detta innebär att programoptimering måste vara en riktad process, med avsikt att få en aspekt av ett program att fungera på ett bättre sätt samtidigt som man är villig att offra effektiviteten hos andra aspekter.
Olika typer av programoptimering kan utföras i olika stadier av programutvecklingen. Under design kan bred optimering göras genom att se till att ett program verkar fungera effektivt. När du arbetar med faktisk källkod kan optimeringar inkludera att det inte finns några främmande kommandon, upprepade samtal eller dåligt skrivna funktioner. Vid sammanställningen utförs många optimeringar automatiskt av kompilatorn och kan styras genom användning av olika kompilatoromkopplare eller direktiv av programmeraren.
Automatiska optimeringar, som kan ske med en kompilator- eller dedikeringsoptimeringsprogram, kan ofta involvera trick som är för komplicerade för att vara praktiska för mänskliga programmerare. Detta kan innebära flyttinstruktioner i ett program så att de körs i den ordning som ursprungligen var skriven men på ett mer effektivt sätt för processorn. Det kan också innebära avsiktligt förskjutning av resurser som minnesblock så att de går åt snabbare. De flesta programoptimering sker automatiskt på kompilatornivå.
En komplikation med upprepad eller aggressiv programoptimering är att när ett program har modifierats för att köra mer effektivt blir det i allmänhet svårare att modifiera för andra ändamål, till exempel att lägga till funktionalitet eller fixa buggar. Detta kan inträffa när optimeringar börjar låsa in inställda programbeteenden som inte lätt ändras eller anpassas till ny kod utan att kräva att alla optimeringar ångras. En större fråga är att i många fall blir ett optimerat program mindre mänskligt läsbart eftersom tricks och genvägar används istället för endast kortfattade kommandon och klassiska kontrollstrukturer. Av dessa skäl finns det ofta en nivå av programoptimering där det är acceptabelt att stoppa, även om drastiska kodändringar kan göra att ett program fungerar lite mer effektivt.