whitesock

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            10 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          1 Symmetric Coroutine

          Lua支持asymmetric coroutine。對于symmetric coroutine,名為Coroutines in Lua的一篇論文,提供了如下的解決方案:

          coro = {}
          coro.main = function() end
          coro.current = coro.main
          
          function coro.create(f) 
            return coroutine.wrap(function(val) return nil, f(val) end)
          end
          
          function coro.transfer(k, val)
            if coro.current ~= coro.main then
              return coroutine.yield(k, val)
            else
              while k do
                coro.current = k
                if k == coro.main then
                  return val
                end
                k, val = k(val)
              end
              error("coroutine ended without transfering control...")
            end
          end

          代碼雖然不長,但是十分精致。通過yield/resume,以及一個dipatching循環,巧妙地實現了symmetric coroutine。此外在Revisiting Coroutines論文中,甚至用asymmetric coroutine實現了one-shot continuation。

          2 Reference

          Coroutines in Lua Ana L´ucia de Moura , Noemi Rodriguez , Roberto Ierusalimschy
          Revisiting Coroutines Ana L´ucia de Moura and Roberto Ierusalimschy

          posted on 2011-10-17 22:57 whitesock 閱讀(125) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 丹江口市| 体育| 乌审旗| 施甸县| 报价| 浦县| 正镶白旗| 若羌县| 雷州市| 阿拉善左旗| 通榆县| 兴山县| 张掖市| 阜新| 呼伦贝尔市| 桦南县| 喀喇沁旗| 青州市| 滨州市| 嘉鱼县| 台安县| 巴青县| 八宿县| 郎溪县| 固原市| 正宁县| 内黄县| 绥棱县| 临潭县| 绥滨县| 沙坪坝区| 封开县| 玛曲县| 嘉荫县| 微山县| 三都| 武清区| 邓州市| 育儿| 大埔区| 石楼县|