9

E intendo quello nello stesso senso in cui un C/Java for è solo una sintassi funky per un ciclo while.Le "continuazioni" di Scala sono solo una sintassi funky per la definizione e l'uso delle funzioni di callback?

Ricordo ancora quando ho iniziato a conoscere il ciclo for in C, lo sforzo mentale che è stato necessario per comprendere la sequenza di esecuzione delle tre espressioni di controllo relative all'istruzione del ciclo. A me sembra che debba essere applicato lo stesso tipo di sforzo per comprendere le Continuazioni (in Scala e credo che probabilmente altre lingue).

E poi c'è l'ovvia domanda di follow-up ... se sì, allora qual è il punto? Sembra un sacco di dolore (complessità della lingua, errori del programmatore, programmi illeggibili, ecc.) Senza alcun guadagno.

risposta

3

In un certo senso, sì, le continuazioni sono sintassi funky per l'utilizzo di callback. Puoi eseguire manualmente una trasformazione globale molto complessa sul tuo codice (la cosiddetta trasformazione del passaggio di continuazione) e otterrai continuazioni a portata di mano senza il supporto diretto della lingua.

Tuttavia, la trasformazione dell'intera base di codice non è probabilmente molto pratica e il codice risultante è difficile da leggere, quindi avere il compilatore per te dietro le quinte è MOLTO meglio.

+1

Sì, ma .... la funzione di continuazione di Scala NON esegue la trasformazione per te dietro le quinte. In realtà è esattamente l'opposto, ti fa scrivere codice in pazzesco stile di passaggio continuo e difficile da leggere e lo trasforma in un normale bytecode JVM in stile imperativo. Dov'è il vantaggio? –

+1

http://lamp.epfl.ch/~rompf/continuations-icfp09.pdf (il documento di continuation di scala) parla di come usa la trasformazione CPS per implementare 'shift' e' reset'. Ha molti dettagli grintosi, ma fondamentalmente l'idea coinvolge tutte le definizioni e le applicazioni di funzione tra uno 'shift' e un' reset' dentro e fuori. Questo sarebbe un codice piuttosto brutto se scritto a mano. – hzap

+0

Alex, il tuo commento non è corretto. L'intero punto del plugin di continuazione è che * non * devi scrivere il tuo codice in stile di passaggio continuo. Penso che tu sia confuso riguardo a cosa sia lo "stile di passaggio continuo". –

Problemi correlati