Hva er programoptimalisering?
Programoptimalisering er prosessen med å modifisere et dataprogram på en måte som gjør at programmet kjører raskere, bruker færre ressurser eller generelt fungerer med et høyere effektivitetsnivå. Oppgaven med optimalisering kan utføres automatisk av noen programmeringsspråkkompilatorer, med vilje ved å bruke et optimaliseringsprogram, eller manuelt av programmerere som går gjennom kildekoden og prøver å gjøre spesifikke forbedringer. Generelt utføres programoptimalisering med et spesifikt mål i tankene, fordi det er veldig få generelle optimaliseringer som kan gjøres til et program som ikke på noen måte reduserer den optimaliserte tilstanden til en annen del av programmet, noe som betyr at et program vanligvis kan være optimalisert for hastighet eller ressursbruk, men vanligvis ikke begge deler. En komplikasjon som kan oppstå med noen typer optimalisering, er at mange programmeringsspråk på høyt nivå gir et så stort abstraksjonsnivå mellom native code og dataspråket at optimalisering kan være vanskelig eller umulig å implementere på alle plattformer i alle situasjoner, spesielt med tolket språk som bruker just-in-time (JIT) -samling.
Et viktig konsept i programoptimalisering er ideen om at en optimalisering vanligvis kommer med en slags pris. Et eksempel på dette er at når et stykke kode er optimalisert for å kjøre raskere, kan økningen i hastighet komme til prisen for kodelesbarhet, minnebruk, programfleksibilitet eller en rekke andre kostnader. Dette betyr at programoptimalisering må være en målrettet prosess, med den hensikt å få et aspekt av et program til å fungere på en bedre måte, samtidig som det er villig til å ofre effektiviteten til andre aspekter.
Ulike typer programoptimalisering kan utføres i forskjellige stadier av programutviklingen. Under design kan bred optimalisering gjøres ved å sikre at et program ser ut til å kjøre effektivt. Når du arbeider med faktisk kildekode, kan optimaliseringer inkludere å sikre at det ikke er noen utenomkommende kommandoer, repeterende samtaler eller dårlig skrevet funksjoner. Ved sammenstilling utføres mange optimaliseringer automatisk av kompilatoren og kan ledes gjennom bruk av forskjellige kompilatorbrytere eller -direktiver av programmereren.
Automatiske optimaliseringer, som kan oppstå med et kompilator- eller dedikasjonsoptimaliseringsprogram, kan ofte involvere triks som er for kompliserte til å være praktiske for menneskelige programmerere. Dette kan innebære flytteinstruksjoner i et program, slik at de blir utført av rekkefølgen som opprinnelig ble skrevet, men på en mer effektiv måte for prosessoren. Det kan også innebære å bevisst skifte ressurser som minneblokker slik at de kan nås raskere. De fleste programoptimalisering skjer automatisk på kompilatornivå.
En komplikasjon med gjentatt eller aggressiv programoptimalisering er at når et program har blitt modifisert for å kjøre mer effektivt, blir det generelt vanskeligere å endre til andre formål, for eksempel å legge til funksjonalitet eller fikse feil. Dette kan oppstå når optimaliseringer begynner å låse inn angitt programatferd som ikke lett endres eller tilpasses ny kode uten å kreve at alle optimaliseringer blir angre. Et større spørsmål er at i mange tilfeller blir et optimalisert program mindre menneskelig lesbart, fordi triks og snarveier brukes i stedet for bare kortfattede kommandoer og klassiske kontrollstrukturer. Av disse grunnene er det ofte et nivå av programoptimalisering som det er akseptabelt å stoppe, selv om drastiske kodemodifikasjoner kan gjøre at et program fungerer litt mer effektivt.