[Stackless] Google's new Go programming language

Jeff Senn senn at maya.com
Mon Nov 23 20:35:25 CET 2009


On Nov 23, 2009, at 1:46 PM, Andrew Francis wrote:

> Still this doesn't avoid a second form of race - a select returns
> with a list. Instead of immediately manipulating a selectable channel,
> the tasklet 1) calls schedule() 2) Does some action that causes the
> tasklet to block and allows another tasklet to perform a channel 
> operation on the selectable channel, hence changing the situation.

Yes, this is what I meant.

> i.e
> 
> channel = select([])
> stackless.schedule()       # dumb thing to do
> 
> #meanwhile the channel's state changed
> request = channel.receive()
> 
> Using select() this way, I would say tough luck to the programmer that
> uses it in this fashion. And if this is a part of a language feature,
> it may never happen.

Err... am I the only one who is interested in preemptive scheduling?
:-)

Also note that even if you are *not* doing preemptive scheduling, that
a feature that requires that kind of programmer attention 
is a classic trap for breaking code in horrible ways with what seems
like an innocuous (or non-local) change.

Imagine:

  foo = select(...)
  get_ready()
  go(foo.receive())

And then later someone inserts something into the implementation of "get_ready"
that can cause a schedule (or say, sends a messages down another channel,
or....)

A less error prone construct would be:

  chan, message = select_and_receive([chans,...])










More information about the Stackless mailing list