Thread Gültigkeit von Variablen... oder so etwas.
(30 answers)
Opened by theresa at 2008-02-18 13:44
@Struppi: Vielleicht liegt's daran, dass ich zu viele Programmiersprachen kenne, aber die Ausdrücke "innere Funktion", "Closure", "Lambda Ausdruck", "Lambda Closure", "anonyme Funktion", "anonyme Subroutine" oder "Delegate" kommen alle an verschiedenen Stellen mit identischer Bedeutung vor. Ich weiß also nicht, was für Dich der Unterschied zwischen einer Lambda Closure und einer Closure ist. Nach Lektüre des von Dir verlinkten Artikels konnte ich auch nur feststellen, dass er genau das Konzept beschreibt, welches mit all den erwähnten Begriffen bezeichnet werden kann: Das Erstellen von (anonymen) Funktionen, die über alle am Ort und zum Zeitpunkt der Erstellung gültigen lexikalischen Variablen abgeschlossen sind.
Eine CPS-Transformation benutzt solche Funktionen um das weiterreichende Konzept der Continuations zu emulieren. Während eine Closure über lexikalische Variablen abgeschlossen ist, ist eine Continuation zusätzlich über den Aufrufstack abgeschlossen. Continuations sind das funktionale Äquivalent zu goto-Befehlen, können aber zusätzlich Parameter aufnehmen und neben einem nicht-lokalen Kontrolltransfer auch eine Modifikation von (Variablen- und Aufruf-) Stackinhalt und Stacktiefe verursachen. Continuations sind damit auch ein echt mächtigeres Konstrukt als Exceptions, welche zwar ebenfalls einen nicht-lokalen Kontrolltransfer verursachen, dabei aber die Stacktiefe lediglich verringern und den tieferen Inhalt nicht verändern können. Das Konzept der Continuations ist nicht ganz trivial nicht umsonst gibt es eine Witzprogrammiersprache namens Unlambda, die als einzige explizite Flusskontrollstruktur Continuations enthält, um maximal unverständlichen Code zu erzwingen ;-) When C++ is your hammer, every problem looks like your thumb.
|