Zurück zur Übersicht

Begriff

Delimited Continuations

Computer Science Programming S4
2 Quellen 0 Lernpfade 0 Backlinks enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

Normale Continuations (call/cc) erfassen den ganzen Rest des Programms (bis Prozess-Ende). Das ist oft zu viel (Memory Leaks, globaler GOTO). Delimited Continuations erfassen nur einen Teil des Programms. Du setzt Marker: reset { ... shift k ... }. shift schneidet den Stack ab bis zum reset. Diesen Schnipsel (k) kannst du wie eine Funktion benutzen. Du kannst ihn 0-mal aufrufen (Code löschen), 1-mal (normal) oder 100-mal (Loop). Das ist die mächtigste Control-Flow-Primitive, die wir kennen. Daraus kann man alles bauen: for-Loops, Exceptions, Async/Await, Prolog-Suche.

Merksatz: Eine Erweiterung von Continuations, die es erlaubt, nur einen abgegrenzten Teil des Aufrufstacks (Continuation) zu erfassen, zu speichern und als Funktion wiederzuverwenden (Reifizierung des Kontrollflusses).


Quick-Check

  1. Wozu im Alltag?
    Webserver (Request Scope). Ein Request pausiert (wartet auf DB), der Thread wird frei für andere. Später wird der Request fortgesetzt. Das ist im Prinzip Delimited Continuation.
  2. Mächtiger als Monaden?
    Genauso mächtig (man kann jede Monade damit implementieren: filinski-representable). Aber oft performanter und besser komponierbar.
  3. Gehirn-Knoten?
    Ja. Shift/Reset zu verstehen gilt als "Schwarzer Gürtel" der funktionalen Programmierung.