Référence circulaire

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En informatique, une référence circulaire est une suite de références dans laquelle le dernier objet référence le premier résultant en une boucle fermée. Le concept mathématique sous-jacent est un cycle dans la théorie des graphes.

Notons A \rightarrow B le fait que A référence B. Si A \rightarrow B, B \rightarrow C, \dotsc, X \rightarrow A, alors on a une référence circulaire. En effet, on a A \rightarrow B \rightarrow C \rightarrow \dotsb \rightarrow X \implies A et donc par transitivité A \rightarrow A. Cette situation pose problème car cela signifie que l'on ne peut pas avoir A sans disposer de A lui-même.

Exemples[modifier | modifier le code]

Par exemple, pour la résolution de dépendances logicielles: si par le jeu des dépendances un paquet a besoin de lui-même pour pouvoir être installé, alors il est impossible de l'installer à moins qu'il ne soit déjà installé.

Ce problème se retrouve également dans le bootstraping où un compilateur écrit dans le langage qu'il compile aura besoin de lui-même pour pouvoir être compilé.

Avec un ramasse-miettes qui fonctionne par comptage de référence, un cycle dans les références entre objets n'est pas détecté, ce qui empêche de libérer la mémoire et de la rendre disponible pour le reste de l'exécution du programme.

C'est aussi la cause de récursions infinies lorsqu'avec les appels de méthodes, on appelle une méthode qui en appelle un autre, qui en appelle un autre jusqu'à ce que l'on appelle à nouveau la première méthode, et le cycle recommence jusqu'à un dépassement de pile qui pourrait être utilisé par un attaquant pour prendre le contrôle de l'ordinateur.

Articles connexes[modifier | modifier le code]