Boucle infinie

Boucle infinie
Page d'aide sur l'homonymie Pour l’article homonyme, voir Infinite Loop

Une boucle infinie est, en programmation informatique, une boucle dont la condition de sortie n'a pas été définie ou ne peut pas être satisfaite. En conséquence, la boucle ne peut se terminer qu'à l'interruption du programme qui l'utilise.

Sommaire

Pourquoi est-ce un problème ?

Il y a rarement un intérêt à programmer une boucle infinie. Une telle boucle ne permet pas de faire sortir un résultat, et accapare les ressources de l'ordinateur.

Sur un système monotâche, une boucle infinie peut interdire à l'utilisateur toute autre action. Il faut alors interrompre de force l'exécution (on peut être obligé de couper l'alimentation de l'ordinateur).

Les systèmes modernes sont généralement suffisamment multitâches pour laisser le contrôle à l'utilisateur, qui peut commander l'interruption du programme. Mais tant que ce n'est pas fait, l'ordinateur se retrouve beaucoup moins performant pour tout autre travail.

Une boucle infinie est donc presque toujours considérée comme un bug.

Une exception possible est celle d'un programmeur qui souhaiterait absolument maintenir son ordinateur en activité en son absence. Il peut donc programmer une boucle infinie en s'assurant qu'il pourra l'interrompre quand il le souhaitera.

Exemples de boucles infinies

Dans de nombreux langages de programmation, la boucle infinie la plus simple est, en pseudo-code :

tant que VRAI

ou en anglais

while TRUE

C'est-à-dire que les instructions doivent être exécutées tant que l'évaluation de l'expression logique « VRAI » a comme résultat « VRAI ».

En Python par exemple, une boucle infinie peut être définie comme ceci :

while True:
    print "Boucle infinie"

L'instruction contenue dans la boucle s'exécute tant que la condition définie après while, or ici cette condition est toujours vraie (True).

La situation suivante crée également une boucle infinie :

i = 0
while i < 10:
    i = 1

En effet, la boucle se termine lorsque i n'est plus inférieur à 10, or l'instruction présente dans la boucle donne toujours à i la valeur 1 ; la condition de sortie de la boucle est donc toujours vraie.

En C / C++ comme en PHP, on peut trouver :

PHP :

$i = 0;
while ($i < 1) {
    // Instructions
}

C :

int i = 0;
while (i < 1) {
    // Instructions
}

La variable $i ou i n'est pas incrémentée (on ne lui ajoute pas 1) et par conséquent la condition sera toujours vérifiée car $i ou i = 0 < 1.

Boucles à condition d'arrêt

La structure décrite précédemment, while true, n'est pas forcément absurde. On peut, dans un langage comme le C, créer une boucle pseudo-infinie, dont la condition après le while est toujours respectée, tout en utilisant à l'intérieur de la boucle l'instruction break qui fait sortir de la boucle. Simplement, il faut s'assurer que la condition du break sera forcément atteinte, de préférence après un délai raisonnable.

On appelle boucle d'Alderson le cas particulier de boucle infinie pour lequel la boucle est infinie quant à sa condition d'entrée, a une condition d'arrêt, mais qu'une erreur de conception rend cette condition inaccessible. Dans ce cas, c'est bien sûr un bug. Alderson est un programmeur qui avait codé une fonction qui exécutait des instructions suivant que l'utilisateur clique sur « OK » ou « annuler », sans avoir affiché les boutons en question[1].

Dans la culture informatique

Une vieille blague d'informaticien disait qu'« un Cray est si rapide qu'il peut exécuter une boucle infinie en moins de 2 secondes »[2].

L'allée des bâtiments d'Apple à Cupertino s'appelle Infinite Loop, « boucle infinie » en anglais.

Références


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Boucle infinie de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • boucle infinie — ● loc. f. ►ALGO On trouve aussi boucle sans fin . boucle qui ne se terminera jamais, du moins tant qu on ne coupe pas le courant, que la machine fonctionne encore et que la Terre tourne autour du Soleil. Une blague accorde à chaque nouvelle… …   Dictionnaire d'informatique francophone

  • boucle sans fin — ● loc. f. ►ALGO Syn. de boucle infinie …   Dictionnaire d'informatique francophone

  • Infinite Loop — 37° 19′ 55″ N 122° 01′ 52″ W / 37.33182, 122.03118 …   Wikipédia en Français

  • Problème de l'arrêt — En théorie de la calculabilité, le problème de l arrêt consiste, étant donné un programme informatique quelconque (au sens machine de Turing), à déterminer s il finira par s arrêter ou non. Ce problème idéalisé n est pas décidable, c est à dire… …   Wikipédia en Français

  • A653 — ARINC 653 ARINC 653 est un standard de partitionnement temporel et spatial de ressources informatiques. Ce standard définit également des interfaces de programmation et de configuration qui permettent d assurer l indépendance de l application vis …   Wikipédia en Français

  • ARINC 653 — est un standard de partitionnement temporel et spatial de ressources informatiques. Ce standard définit également des interfaces de programmation et de configuration qui permettent d assurer l indépendance de l application vis à vis du logiciel… …   Wikipédia en Français

  • Call stack overflow — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

  • Débordement de la pile d’exécution — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

  • Débordement de pile — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

  • Dépassement de la pile d’exécution — Dépassement de pile En informatique, un dépassement de pile ou débordement de pile (en anglais, stack overflow) est un bogue causé par un processus qui, lors de l écriture dans une pile, écrit à l extérieur de l espace alloué à la pile, écrasant… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”