從指針到引用

    地址(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對象可以被自由傳遞, 只有當實際訪問到它的屬性的時候, 纔會觸發時序約束. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章