9

Und ich meine, dass in dem gleichen Sinne, dass ein C/Java for ist nur eine funky Syntax für eine while Schleife.Sind Scala "Fortsetzungen" nur eine funky Syntax zum Definieren und Verwenden von Callback-Funktionen?

Ich erinnere mich noch beim ersten Lernen über die for Schleife in C, die geistige Anstrengung, die in das Verständnis der Ausführungsreihenfolge der drei Steuerausdrücke relativ zur Schleifenanweisung gehen musste. Es scheint mir, dass die gleichen Anstrengungen unternommen werden müssen, um Continuations zu verstehen (in Scala und vermutlich anderen Sprachen).

Und dann gibt es die offensichtliche Follow-up-Frage ... wenn ja, was ist der Sinn? Es scheint eine Menge Schmerz zu sein (Sprachkomplexität, Programmierfehler, unlesbare Programme usw.), ohne Gewinn.

Antwort

3

In gewissem Sinne, ja, Fortsetzungen sind funky Syntax für die Verwendung von Rückrufen. Sie können eine sehr komplexe globale Transformation für Ihren Code durchführen (die so genannte Fortsetzungsübergabe-Stilumwandlung), und Sie erhalten Fortsetzungen in Ihren Händen ohne direkte Sprachunterstützung.

Allerdings ist die Umwandlung Ihrer gesamten Codebasis wahrscheinlich nicht sehr praktisch, und der resultierende Code ist schwer zu lesen, so dass der Compiler es für Sie hinter den Kulissen tun kann, ist VIEL besser.

+1

Ja, aber ... die Scala-Fortsetzungsfunktion führt NICHT die Transformation für Sie hinter den Kulissen durch. Eigentlich ist es genau das Gegenteil, es lässt Sie Code in einem verrückten, schwer lesbaren Fortsetzungsmodus schreiben und wandelt ihn in einen regulären JVM-Bytecode im Imperativ-Stil um. Wo ist der Vorteil? –

+1

http://lamp.epfl.ch/~romppf/continuations-icfp09.pdf (das Scala-Fortsetzungs-Papier) spricht darüber, wie es die CPS-Transformation verwendet, um 'shift' und' reset' zu implementieren. Es hat viele Details, aber im Grunde geht es darum, alle Definitionen und Funktionsanwendungen zwischen "Shift" und "Reset" umzudrehen. Dies wäre ein ziemlich hässlicher Code, wenn er von Hand ausgeschrieben wird. – hzap

+0

Alex, dein Kommentar ist falsch. Der ganze Sinn des Fortsetzungs-Plugins ist, dass Sie * Ihren * Code nicht im Fortsetzungsmodus schreiben müssen. Ich glaube, Sie sind verwirrt darüber, was "Fortsetzungsstil" überhaupt ist. –

Verwandte Themen