Continuation

Continuation

Sur les autres projets Wikimedia :

En informatique, la continuation d'un système désigne son futur, c'est-à-dire la suite des instructions qu'il lui reste à exécuter à un moment précis. C'est un point de vue pour décrire l'état de la machine.

Sommaire

Dans les langages de programmation

Utilisation explicite

Dans certains langages de programmation, les continuations peuvent être manipulées explicitement en tant qu'objets du langage à part entière : on peut stocker la continuation courante dans une variable que l'on peut donc manipuler en tant que telle ; puis plus loin, on peut restaurer la continuation, ce qui a pour effet de dérouter l'exécution du programme actuel vers le futur que l'on avait enregistré.

En C, l'instruction setjmp permet de capturer une continuation (en fait, stocker la valeur du compteur ordinal dans une variable), et l'instruction longjmp permet de dérouter le programme vers une continuation enregistrée.

En programmation fonctionnelle, une continuation prend la forme d'une fonction qui peut prendre divers arguments (qui influent sur la valeur de retour de l'instruction qui avait "saisi" la continuation courante) et qui n'a pas de valeur de retour (en fait ne finit pas du point de vue de l'appelant, car le programme est dérouté).

Exemple en Scheme :

 (define fonction1
   (lambda (k) 
     (begin (display "Toto")
            (k "Titi")
            (display "Tata")
 )))
 (display (call-with-current-continuation fonction1))

a pour sortie à l'écran :

Toto
Titi

L'instruction « (display "Tata") » a été ignorée.

Explication :

  • nous commençons par définir une fonction «fonction1», puis nous demandons d'afficher le résultat («display») de «(call-with-current-continuation fonction1)».
  • l'instruction «call-with-current-continuation» a pour effet de capturer la continuation courante (qui est d'afficher la valeur de retour grâce à la commande «display», puis de terminer le programme) et de l'envoyer en argument à la fonction «fonction1»
  • or cette fonction est une séquence de trois instructions, dont la deuxième est d'appeler la continuation «k» passée en argument, donc de sortir de la fonction puisque la continuation aura été capturée à l'extérieur.
  • après cela, la continuation s'exécute normalement : «display» s'exécute avec la valeur de retour de «(call-with-current-continuation fonction1)», qui avait été fournie en argument de «k», c'est-à-dire "Titi"; puis le programme termine.

Utilisation implicite : les exceptions

Cependant l'utilisation la plus courante de la notion de continuation se fait de manière implicite, lorsque l'on manipule les exceptions.

En effet, le bloc d'exception n'est qu'une structure syntaxique pour dire qu'avant d'exécuter, on a enregistré la continuation courante (sans le bloc) précédée de l'exécution de la routine de traitement d'exception, et que lorsque une exception sera rencontrée pendant exécution du bloc, alors on appellera la continuation correspondante.

Exemple en OCaml :

 try 
   50 / 0 
 with 
   Division_by_zero -> 42 ;;

retourne

- : int = 42

Explication : avant d'exécuter la division, OCaml enregistre la continuation consistant à retourner 42 puis à finir l'exécution dans l'exception «Division_by_zero». Puis OCaml essaye de lancer la division qui résulte en l'appel de cette exception, à laquelle justement on venait d'associer une continuation.

Programmation par continuation

En programmation fonctionnelle, la programmation par continuation désigne une technique de programmation consistant à n'utiliser que de simples appels de fonction qui prennent pour argument leur propre continuation, au lieu d'appeler séquentiellement des fonctions, ou d'exécuter une fonction sur le résultat de la précédente. Ces fonctions se retrouvent en quelque sorte maîtresses de leur destin, et ne se contentent plus de subir le contexte.

Un des enjeux de la programmation par continuation est d'obtenir un programme récursif terminal, qui après compilation et optimisation ne requiert plus d'empiler les appels successifs imbriqués. Ceci se traduit par une moindre consommation de mémoire.

Exemple : calcul de la factorielle, en OCaml

Version «classique» :

 let rec fact = function 
    | 0 -> 1
    | n -> n*(fact (n - 1));;

Version par continuation (qui est stricto sensu récursive terminale, mais pourrait être bien simplifiée pour consommer moins de mémoire, en stockant l'accumulation du résultat plutôt qu'une continuation, qui elle est de plus en plus grosse, ce qui fait qu'on n'a rien gagné sur le plan pratique) :

 let rec fact k = function
   | 0 -> (k 1)
   | n -> fact (fun x -> k (n * x)) (n - 1);;

(Si on veut juste calculer la factorielle de 5 et l'afficher, la syntaxe d'appel serait alors :)

 print_int (fact 5);;

dans le premier cas et

fact print_int 5

dans le second.

En sémantique dénotationnelle

Il existe une sémantique dénotationnelle dite par passage de continuation. Dans cette sémantique, le sens mathématique d'un programme est une fonction qui prend une continuation (celle qui suit son exécution) et rend une continuation (celle qui correspond à son exécution).

Ainsi, si P est un programme, alors sa sémantique [[P]] est de type Continuation → Continuation, où le type Continuation est le type État → Observation.

Et si E est une expression (programme qui a une valeur dans le langage), [[E]] est de type E_Continuation → Continuation, où le type E_Continuation (ou continuation d'expression) est le type Valeur → Continuation.

Les continuations permettent de donner un contenu calculatoire à la logique classique dans le cadre de la correspondance de Curry-Howard.



Wikimedia Foundation. 2010.

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

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • continuation — [ kɔ̃tinɥasjɔ̃ ] n. f. • 1283; lat. continuatio 1 ♦ Action de continuer qqch. ⇒ poursuite, suite. Se charger de la continuation d une œuvre. Pop. Bonne continuation ! souhait adressé à qqn qui semble se plaire à ce qu il fait, dans sa situation.… …   Encyclopédie Universelle

  • continuation — I (prolongation) noun addition, adherence, adsiduitas, augmentation, continuance, continuatio, extension, lengthening, maintenance, perpetuation, perpetuitas, perseverance, persistence, preservation, protraction, stretching, sustaining,… …   Law dictionary

  • continuation — CONTINUATION. sub. f. L action par laquelle on continue, et la durée de la chose continuée. La continuation d un ouvrage. Il a trouvé beaucoup de difficultés dans la continuation de ce travail. La continuation de la guerre. La continuation des… …   Dictionnaire de l'Académie Française 1798

  • continuation — Continuation. s. f. v. Action par laquelle on continuë. La continuation d un ouvrage. dans la continuation d un travail. Il signifie aussi, La chose continuë. La continuation d une muraille. la continuation de Baronius. Il signifie aussi, Suite & …   Dictionnaire de l'Académie française

  • continuation — continuation, continuance, continuity are often confused, especially when meaning the quality, the act, or the state of continuing or of being continued or an instance revealing such a quality, action, or state. Continuation suggests prolongation …   New Dictionary of Synonyms

  • Continuation — Con*tin u*a tion, n. [L. continuatio: cf. F. connuation.] 1. That act or state of continuing; the state of being continued; uninterrupted extension or succession; prolongation; propagation. [1913 Webster] Preventing the continuation of the royal… …   The Collaborative International Dictionary of English

  • continuation — Continuation, Assiduitas, Continuatio, Continuitas, Instantia, Tenor. Continuation de guerre, Assiduitas belli. L histoire requiert continuation, suite et entrenement de propos, Historia orbem quendam contextumque desiderat. Continuation de… …   Thresor de la langue françoyse

  • continuation — late 14c., from O.Fr. continuation (13c.), or directly from L. continuationem (nom. continuatio), noun of action from continuat , pp. stem of continuare (see CONTINUE (Cf. continue)) …   Etymology dictionary

  • continuation — [kən tin΄yo͞o ā′shən] n. [ME continuacioun < OFr continuation < L continuatio < pp. of continuere: see CONTINUE] 1. a keeping up or going on without interruption; continued and unbroken existence or action 2. a taking up or beginning… …   English World dictionary

  • Continuation — (v. lat.), 1) die Fortdauer; 2) Fortsetzung, Folge. Continuativ, nach einer Reihenfolge verbunden …   Pierer's Universal-Lexikon

  • Continuation — Continuation, lat., Fortsetzung, Folge; continuirlich, fortdauernd; continuiren, fortsetzen. Continuirliche Größen, in der Mathematik solche, die sich durcheinander nicht gänzlich theilen lassen, weil an ihnen kein Theil der möglich kleinste ist …   Herders Conversations-Lexikon

Share the article and excerpts

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