9

Y quiero decir que en el mismo sentido que un C/Java for es solo una sintaxis funky para un loop while.¿Las "continuación" de Scala son solo una sintaxis funky para definir y usar las funciones de devolución de llamada?

Todavía recuerdo cuando aprendí por primera vez sobre el for bucle en C, el esfuerzo mental que tuvo que entrar en la comprensión de la secuencia de ejecución de las tres expresiones de control relativas a la instrucción de bucle. Me parece que se debe aplicar el mismo tipo de esfuerzo para entender las Continuaciones (en Scala y supongo que probablemente en otros idiomas).

Y luego está la obvia pregunta de seguimiento ... si es así, ¿cuál es el punto? Parece mucho dolor (complejidad del lenguaje, errores del programador, programas ilegibles, etc.) sin ganancia.

Respuesta

3

En cierto sentido, sí, las continuaciones son funky sintaxis para el uso de devoluciones de llamada. Puede realizar manualmente una transformación global muy compleja en su código (la denominada transformación de estilo de continuación de paso), y obtendrá continuaciones en sus manos sin soporte directo del idioma.

Sin embargo, la transformación de toda la base de código probablemente no sea muy práctica, y el código resultante es difícil de leer, por lo que hacer que el compilador lo haga detrás de escena es MUCHO mejor.

+1

Sí, pero .... la función de continuación de Scala NO hace la transformación detrás de escena. En realidad, es todo lo contrario, te hace escribir código en un estilo de continuación de pasaje de continuación difícil de leer y lo transforma en un bytecode JVM de estilo imperativo. ¿Dónde está la ventaja? –

+1

http://lamp.epfl.ch/~rompf/continuations-icfp09.pdf (el documento de continuación de scala) habla sobre cómo usa la transformación CPS para implementar 'shift' y' reset'. Tiene muchos detalles valientes, pero básicamente la idea implica voltear todas las definiciones y aplicaciones de funciones entre un 'shift' y un' reset' al revés. Este sería un código bastante feo si se escribe a mano. – hzap

+0

Alex, tu comentario es incorrecto. El objetivo del complemento de continuación es que * no * tiene que escribir su código en el estilo de continuación de paso. Creo que estás confundido acerca de lo que es el "estilo de continuación de pase". –

Cuestiones relacionadas