tl; dr; Il tipo è l'astrazione generale su una continuazione
Una continuazione è il tipo dei suoi input e output
La cosa più vicina a una continuazione non basata su procedure è probabilmente la monade di continuazione in Haskell in quanto espressa come un tipo, per cui molte funzioni possono essere utilizzate per interagire con il tipo per interrompere, riprendere, tornare indietro, ecc.
Puoi incapsulare quella chiusura in un tipo come il Cont
tipo in Haskell in cui ottieni l'astrazione della monade come "astrazione di livello superiore" e ci sono altre forme di astrazione rispetto alle continuazioni che ottieni quando guardi la continuazione come un tipo invece che semplicemente una procedura , per esempio
- Puoi prendere due continuazioni e fare un'alternativa tra loro se il tipo segue le leggi per essere un monoide
- È possibile astratta sopra il tipo di cambiare i tipi di ingresso o di uscita della continuazione se incapsulare la chiusura in un tipo che si attiene alle leggi di un funtore
- Puoi applicare o decorare arbitrariamente e parzialmente la tua continuazione con funzionalità come la convalida dell'input o la conversione dell'input se incapsuli la chiusura in un tipo che segue le leggi di un agente applicativo
Chiusura vs. procedura
Alla fine della giornata hai praticamente ragione; una continuazione è una "procedura", anche se preferirei chiamarla chiusura. Spesso le continuazioni si esprimono meglio come chiusure di prima classe che hanno racchiuso un ambiente associato. In un linguaggio funzionale puro potresti dire che questo non è particolarmente ragionevole perché manchi di riferimenti; questo è vero ma puoi racchiudere i valori e la singola assegnazione rende la racchiude il valore rispetto al riferimento esattamente la stessa cosa. Questo dà origine a Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Un linguaggio che manca della capacità di racchiudere un ambiente vincolante può tecnicamente mancare di chiusure di prima classe, ma anche allora c'è un ambiente (generalmente globale) che è disponibile per la chiusura.
Quindi direi che è più preciso descrivere una continuazione come: una chiusura utilizzata in un modo particolare.
Conclusione
Alla domanda "La continuazione è implementabile in qualche modo diverso da una procedura?" No. Se non disponi di funzioni di prima classe, non puoi davvero avere delle continuazioni in quanto tali (sì, i puntatori di funzione contano come funzioni di prima classe, quindi in alternativa può bastare un accesso arbitrario alla memoria).
Ora alla domanda "Esistono modi per esprimere una continuazione in un modo più astratto di una procedura?" Esprimerlo come un tipo ti dà un'astrazione molto maggiore, permettendoti di trattare la continuazione in modi molto generali in modo da poter interagire con la continuazione in molti più modi rispetto alla semplice esecuzione.