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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 凤翔县| 莫力| 万安县| 镇江市| 高雄县| 凯里市| 建昌县| 梓潼县| 吉林省| 弋阳县| 星子县| 湘潭市| 蒙城县| 滦南县| 达拉特旗| 奉新县| 南安市| 滨海县| 西城区| 台江县| 安溪县| 疏勒县| 虹口区| 乐亭县| 宜章县| 长春市| 镇远县| 西青区| 沂源县| 乐亭县| 天台县| 宝坻区| 溧阳市| 丹棱县| 工布江达县| 阳山县| 隆昌县| 陆河县| 沙坪坝区| 昌吉市| 元朗区|