Qu'est-ce que l'optimisation de programme?
L'optimisation de programme consiste à modifier un programme informatique de manière à ce qu'il s'exécute plus rapidement, consomme moins de ressources ou fonctionne généralement avec un niveau d'efficacité supérieur. La tâche d'optimisation peut être effectuée automatiquement par certains compilateurs de langage de programmation, intentionnellement à l'aide d'un programme d'optimisation, ou manuellement par des programmeurs qui parcourent le code source et tentent d'apporter des améliorations spécifiques. En général, l’optimisation de programme est réalisée avec une fin particulière, car très peu d’optimisations générales peuvent être apportées à un programme qui ne réduisent en rien l’optimisation du statut d’une autre partie du programme, ce qui signifie qu’un programme peut être optimisé pour la vitesse ou l'utilisation des ressources, mais généralement pas les deux. Certains types d’optimisation peuvent être compliqués par le fait que de nombreux langages de programmation de haut niveau fournissent un tel niveau d’abstraction entre le code natif et le langage informatique qu’il peut être difficile voire impossible de mettre en œuvre l’optimisation sur toutes les plates-formes, en particulier dans les cas suivants: langages interprétés qui utilisent la compilation juste à temps (JIT).
Un concept important dans l'optimisation de programme est l'idée qu'une optimisation a généralement un prix. Un exemple de cela est que, lorsqu'un morceau de code est optimisé pour être exécuté plus rapidement, l'augmentation de la vitesse peut se faire au prix de la lisibilité du code, de l'utilisation de la mémoire, de la flexibilité du programme ou de plusieurs autres coûts. Cela signifie que l'optimisation du programme doit être un processus ciblé, dans le but de faire en sorte qu'un aspect d'un programme fonctionne mieux tout en étant prêt à sacrifier l'efficacité d'autres aspects.
Différents types d’optimisation de programme peuvent être effectués à différentes étapes du développement du programme. Lors de la conception, une optimisation générale peut être réalisée en veillant à ce qu'un programme semble fonctionner efficacement. Lors de l'utilisation du code source réel, l'optimisation peut inclure la garantie qu'il n'y a pas de commandes superflues, d'appels répétitifs ou de fonctions mal écrites. Lors de la compilation, de nombreuses optimisations sont automatiquement effectuées par le compilateur et peuvent être guidées par l'utilisation de différents commutateurs ou directives du compilateur par le programmeur.
Les optimisations automatiques, comme cela peut être le cas avec un compilateur ou un programme d'optimisation de dédicace, peuvent souvent impliquer des astuces trop complexes pour être pratiques pour les programmeurs humains. Cela peut impliquer le déplacement d'instructions dans un programme afin qu'elles soient exécutées en dehors de l'ordre écrit à l'origine, mais de manière plus efficace pour le processeur. Cela peut également impliquer de déplacer intentionnellement des ressources telles que des blocs de mémoire afin de pouvoir y accéder plus rapidement. La plupart des optimisations de programme se produisent automatiquement au niveau du compilateur.
Une optimisation répétée ou agressive du programme complique le fait qu’une fois qu'un programme a été modifié pour fonctionner plus efficacement, il devient généralement plus difficile de le modifier à d’autres fins, comme l’ajout de fonctionnalités ou la correction de bogues. Cela peut se produire lorsque les optimisations commencent à se verrouiller dans des comportements de programme définis qui ne sont pas facilement modifiables ou adaptés au nouveau code sans nécessiter l'annulation de toutes les optimisations. Un problème plus important est que, dans de nombreux cas, un programme optimisé devient moins lisible par un humain, car des astuces et des raccourcis sont utilisés à la place de commandes concises et de structures de contrôle classiques. Pour ces raisons, il est souvent acceptable d’arrêter un niveau d’optimisation de programme, même si des modifications de code drastiques peuvent rendre un programme plus efficace.