On Thursday, September 13, 2018 at 4:00:28 PM UTC-6, Jonathan Amsterdam 
wrote:
>
> What's the meaning of this code?
>
>    func main() {
>        f := g()
>        f()
>     }
>
>    func g() func() {
>    Top:
>        return func() { returnfrom Top,   nil}
>    }
>

It means you're an evil programmer.  😜

My thinking is that returning from a no-longer-accessible continuation 
should simply be a no-op.  Stepping through your example, f := g() assigns 
func() 
{ returnfrom Top, nil } to f.  At this point the call stack associated with 
g() is no longer live.  f() executes, turning into returnfrom Top, nil.  
The returnfrom causes the inner function to return immediately and 
instructs g() to return nil.  But because the continuation corresponding to 
the call to g that returned the inner function no longer exists, there's no 
place to send that nil, and nothing happens.

I believe this is a simpler and more Go-like semantics than, say, Scheme's 
call/cc, which *does* execute the f := g() statement twice:

(define (main)
  (let ((f (g)))
    ;(printf "Calling f = ~s~n" f)
    (f)))

(define (g)
  (call/cc
   (lambda (Top)
     (lambda ()
       (Top '())))))


(Uncomment the printf to see the double execution.  Weird, huh?)

Thanks for the challenge,
— Scott

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to