Trampoline

Définition, exemples et bonnes pratiques

À retenir

  • Empêche le plantage du programme par dépassement de pile (Stack Overflow).
  • Transforme visuellement une récursion en une boucle itérative sécurisée.
  • Indispensable pour traiter de gros volumes de données avec des algorithmes récursifs.

En programmation, un trampoline est une technique utilisée pour exécuter des fonctions récursives (qui s'appellent elles-mêmes) sans saturer la mémoire de l'ordinateur. Au lieu que les fonctions s'empilent les unes sur les autres jusqu'au plantage, elles "rebondissent" vers une boucle centrale qui les relance une par une, comme un gymnaste sur un trampoline qui revient toujours au tapis avant de sauter à nouveau.

Étymologie

Issu de l'anglais trampoline (1961), lui-même lié au concept de tremplin. L'image illustre parfaitement le mouvement du programme qui, au lieu de s'enfoncer dans les profondeurs de la pile d'appels, revient systématiquement à un point de contrôle central pour repartir.

Exemples d'usage

  • Une fonction de calcul mathématique complexe en JavaScript qui utilise un trampoline pour traiter des millions d'itérations sans provoquer d'erreur Stack Overflow.
  • L'implémentation de certains langages de programmation fonctionnelle (comme Scheme ou Lisp) pour gérer la récursion infinie de manière sécurisée.

Cas d'usage

On utilise le trampoline principalement dans le développement de compilateurs, en programmation fonctionnelle, ou lors du traitement de structures de données très profondes (comme des arbres de dossiers immenses) dans des langages qui ne gèrent pas nativement l'optimisation des appels terminaux.

Bonnes pratiques

Il est conseillé de n'utiliser cette technique que lorsque la profondeur de la récursion est imprévisible ou très élevée. Pour une efficacité maximale, la fonction doit être écrite sous forme de tail call (l'appel récursif est la toute dernière action de la fonction).

Synonymes

rebond de fonction fonction de saut

Antonymes

récursion directe appel imbriqué

Conseil

Si vous débutez, imaginez le trampoline comme un répartiteur de tâches : au lieu de faire tout le travail d'un coup en s'épuisant, la fonction fait un petit bout du travail et rend la main au répartiteur pour la suite.

Questions fréquentes

Est-ce que le trampoline ralentit l'exécution ?

Oui, légèrement, car il y a une petite gestion supplémentaire à chaque 'rebond' par rapport à un appel direct, mais il rend le code beaucoup plus robuste.

Est-ce disponible dans tous les langages ?

C'est une technique de conception (design pattern), on peut donc l'implémenter soi-même dans presque n'importe quel langage (JS, Python, C#, etc.).