|
現(xiàn)在,CPS作為非阻塞式(通常是分布式的)系統(tǒng)的編程風(fēng)格而被再次發(fā)掘出來(lái)。
我對(duì)CPS很有好感,因?yàn)樗俏耀@取博士學(xué)位的一個(gè)秘密武器。它十有八九幫我消減掉了一兩年的時(shí)間和一些難以估量的痛苦。
本文介紹了CPS所扮演的兩種角色作為JavaScript中的一種非阻塞編程風(fēng)格,以及作為一種功能性語(yǔ)言的中間形式(簡(jiǎn)要介紹)。
內(nèi)容包括:
◆JavaScript中的CPS
◆CPS用于Ajax編程
◆用在非阻塞式編程(node.js)中的CPS
◆CPS用于分布式編程
◆如何使用CPS來(lái)實(shí)現(xiàn)異常
◆極簡(jiǎn)Lisp的一個(gè)CPS轉(zhuǎn)換器
◆如何用Lisp實(shí)現(xiàn)call/cc
◆如何用JavaScript實(shí)現(xiàn)call/cc
請(qǐng)往下閱讀以了解更多內(nèi)容。
什么是持續(xù)傳送風(fēng)格?
如果一種語(yǔ)言支持后續(xù)(continuation)的話(huà),編程者就可以添加諸如異常、回溯、線(xiàn)程以及構(gòu)造函數(shù)一類(lèi)的控制構(gòu)造。
可惜的是,許多關(guān)于后續(xù)的解釋(我的也包括在內(nèi))給人的感覺(jué)是含糊不清,令人難以滿(mǎn)意。
后續(xù)傳遞風(fēng)格是那么的基礎(chǔ)。
后續(xù)傳遞風(fēng)格賦予了后續(xù)在代碼方面的意義。
更妙的是,編程者可以自我發(fā)掘出后續(xù)傳遞風(fēng)格來(lái),如果其受限于下面這樣的一個(gè)約束的話(huà):
沒(méi)有過(guò)程被允許返回到它的調(diào)用者中永遠(yuǎn)如此。
存在的一個(gè)啟示使得以這種風(fēng)格編程成為可能:
過(guò)程可以在它們返回值時(shí)調(diào)用一個(gè)回調(diào)方法。
當(dāng)一個(gè)過(guò)程(procedure)準(zhǔn)備要返回到它的調(diào)用者中時(shí),它在返回值時(shí)調(diào)用當(dāng)前后續(xù)(current continuation)這一回調(diào)方法(由它的調(diào)用者提供)
一個(gè)后續(xù)是一個(gè)初始類(lèi)型(first-class)返回點(diǎn)。
例子:標(biāo)識(shí)函數(shù)
考慮這個(gè)正常寫(xiě)法的標(biāo)識(shí)函數(shù):
function id(x) {return x ;
}
it知識(shí)庫(kù):示例:JavaScript中的后續(xù)傳遞風(fēng)格,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。