Φραγμένη συνέχεια

Στις γλώσσες προγραμματισμού, μια συντιθέμενη συνέχεια (composable continuation), φραγμένη συνέχεια (delimited continuation) ή μερική συνέχεια (partial continuation), είναι ένα τμήμα του πλαισίου στοίβας των συνεχειών που έχει γίνει η επαναφορά του (reification) σε μια συνάρτηση. Σε αντίθεση με τις κανονικές συνέχειες, οι φραγμένες συνέχειες επιστρέφουν τιμή και επομένως μπορούν να ξαναχρησιμοποιηθούν και να συντεθούν ως συναρτήσεις.

Οι φραγμένες συνέχειες μπορούν να υλοποιηθούν με δυο τελεστές, τον shift και τον reset. Ο reset θέτει το όριο που φράσσει τη συνέχεια. Ο shift παίρνει μια συνάρτηση και της περνά τη φραγμένη συνέχεια. Όταν η φραγμένη συνέχεια κληθεί, ο υπολογισμός διακόπτεται και μια τιμή επιστρέφεται από τον shift. Όταν ολόκληρος ο υπολογισμός μέσα στον reset τελειώσει, το αποτέλεσμα επιστρέφεται από τη φραγμένη συνέχεια. Για παράδειγμα, στον παρακάτω κώδικα σε Scheme:

 (reset (* 2 (shift k CODE)))

όταν η CODE καλεί την (k N), αποτιμάται και επιστρέφεται το (* 2 N).

Επιπλέον, όταν όλος ο υπολογισμός μέσα στον shift ολοκληρωθεί, η συνέχεια δε χρησιμοποιείται πια, και η εκτέλεση αρχίζει πάλι εκτός του reset. Επομένως ο,

 (reset (* 2 (shift k (k (k 4)))))

καλεί την (k 4) πρώτα (που επιστρέφει 8), και μετά την (k 8) (που επιστρέφει 16). Σε αυτό το σημείο, η έκφραση shift έχει τελειώσει την εκτέλεσή της και η υπόλοιπη έκφραση reset αγνοείται για το υπόλοιπο του προγράμματος. Το τελικό αποτέλεσμα είναι 16.

Οτιδήποτε συμβαίνει εκτός της έκφρασης reset είναι κρυμμένο. Για παράδειγμα ο ακόλουθος κώδικας επιστρέφει 17:

 (+ 1 (reset (* 2 (shift k (k (k 4))))))

Οι φραγμένες συνέχειες είχαν αρχικά περιγραφεί από τους Felleisen et al. και Johnson. Από τότε έχουν χρησιμοποιηθεί σε πολλά πεδία, ειδικότερα στον ορισμό νέων τελεστών ροής ελέγχου, βλ. Queinnec για μια έρευνα στο αντικείμενο.

Οι φραγμένες συνέχειες είναι επίσης χρήσιμες στη γλωσσολογία: δείτε το άρθρο Συνέχεια για λεπτομέρειες.

Παραπομπές

Εξωτερικοί σύνδεσμοι 
 Composable continuations tutorial at SchemeWiki 
 Delimited continuations in operating systems 
 Native delimited continuations in (byte-code) OCaml 

Γλώσσες προγραμματισμού
Έλεγχος ροής