Posted on 2007-12-02 22:14
canonical 閱讀(1179)
評論(2) 編輯 收藏 所屬分類:
設計理論
地址(Address)是現代計算機體系架構中的核心概念,它在程序設計語言上的體現就是C語言中的指針(Pointer)。在C語言中,所有的高級技巧都和指針這個概念相關。指針只是一個存放了一個地址的變量,但是C語言中提供了一個方便的間接訪問方式,p->x, 它使得擁有指針在概念上就等價于擁有了指針所指的全部內容。在這種誘導下,我們漸漸模糊了地址和地址所存儲的內容之間的區別。這也是指針的指針這樣的概念總是讓初學者迷惑不解的重要原因。
指針是對地址的符號化。它所帶來的第一大好處是使得我們擺脫了對絕對地址空間的依賴。如同Newton第一定律所闡述的:物理規律與所發生的慣性坐標系無關。同樣,數字空間中發生的的事件與所處的絕對地址也是無關的。在符號化的方向上更進一步,如果我們專注于指針的關聯語義,而放棄指針的指針這樣的混雜概念,就會得到具有獨立價值的引用(Reference)概念.
從表面上看起來,數字空間只是一個無限延展的一維地址空間,每一地址處只能存放一個有限大小的離散數值,似乎它的幾何學是貧瘠的。但是因為在軟件設計中,一般是不考慮尋址時間的。這意味著在擁有指針的情況下,我們可以“立刻”訪問到數字空間的任意遙遠的地方。這種超時空的信息傳遞過程使得我們可以利用“引用”概念輕松的構建一個多維的表示空間。在面向對象的技術背景下,x.y.z這樣的形式表示暗示著x,y,z是同時存在的。當z發生變化的時候,通過y.z和x.y的信息傳導,x對象本身也發生了某種變化。
隨著web技術的流行,獨立的狀態/地址空間的存在性逐漸成為系統不可回避的假設, "同時性"的物理約束越來越難以維持. 相對論規定了物理現象的定域性, 在數字空間我們一直忽視了它.但有趣的是, 網絡上的傳輸時延卻迫使我們重新發現了"引用"形式下必然存在著的物理過程. 引用本身只是標記了某種信息關聯, 并不一定意味著同時性約束. 并發編程領域的所謂的Future對象是對傳統引用概念的一種有趣擴展.
result = obj.callMethod(args) ==> future = obj.callMethod(args)
future對象可以被自由傳遞, 只有當實際訪問到它的屬性的時候, 才會觸發時序約束.