Continuazione: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
m ortografia
FrescoBot (discussione | contributi)
m Bot: sintassi e spaziatura dei link
Riga 28: Riga 28:
==Collegamenti esterni==
==Collegamenti esterni==
* [http://www.siforge.org/articles/2004/09/20-la_magia_di_callcc.html La magia di callcc] Un articolo in italiano al riguardo
* [http://www.siforge.org/articles/2004/09/20-la_magia_di_callcc.html La magia di callcc] Un articolo in italiano al riguardo
*{{en}} [http://www.ps.uni-sb.de/~duchier/python/continuations.html Continuations Made Simple and Illustrated] Una spiegazione fatta utilizzando [[Python]] .
*{{en}} [http://www.ps.uni-sb.de/~duchier/python/continuations.html Continuations Made Simple and Illustrated] Una spiegazione fatta utilizzando [[Python]].
*{{en}} [http://www.stackless.com/spcpaper.htm Continuations and Stackless Python] scritto da Christian Tismer
*{{en}} [http://www.stackless.com/spcpaper.htm Continuations and Stackless Python] scritto da Christian Tismer
*{{en}} [http://www.linuxgazette.com/issue90/raghu.html setjmp/longjmp Illustrated] pubblicato su Linux Gazette
*{{en}} [http://www.linuxgazette.com/issue90/raghu.html setjmp/longjmp Illustrated] pubblicato su Linux Gazette

Versione delle 02:27, 14 ago 2011

In informatica, una continuazione (continuation in inglese) è un modo per rappresentare lo stato di esecuzione di un programma (vedi anche Stack) ad un punto dato. Molti linguaggi hanno un costrutto che permette di salvare lo stato corrente di esecuzione per poi riprendere l'esecuzione a partire da questo stato in un momento successivo. Questa tecnica è tipica della programmazione funzionale ma sono molti i linguaggi di programmazione che presentano questa caratteristica con varie denominazioni:

  • Scheme: call/cc (abbreviazione di call-with-current-continuation)
  • Standard ML of New Jersey: SMLofNJ.CONT.callcc
  • C: setcontext et al. (UNIX System V e GNU libc)
  • Ruby: callcc
  • Python: (vedi oltre) possedeva il modulo continuation ma è stato rimosso.
  • Haskell: Monade di continuazione

La continuazione si utilizza per "saltare" da una parte del programma all'altra a seconda delle necessità. Funziona in modo analogo al comando goto presente nel BASIC con la differenza che il comando goto è sconsigliato perché rende la manutenzione del codice difficile mentre la continuazione non rende ardua la modifica del codice quando questo diventa di elevate dimensioni. La continuazione non salta tra linee di codice ma tra stati. Si può vedere il programma come un insieme di stati che evolvono a seconda delle azioni dell'utente e la continuazione consente di saltare tra stati diversi a seconda delle necessità. Utilizza un modello di programmazione simile a quello delle reti di Petri.

Il supporto per la continuazione da parte dei vari linguaggi è molto variabile. Un linguaggio di programmazione supporta la continuazione rientrante o di prima classe se una continuazione può essere richiamata più volte per rientrare nello stesso contesto (l'uso del termine rientrante in questo caso non è da confondere con l'uso fatto trattando il multitasking).

Se le continuazione può essere usata solo per uscire dal contesto corrente, si dice il linguaggio supporta l'escape continuation. Molti linguaggi che non supportanto direttamente la continuazione, hanno il supporto per la gestione delle eccezioni, che è equivalente all'escape continuation e può essere usata per gli stessi scopi. I costrutti C setjmp e longjmp sono di questo tipo: possono essere usati solo per srotolare lo stack e non per ripristinare una precedente continuazione salvata.

Le continuazioni di prima classe possono essere usate per implementare l'ottimizzazione della chiamata di coda. La presenza sia della continuazione di prima classe che dell'ottimizzazione della chiamata di coda garantita, è uno dei punti di distinzione dello Scheme dagli altri linguaggi Lisp.

Molti programmatori che non sono abituati alla continuazione, la trovano un concetto difficile da capire. Il linguaggio di programmazione esoterico Unlambda include questa caratteristica solo per la sua difficoltà di comprensione.

La continuazione è strettamente collegata alla trasformazione della doppia negazione dalla logica classica alla logica intuizionistica attraverso l'isomorfismo di Curry-Howard e alla legge di Peirce.

Voci correlate

Altri progetti

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica