tl; dr; El tipo es la abstracción general sobre una continuación
Una continuación es el tipo de sus entradas y salidas.
Lo más parecido que encontrará a una continuación no basada en el procedimiento es probablemente la mónada de continuación en Haskell, ya que se expresa como un tipo, para lo cual se pueden usar muchas funciones para interactuar con el tipo para interrumpir, reanudar, retroceder, etc.
Puede encapsular ese cierre en un tipo como el Cont
tipo en Haskell donde obtiene la abstracción de mónada como una "abstracción de nivel superior", y hay otras formas de abstracción sobre las continuaciones que obtiene cuando mira la continuación como un tipo en lugar de simplemente un procedimiento , por ejemplo
- Puede tomar dos continuaciones y hacer una alternativa entre ellas si el tipo sigue las leyes para ser un monoide
- Puede abstraer sobre el tipo para cambiar los tipos de entrada o salida de la continuación si encapsula el cierre en un tipo que cumpla con las leyes de un functor
- Puede aplicar o decorar arbitraria y parcialmente su continuación con funcionalidades como la validación de entrada o la conversión de entrada si encapsula el cierre en un tipo que cumpla con las leyes de un funtor aplicativo
Cierre vs. Procedimiento
Al final del día, básicamente tienes razón; una continuación es un "procedimiento", aunque preferiría referirme a él como un cierre. Muchas veces las continuaciones se expresan mejor como cierres de primera clase que han encerrado un entorno limitado. En un lenguaje funcional puro, podría decir que esto no es particularmente razonable porque carece de referencias; Esto es cierto, pero puede encerrar valores y una sola asignación hace que encerrar el valor frente a la referencia sea exactamente lo mismo. Esto da lugar a en Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
Un lenguaje que carece de la capacidad de encerrar un entorno vinculante técnicamente puede carecer de cierres de primera clase, pero incluso entonces hay algún entorno (generalmente el global) que está disponible para el cierre.
Entonces, diría que es más preciso describir una continuación como: Un cierre que se usa de una manera particular.
Conclusión
A la pregunta de "¿Es una continuación implementable de alguna otra manera que no sea un procedimiento?" No. Si no tiene funciones de primera clase , realmente no puede tener continuaciones como tales (sí, los punteros de funciones cuentan como funciones de primera clase, por lo que, alternativamente, puede ser suficiente el acceso arbitrario a la memoria).
Ahora a la pregunta de "¿Hay alguna forma de expresar una continuación de una manera más abstracta que un procedimiento?" Expresarlo como un tipo le brinda una abstracción mucho mayor, permitiéndole tratar la continuación de manera muy general, de modo que pueda interactuar con la continuación de muchas maneras más que simplemente ejecutarla.