← Back to team overview

cl-escape-team team mailing list archive

Re: Wozu "st" Structur?

 

Je 2013-03-27 22:38, Stefan Mandl skribis:
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 :-)

Ich glaub dazu hilft die Trennung wenig, da es auch andere Werte drinn
sein können, die aus der Umgebung kommen. Ausserdem ist es performance
technisch wahrscheinlich nicht so gut, immer diese Struktur anzulegen.

Der Traum wäre "Strong-Migration":

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

Ja klar :-)

Viele Grüße,
Alex.



References