fetch_max de Rust : Plongeon au cœur de l'optimisation du compilateur

Lors d'un récent entretien d'embauche pour un poste d'ingénieur, un candidat a utilisé une seule ligne de code Rust pour résoudre un problème classique de concurrence : suivre la valeur maximale sur plusieurs threads producteurs. Cela a suscité la curiosité de l'auteur : comment fonctionne réellement fetch_max de Rust ? L'article explore en profondeur le processus de compilation, du code Rust à l'assemblage, en révélant les couches d'optimisation impliquant des macros, la représentation intermédiaire LLVM, les intrinsèques du compilateur et les spécificités de l'architecture cible. Sur x86-64, fetch_max se compile en une boucle compare-and-swap (CAS) ; sur ARM, il utilise directement l'instruction max atomique du matériel. Cet article démontre la puissance des compilateurs modernes et les détails de bas niveau derrière les abstractions de haut niveau.