Wat is programma-optimalisatie?
Programma-optimalisatie is het proces waarbij een computerprogramma zodanig wordt aangepast dat het programma sneller wordt uitgevoerd, minder middelen verbruikt of over het algemeen efficiënter werkt. De optimalisatietaak kan automatisch worden uitgevoerd door sommige compilers van de programmeertaal, opzettelijk met behulp van een optimalisatieprogramma, of handmatig door programmeurs die door de broncode stappen en proberen specifieke verbeteringen aan te brengen. Over het algemeen wordt programma-optimalisatie uitgevoerd met een specifiek doel in gedachten, omdat er zeer weinig algemene optimalisaties kunnen worden aangebracht in een programma die op geen enkele manier de geoptimaliseerde status van een ander deel van het programma verminderen, wat betekent dat een programma meestal zijn geoptimaliseerd voor snelheid of gebruik van middelen, maar meestal niet beide. Een complicatie die kan optreden bij sommige soorten optimalisatie, is dat veel programmeertalen op hoog niveau een zo groot abstractieniveau bieden tussen native code en de computertaal dat optimalisatie moeilijk of onmogelijk kan worden geïmplementeerd op alle platforms in alle situaties, vooral met geïnterpreteerde talen die gebruikmaken van just-in-time (JIT) compilatie.
Een belangrijk concept bij programma-optimalisatie is het idee dat optimalisatie meestal een prijs met zich meebrengt. Een voorbeeld hiervan is dat wanneer een stuk code is geoptimaliseerd om sneller te werken, de toename van de snelheid ten koste kan gaan van de leesbaarheid van de code, geheugengebruik, programmaflexibiliteit of een aantal andere kosten. Dit betekent dat programmaoptimalisatie een doelgericht proces moet zijn, met de bedoeling om één aspect van een programma beter te laten werken, terwijl men bereid is de efficiëntie van andere aspecten op te offeren.
Verschillende soorten programma-optimalisatie kunnen worden uitgevoerd in verschillende stadia van programma-ontwikkeling. Tijdens het ontwerp kan brede optimalisatie worden uitgevoerd door ervoor te zorgen dat een programma effectief lijkt te werken. Bij het werken met werkelijke broncode kunnen optimalisaties het volgende omvatten: ervoor zorgen dat er geen externe opdrachten, herhaalde oproepen of slecht geschreven functies zijn. Bij het compileren worden veel optimalisaties automatisch door de compiler uitgevoerd en kunnen door de programmeur door het gebruik van verschillende compilerschakelaars of richtlijnen worden geleid.
Automatische optimalisaties, zoals kan gebeuren met een compiler- of toewijzingsoptimalisatieprogramma, kunnen vaak trucs inhouden die te complex zijn om praktisch te zijn voor menselijke programmeurs. Dit kan het verplaatsen van instructies in een programma met zich meebrengen, zodat ze worden uitgevoerd buiten de oorspronkelijk geschreven volgorde, maar op een efficiëntere manier voor de processor. Het kan ook gaan om opzettelijk verschuivende bronnen zoals geheugenblokken, zodat ze sneller toegankelijk zijn. De meeste programma-optimalisatie vindt automatisch plaats op compilerniveau.
Een complicatie bij herhaalde of agressieve programma-optimalisatie is dat, zodra een programma is aangepast om efficiënter te werken, het over het algemeen moeilijker wordt om te wijzigen voor andere doeleinden, zoals het toevoegen van functionaliteit of het repareren van bugs. Dit kan gebeuren wanneer optimalisaties vastgelopen programmagedrag beginnen vast te zetten dat niet gemakkelijk kan worden gewijzigd of aangepast aan nieuwe code zonder dat alle optimalisaties ongedaan moeten worden gemaakt. Een groter probleem is dat in veel gevallen een geoptimaliseerd programma minder leesbaar is voor mensen, omdat trucs en snelkoppelingen worden gebruikt in plaats van alleen beknopte opdrachten en klassieke besturingsstructuren. Om deze redenen is er vaak een niveau van programma-optimalisatie waarbij het acceptabel is om te stoppen, hoewel drastische codewijzigingen ervoor kunnen zorgen dat een programma iets efficiënter werkt.