← Back to team overview

cl-escape-team team mailing list archive

Re: Wozu "st" Structur?

 

> Warum eigentlich so:
> (defun lv (cont &optional declarations)
>    `(lambda (self ,*v*)
>       (declare (ignorable self ,*v*))
>       ,@declarations
>       ,cont))
> 
> (defun lvwrap (value cont)
>    `(st :v ,value
>         :c ,(lv cont)))
> 
> und nicht so:
> (defun lv (value cont &optional declarations)
>    `(lambda (self)
>       (declare (ignorable self))
>       ,@declarations
>       (let ((,*v* ,value))
>         (declare (ignorable ,*v*))
>         ,cont)))
> 
> Also gar keine st Struktur, sondern nur die Lambas.

Hi Alex,

der Grund ist, dass man im Gegensatz zu cl-cont zwei Dinge zurückgeben
will: Der nächste Continuation und den aktuellen Wert, mit dem man diese
aufrufen will. In Deinem Vorschlag ist der Wert schon in die
zurückgegebene Continuation eingeflossen. Das ist im Prinzip gut so.
Jedoch wollte ich das Design in Hinblick auf die das Ziel der Mobilität
offener halten: Durch die Trennung kann man die Continuations getrennt
von den Werten auf einem anderen Rechner kompilieren und dann dort mit
dem aktuellen Wert aufrufen. Leider ist das alles noch Zukunftsmusik und
es ist gut möglich, dass die st Struktur dabei auch gar nicht weiter
nutzt. Dann ist das auch das erste was wieder rausfliegt :-)

Der Traum wäre "Strong-Migration":

(escape
   ...
   (receive ('move (migrate "somehost")
                   (print "Hello, I'm the new guy!"))
        ...))

Viele Grüße!

Stefan




Follow ups

References