Retour à la leçon
Mission

Mission : un benchmark trompeur et une migration dyn Trait qui ralentit tout

Corriger une mesure de performance faussée par le mode debug, puis expliquer le coût réel d'un remplacement générique vers dyn Trait sur un chemin critique.

Contexte

Un développeur compare deux implémentations pour remplir un vecteur de 10 millions d'entiers : l'une utilise Vec::new() suivi de push en boucle, l'autre Vec::with_capacity(10_000_000). Il lance cargo run (sans --release) et ne mesure quasiment aucune différence, il conclut donc que with_capacity ne sert à rien en pratique.

Séparément, pour réduire la taille du binaire final, une autre partie de l'équipe remplace systématiquement les fonctions génériques fn traiter<T: Traitable>(x: T) par des fn traiter(x: &dyn Traitable). Quelques semaines plus tard, un chemin critique de l'application, appelé plusieurs millions de fois par seconde, s'est mystérieusement ralenti.