I understand the callback is called from somewhere in the bowels of the MrEd code, after a GUI event has been extracted from the UI message queue. I also can imagine that escaping from the callback will prevent some resource cleanup, but I interpreted your original email as hinting at something fundamentally wrong with escaping from *any* callback. Maybe I misunderstood?
<br><br>-pp<br><br><br><div><span class="gmail_quote">On 10/6/06, <b class="gmail_sendername">Matthias Felleisen</b> &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Every function is called from some place, right? So think of your<br>callback function. It must be called from some place. That is also<br>the place where it returns to. QUESTION: Where is that?<br><br>-- Matthias<br><br>
<br><br>On Oct 6, 2006, at 8:06 PM, pedro pinto wrote:<br><br>&gt; I am sorry, this continuation stuff makes my head spin. I<br>&gt; understand the barrier idea but I don't understand the motivation.<br>&gt; A callback is just another function, why is it barred from escaping?
<br>&gt; -pp<br>&gt;<br>&gt;<br>&gt; On 10/6/06, Matthias Felleisen &lt;<a href="mailto:matthias@ccs.neu.edu">matthias@ccs.neu.edu</a>&gt; wrote: There<br>&gt; is a built-in barrier -- a delimiter of control -- around<br>
&gt; callbacks. If you think about it, it's quite obvious. A callback<br>&gt; doesn't return. But at the same time, all functions do return<br>&gt; somewhere. Well the place that is invisible and unavailable to you is<br>
&gt; somewhere in the system. And right around this call site there is a<br>&gt; barrier for all escapes. -- Matthias<br>&gt;<br>&gt;<br>&gt;<br>&gt; On Oct 6, 2006, at 7:19 PM, pedro pinto wrote:<br>&gt;<br>&gt; &gt; Hi there,
<br>&gt; &gt;<br>&gt; &gt; Shouldn't this:<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp; (require (lib &quot;class.ss&quot;)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lib &quot;mred.ss&quot; &quot;mred&quot;))<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp; (define (go)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; (let/ec return
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((f (new dialog% (label &quot;Hello&quot;))))<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new button% (parent f)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(label &quot;Me, Me!&quot;)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(callback (lambda _<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(send f show #f)
<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(return &quot;Escaping&quot;))))<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (send f show #t)<br>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Did not Escape&quot;)))<br>&gt; &gt;<br>&gt; &gt;&nbsp;&nbsp; (go)<br>&gt; &gt;<br>&gt; &gt;<br>
&gt; &gt;<br>&gt; &gt; Evaluate to &quot;Escaping&quot; when the user clicks the &quot;Me,Me!&quot; button?<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; _________________________________________________
<br>&gt; &gt;&nbsp;&nbsp; For list-related administrative tasks:<br>&gt; &gt;&nbsp;&nbsp; <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>&gt;<br>&gt;<br>&gt; _________________________________________________
<br>&gt;&nbsp;&nbsp; For list-related administrative tasks:<br>&gt;&nbsp;&nbsp; <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br><br></blockquote></div><br>