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