Qu'est-ce qu'un appel à queue?

Dans la programmation informatique, un appel de queue est une situation spécifique dans le code source du programme dans lequel une fonction, un sous-programme ou une procédure renvoie une valeur attendue en appelant une autre fonction au lieu de simplement passer une variable tenant la valeur de retour. Le nom lui-même indique que la fonction appelée pour calculer la valeur à retourner est à la fin, ou queue, de la fonction l'appelant pour fournir une valeur de retour. Un appel à queue intéresse certains programmeurs car, avec certaines optimisations ou comportements du compilateur, aucun espace de pile supplémentaire n'est utilisé pour stocker des emplacements de code de la fonction principale; La fonction de queue est plutôt utilisée pour générer les rapports de valeur de retour directement au point d'appel où la fonction d'origine a été invoquée. L'utilisation d'un appel à queue est particulièrement utile dans les situations dans lesquelles la récursivité est utilisée, car la quantité d'espace de pile utilisé pour stocker les adresses de l'appelant dans les cas où les appels récursifs nichent très profondément pour s'épuiser rapidement et arrêter le programmem exécution. Bien que l'utilisation des appels de queue puisse aider à augmenter la vitesse, l'utilisation de la mémoire et l'efficacité dans un programme, cela peut également conduire à des situations dans lesquelles le code source est restructuré pour utiliser les appels d'une manière qui rend difficile le débogage et le suivi, en particulier avec les cas de récursivité.

L'existence d'un appel de queue est due en grande partie à la façon dont la pile d'appels fonctionne dans la plupart des programmes informatiques et des architectures système. La pile, qui est comme une pile de plaques, est une structure de données de première et dernière sortie. Lorsqu'une fonction, sous-programme ou procédure est appelée, l'adresse à partir de laquelle l'appel est fait, appelé trame de pile, est stocké dans la pile. Cela signifie un programme qui appelle la fonction A, qui appelle ensuite la fonction B, aura deux cadres de pile, une pour la fonction B et une autre en dessous pour la fonction A. Une fois la fonction B.Renvoie à la fonction A, qui a son cadre qui a sauté de la pile lors de sa fin, renvoyant enfin le contrôle du programme au point à partir duquel la première fonction était appelée.

Lorsqu'un appel de queue est utilisé, l'instruction de retour dans une fonction utilise directement la valeur de retour d'une autre fonction comme les données à envoyer au code d'appel. Dans l'exemple ci-dessus, si la fonction a appelle la fonction B directement avec l'instruction RETOUR, alors un appel de queue a été formé. Dans la pile d'appels, au lieu d'avoir une trame de pile pour les deux fonctions A et B, la fonction B recevra l'adresse de retour de la fonction A et la trame de pile de la fonction A sera éclatée et éliminée, ce qui signifie que la fonction B remettra sa valeur de retour directement à l'emplacement qui a appelé la fonction A sans avoir à transmettre le contrôle à la fonction A. Cela augmente la vitesse des appels de fonction ainsi que pour aider à maintenir la quantité d'informations dans la pile.

Les propriétés d'un appel à queue peuvent en faire un trèsOption attrayante pour les fonctions récursives. Une fonction récursive est celle qui s'appelle à plusieurs reprises pour calculer une valeur, comme cela peut être le cas lors de la traversée d'une structure de données de liste. Aucune trame de pile supplémentaire n'est créée pour les appels de fonction imbriqués, de sorte que des niveaux de récursivité très profonds peuvent être effectués en toute sécurité sans la menace immédiate d'un débordement de pile et un éventuel terminaison du programme.

DANS D'AUTRES LANGUES