Êtes-vous un étudiant de l'EPFL à la recherche d'un projet de semestre?
Travaillez avec nous sur des projets en science des données et en visualisation, et déployez votre projet sous forme d'application sur Graph Search.
In programming languages, a delimited continuation, composable continuation or partial continuation, is a "slice" of a continuation frame that has been reified into a function. Unlike regular continuations, delimited continuations return a value, and thus may be reused and composed. Control delimiters, the basis of delimited continuations, were introduced by Matthias Felleisen in 1988 though early allusions to composable and delimited continuations can be found in Carolyn Talcott's Stanford 1984 dissertation, Felleisen et al., Felleisen's 1987 dissertation, and algorithms for functional backtracking, e.g., for pattern matching, for parsing, in the Algebraic Logic Functional programming language, and in the functional implementations of Prolog where the failure continuation is often kept implicit and the reason of being for the success continuation is that it is composable. Delimited continuations were first introduced by Felleisen in 1988 with an operator called , first introduced in a tech report in 1987, along with a prompt construct . The operator was designed to be a generalization of control operators that had been described in the literature such as call/cc from Scheme, ISWIM's J operator, John C. Reynolds' escape operator, and others. Subsequently, many competing delimited control operators were invented by the programming languages research community such as prompt and control, shift and reset,cupto, fcontrol, and others. Various operators for delimited continuations have been proposed in the research literature. One independent proposal is based on continuation-passing style (CPS) -- i.e., not on continuation frames—and offers two control operators, shift and reset, that give rise to static rather than to dynamic delimited continuations. The reset operator sets the limit for the continuation while the shift operator captures or reifies the current continuation up to the innermost enclosing reset. For example, consider the following snippet in Scheme: (* 2 (reset (+ 1 (shift k (k 5))))) The reset delimits the continuation that shift captures (named by k in this example).
Stephan Morgenthaler, Robert Staudte
Jian Wang, Lesya Shchutska, Olivier Schneider, Yiming Li, Yi Zhang, Aurelio Bay, Guido Haefeli, Christoph Frei, Frédéric Blanc, Tatsuya Nakada, Michel De Cian, Luca Pescatore, François Fleuret, Elena Graverini, Renato Quagliani, Maria Vieites Diaz, Federico Betti, Andrea Merli, Aravindhan Venkateswaran, Luis Miguel Garcia Martin, Vitalii Lisovskyi, Sebastian Schulte, Veronica Sølund Kirsebom, Elisabeth Maria Niel, Alexandre Brea Rodriguez, Mingkui Wang, Zhirui Xu, Lei Zhang, Ho Ling Li, Mark Tobin, Minh Tâm Tran, Niko Neufeld, Matthew Needham, Marc-Olivier Bettler, Maurizio Martinelli, Vladislav Balagura, Donal Patrick Hill, Liang Sun, Pietro Marino, Mirco Dorigo, Xiaoxue Han, Liupan An, Federico Leo Redi, Plamen Hristov Hopchev, Thibaud Humair, Maxime Schubiger, Hang Yin, Guido Andreassi, Violaine Bellée, Olivier Göran Girard, Preema Rennee Pais, Pavol Stefko, Tara Nanut, Maria Elena Stramaglia, Yao Zhou, Tommaso Colombo, Vladimir Macko, Guillaume Max Pietrzyk, Evgenii Shmanin, Simone Meloni, Xiaoqing Zhou, Surapat Ek-In, Carina Trippl, Sara Celani, Serhii Cholak, Dipanwita Dutta, Zheng Wang, Yi Wang, Hans Dijkstra, Gerhard Raven, Peter Clarke, Frédéric Teubert, Giovanni Carboni, Victor Coco, Adam Davis, Paolo Durante, Wenyu Zhang, Yu Zheng, Anton Petrov, Maxim Borisyak, Feng Jiang, Chen Chen, Zhipeng Tang, Xuan Li, Alexey Boldyrev, Almagul Kondybayeva, Hossein Afsharnia