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