cps变换
網上看了很多內容,很少有給出一個準確的概念,它的英文全稱是continuous passing style, 直譯為連續傳遞樣式,那么cps transform就是將一些原本不是continuous passing style代碼變成cps代碼,這是一種編譯器的優化方式,當然你也可以手動來實現這種變換。cps變換常和遞歸調用關聯在一起,因為有一種遞歸樣式叫做尾遞歸,就是說,遞歸調用發生在函數的尾部,類似于function f(x){int y;return f(y);}這種樣式,這么做有一個好處就是,可以進行尾調用優化,即編譯器在處理這種尾遞歸函數的時候,在遞歸調用之前無須保存當前調用的現場,或者說無須參數壓棧,這樣就節省了內存,因為一些遞歸函數(非尾遞歸)常常會造成堆棧溢出,這時候cps變換就派上用場了,他可以將非尾遞歸的函數轉化成尾遞歸的函數。
另外還有一些相互關聯的概念,比如coroutine的實現,首先coroutine不是線程,它是在一個線程之內模擬了多任務,或者可以說它是在一個線程內模擬了操作系統的任務調度,javascript就是使用了這樣一種機制
yield async wait這些概念都和coroutine有關,不同的語言有不同的實現
轉載于:https://www.cnblogs.com/sky-view/p/5151966.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 关于EF查询表里的部分字段
- 下一篇: 最简单的Web Service实现