Voici un ensemble de recommandations à suivre pour obtenir
des logiciels performants :
- si le succès du logiciel dépend crucialement de la performance
d'une partie bien identifiée, analyser a priori les algorithmes et les
techniques de programmation pour cette partie. Par exemple,
si on implémente un éditeur de partitions musicales on focalisera ses
efforts sur la gestion du tampon contenant les notes à éditer
ou sur la représentation interne d'une partition musicale ;
- pour les autres parties, vérifier si la performance dépend de la
complexité des algorithmes choisis, ainsi que la taille des données
potentiellement traitées. Si la quantité de données nécessite une
attention particulière du point de vue de la performance, alors considérer des
structures de données et des algorithmes performants ;
- pour les parties dont la performance ne s'est pas révélée
cruciale a priori,
choisir des structures de données et des algorithmes simples bien supportés
par le langage de programmation. Pour Common Lisp, il s'agira souvent d'une liste
simplement chaînée ;
- analyser la performance de la première version (éventuellement
une maquette) du logiciel. Si la performance n'est pas satisfaisante,
analyser les parties qui posent problème. Rechercher des algorithmes
et des structures de données plus performants,
- quand toutes les parties cruciales ont été considérées du point
de vue de l'algorithmique et des structures de données et si la
performance est toujours inaccceptable, alors considérer des
micro-optimisations. Dans ce cas, rajouter d'abord des
déclarations permettant au compilateur de choisir des
représentations plus efficaces ;
- si toutes ces possibilités sont épuisées, considérer l'écriture
de certaines parties du logiciel dans un langage de plus bas niveau (C ou
assembleur).
Irene DURAND
2011-10-14