Loop infinito
In informatica, un ciclo infinito o loop infinito è una qualsiasi sequenza di istruzioni le cui condizioni implicano che si ripeta indefinitamente (infiniti cicli iterativi).
Questo tipo di algoritmo è utilizzato più comunemente nei linguaggi di programmazione a basso livello, nei linguaggi procedurali, dove il ciclo infinito permette al programma di ritornare ad una data istruzione una volta terminato il codice che lo compone.
L'utilizzo di un algoritmo che crei un loop infinito a questo scopo è però universalmente ritenuto scorretto, ritenendo che l'algoritmo possa essere sostituito e possa funzionare in maniera più efficiente grazie a dei cicli di iterazione. Nella maggior parte dei casi infatti il loop infinito è dovuto ad un errore di programmazione e non a una scelta voluta dallo sviluppatore.
Il loop infinito nei linguaggi di programmazione
modificaCi sono diverse tecniche per la creazione di un loop infinito. Esse dipendono dai linguaggi di programmazione. Nei linguaggi a basso livello le alternative sono:
- Istruzione GOTO;
- Istruzione loop;
- Istruzioni di salto condizionato (J**) o incondizionato (JMP);
Esempio di loop infinito con un goto:
ETICHETTA:
<BLOCCO ISTRUZIONI>
GOTO ETICHETTA
Esempio di loop infinito con un loop:
ETICHETTA:
MOV CX,10
<BLOCCO ISTRUZIONI>
LOOP ETICHETTA
Esempio di loop infinito con un salto incondizionato:
ETICHETTA:
<BLOCCO ISTRUZIONI>
JMP ETICHETTA
Mentre per il goto e per il JMP si ha un funzionamento pressoché identico, ciò che accade per il loop è diverso: L'istruzione loop è una istruzione che permette l'iterazione di in frammento di codice per n volte, dove n è il valore contenuto nel registro contatore CX, il quale viene decrementato ad ogni ciclo. Se ogni volta che il ciclo viene svolto la variabile CX mi viene reinizializzata ad un valore fisso non permetto che il contenuto del registro raggiunga zero, condizione per far terminare l'iterazione.
Nella famiglia dei linguaggi c-like abbiamo la possibilità di adibire una istruzione iterativa a loop infinito. Per quanto riguarda il costrutto for, la sintassi è la seguente:
for (istruzione iniziale; condizione di iterazione sempre vera; istruzione di fine ciclo) { [istruzioni di iterazione] }
Il funzionamento è il seguente:
- Viene eseguita l'istruzione iniziale
- Viene eseguito il blocco iterativo
- Viene eseguita l'istruzione di fine ciclo (inutile in questo caso)
- La condizione di iterazione è vera, viene ripetuto il ciclo.
Per quanto riguarda il costrutto while, esso specifica soltanto la condizione di iterazione, lasciando le due altre operazioni al codice. Anche in questo la condizione di iterazione deve essere sempre vera per costruire un ciclo infinito.
while (condizione sempre vera) { [istruzioni] }
do { [istruzioni] } while (condizione sempre vera);