Thread Gültigkeit von Variablen... oder so etwas. (30 answers)
Opened by theresa at 2008-02-18 13:44

murphy
 2008-02-23 13:41
#106293 #106293
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@KurtZ: In Scheme gibt's bei der Aufrufsyntax keinen Unterschied zwischen Continuations und normalen Subroutinen. Beim Aufruf einer Continuation werden die übergebenen Parameter zu den Rückgabewerten des Funktionsaufrufes zu dem die Continuation gehört und das Programm fährt auch an dieser Stelle fort. Definieren muss man Continuations überhaupt nicht, weil sie automatisch intern für jeden Funktionsaufruf erzeugt werden und über call-with-current-continuation abgefragt werden können.

Ob Scheme einen Stack hat, oder nicht, ist implementationsspezifisch. Konzeptuell hat die Sprache natürlich schon einen Stack, denn man kann ganz normal Funktionsaufrufe ineinander schachteln. Implementiert wird das ganze aber unter Umständen anders.

Beispiel: Meine Lieblingsimplementation von Scheme ist CHICKEN. Der Compiler übersetzt hier zunächst das ganze Programm in CPS und erzeugt dann für jede Subroutine, die nach der CPS-Transformation entstanden ist, eine C-Funktion. Das resultierende C-Programm ruft nun immer wenn ein Wert aus irgendeiner Funktion zurückgegeben wird oder eine Continuation explizit aufgerufen wird, eine neue C-Funktion auf. Dabei wird natürlich der Stack zugemüllt. Um dem etwas nützliches abzugewinnen, benutzt CHICKEN den Stack jetzt einfach zur Allokation sämtlicher kleinen Objekte und schmeißt dann, wenn er voll wird, den gesamten Stack weg, nachdem alle noch referenzierten Objekte vom Garbagecollector in den Heap transferiert wurden. Damit wird der Stack also lediglich als erste Generation eines generationellen Garbagecollectors benutzt, was in der Regel eine sehr schnelle und effiziente Allokationsstrategie ist.
When C++ is your hammer, every problem looks like your thumb.

View full thread Gültigkeit von Variablen... oder so etwas.