今天邮件列表里讨论 python2.5 中增强的 yield 特性,讨论得热火朝天。
顿觉心血来潮,就用这增强型的 yield 大致模拟了下 StacklessPython 的基本功能 。
虽然不能一模一样,不过感觉也只能做到这一步了。
主要是因为相对 StacklessPython 来说 yield 有这么几个限制:
函数只能通过 yield 来挂起,这导致实现 channel 的时候只能通过 yield command(c.send, value),value = yield command(c.receive) 这样的语法来使当前 tasklet 挂起 (一定条件下) ,不像 StacklessPython 直接 some_channel.send(...) 就有可能挂起当前 tasklet 。
- yield 只能向上一层,而不能直接 yield 到调用栈的最上层(或者甚至是指定 yield 到哪一层!!),这导致我们的 tasklet 只能在函数调用的第一层进行 yield 才能将执行权切换给调度程序,像下面:
不像 StacklessPython ,随便哪里调用 stackless.schedule() 都可以把执行权交出去。
谁叫人家c写的呢。:(
本来想顺便把 evolution 也转过来的,发现 pygame 还没为 windows 编译 python2.5 的版本,自己编译太麻烦,还是等 python2.5 正式发布了再说吧。具体代码请看 http://wiki.woodpecker.org.cn/moin/huangyi/2006-09-05
0 评论:
发表评论