Continuare
În informatică , o continuare (limba engleză continuare) este o modalitate de a reprezenta starea de execuție a unui program de la un anumit punct. Multe limbi au o construcție care vă permite să salvați starea curentă de execuție și apoi să reluați execuția din această stare ulterior. Această tehnică este tipică programării funcționale, dar există multe limbaje de programare care prezintă această caracteristică cu nume diferite:
- Schemă :
call/cc
(prescurtare pentrucall-with-current-continuation
) - ML Standard din New Jersey:
SMLofNJ.CONT.callcc
- C :
setcontext
și colab. ( UNIX System V și GNU libc) - Rubin :
callcc
- Python : (a se vedea mai jos) a avut modulul de
continuation
dar a fost eliminat. - Haskell : Continuarea monadei
Continuarea este utilizată pentru a „sări” dintr-o parte a programului în alta, după cum este necesar. Funcționează într-un mod similar cu comanda goto prezentă în BASIC, cu diferența că comanda goto nu este recomandată deoarece face dificilă întreținerea codului, în timp ce continuarea nu face dificilă modificarea codului când devine mare. Continuarea nu sare între linii de cod, ci între stări. Puteți vedea programul ca un set de stări care evoluează în funcție de acțiunile utilizatorului, iar continuarea vă permite să săriți între diferite stări, după cum este necesar. Folosește un model de programare similar cu cel al rețelelor Petri .
Suportul pentru continuarea prin diferite limbi este foarte variabil. Un limbaj de programare acceptă continuarea reentrantă sau de primă clasă dacă o continuare poate fi apelată de mai multe ori pentru a intra din nou în același context (utilizarea termenului reentrant în acest caz nu trebuie confundată cu utilizarea făcută atunci când este vorba de multitasking ).
Dacă continuarea poate fi utilizată doar pentru a ieși din contextul actual, se spune că limba susține continuarea evadării . Multe limbi care nu acceptă în mod direct continuarea au suport pentru gestionarea excepțiilor , ceea ce este echivalent cu continuarea evadării și poate fi utilizat în aceleași scopuri. Construcțiile C setjmp
și longjmp
sunt de acest tip: pot fi utilizate numai pentru derularea stivei și nu pentru a reveni la o continuare salvată anterior.
Continuări de primă clasă pot fi folosite pentru a implementa optimizarea apelurilor în coadă . Prezența atât a continuării de primă clasă, cât și a optimizării garantate a apelurilor la coadă este unul dintre punctele distinctive ale Schemei de alte limbi Lisp .
Mulți programatori care nu sunt obișnuiți cu continuarea consideră că este un concept dificil de înțeles. Limbajul esoteric de programare Unlambda include această caracteristică numai datorită dificultății sale de înțelegere.
Continuarea este strâns legată de transformarea dublei negații de la logica clasică la logica intuiționistă prin izomorfismul Curry-Howard și legea lui Peirce .
Elemente conexe
Alte proiecte
- Wikționarul conține dicționarul lema « continuare »
linkuri externe
- Magia callcc Un articol în italiană despre asta
- (EN) Continuări simplificate și ilustrate O explicație făcută folosind Python .
- (EN) Continuări și Python fără stive scrise de Christian Tismer
- ( EN ) setjmp / longjmp Illustrated publicat în Linux Gazette
- ( RO )Proceduri on-line ale celui de-al patrulea atelier privind continuările , pe cs.bham.ac.uk.
- (RO) Continuare, salturi și funcții (PDF), pe cs.bham.ac.uk.
- ( RO ) Utilizarea continuărilor pentru programarea web , pe phubuh.org . Adus la 1 noiembrie 2004 (arhivat din original la 19 octombrie 2004) .