Continuazione: differenze tra le versioni
m Robot: Automated text replacement (-(?m)(?i)^\*(.*)\(in inglese\) +*{{en}}\1) |
m robot Aggiungo: ja:継続 |
||
Riga 38: | Riga 38: | ||
[[en:Continuation]] |
[[en:Continuation]] |
||
[[fr:Continuation]] |
[[fr:Continuation]] |
||
[[ja:継続]] |
Versione delle 10:21, 24 mar 2006
In informatica, una continuazione (continuation in inglese) è un modo per rappresentare lo stato di esecuzione di un programmma (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 dicall-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 moodulo continuation ma è stato rimosso.
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
Collegamenti esterni
- La magia di callcc Un articolo in italiano a riguardo
- (EN) Continuations Made Simple and Illustrated Una siegazione fatta utilizzando Python .
- (EN) Continuations and Stackless Python scritto da Christian Tismer
- (EN) setjmp/longjmp Illustrated pubblicato su Linux Gazette
- (EN) On-line proceedings of the Fourth Workshop on Continuations
- (EN) Continuation, functions and jumps
- (EN) Using continuations for web programming