9

Et je veux dire que dans le même sens qu'un C/Java for est juste une syntaxe funky pour une boucle while.Les "continuations" de Scala sont-elles simplement une syntaxe géniale pour définir et utiliser les fonctions de rappel?

Je me souviens encore quand j'ai appris la boucle for en C, l'effort mental qui devait comprendre la séquence d'exécution des trois expressions de contrôle par rapport à l'instruction de boucle. Il me semble que le même type d'effort doit être appliqué pour comprendre les Continuations (en Scala et probablement d'autres langues).

Et puis il y a la question de suivi évidente ... si oui, alors à quoi ça sert? Il semble que beaucoup de douleur (complexité du langage, erreurs de programmation, programmes illisibles, etc) pour aucun gain.

Répondre

3

Dans un certain sens, oui, les suites sont une syntaxe géniale pour l'utilisation des rappels. Vous pouvez effectuer manuellement une transformation globale très complexe sur votre code (la transformation de continuation-passing-style), et vous obtiendrez des continuations sur vos mains sans support linguistique direct. Cependant, la transformation de votre base de code entière n'est probablement pas très pratique, et le code résultant est difficile à lire, donc avoir le compilateur le faire pour vous dans les coulisses est BEAUCOUP mieux.

+1

Oui, mais .... la fonction de continuité Scala ne fait PAS la transformation pour vous dans les coulisses. En fait, c'est juste le contraire, cela vous oblige à écrire du code dans un style continu-passing-pass fou et difficile à lire et à le transformer en bytecode JVM de style impératif. Où est l'avantage? –

+1

http://lamp.epfl.ch/~rompf/continuations-icfp09.pdf (le document sur les continuations scala) explique comment il utilise la transformation CPS pour implémenter 'shift' et' reset'. Il y a beaucoup de détails, mais en gros, l'idée consiste à inverser toutes les définitions et applications entre un 'shift' et un' reset'. Ce serait un code assez moche si écrit à la main. – hzap

+0

Alex, votre commentaire est incorrect. Le but du plugin continuations est que vous n'ayez pas à écrire votre code dans le style de continuation-passing. Je pense que vous êtes confus au sujet de ce qu'est le "style de continuation-passing". –