一點領悟吧,關於消息傳遞與lambda算子
昨天在讀到《Programming Erlang》第8章,開篇點出Erlang是一門純粹的消息傳遞風格語言(message passing),我才算是領悟了消息傳遞。為了這個問題,我還冒昧地去問javaeye上的T1,對這個問題的興趣是因為SICP第二章以及《失蹤的鏈環》上的介紹。T1給我解答如下:智能能對象隻是消息傳遞的一種具體應用.消息傳遞說的更為清晰一些就是一種映射關係或者說映射規則.f:a->b;這個規則可以是任意的。我一直將procedural representations of data,也就是sicp中聲稱intelligent data objects (智能對象)等價於消息傳遞, 而其實智能對象僅僅是消息傳遞的一種具體應用罷了。
消息傳遞機製通俗地來講就是類似於馬路上到處投遞小廣告的投遞者,它采取的是Send and Pray策略,既不關心消息是否能精確的傳送到真正需要消息的接收者,而是以廣播的方式把消息發送給所有人,然後通過回饋來確定消息接收者的類型(引自《失蹤的鏈環》)。因此,動態語言的duct typing是消息傳遞風格,智能對象是消息傳遞風格,顯然,Erlang的process間的通信機製同樣是消息傳遞風格(Process之間完全通過send message來進行控製和指示,不確定接收方是否具有處理消息的能力 ,異步的,接收的確認也要等待reply)。
再來說說lambda算子理論,推薦下g9老大的lambda算子係列文章,這是開篇《lambda算子簡介1.a》,以及另外一篇《康托爾、哥德爾、圖靈——永恒的金色對角線(rev#2)》。lambda算子理論是函數式編程的理論基礎,通過9條公理就可以推到出一個圖靈完備的形式係統,其中的Y combinator的推導簡直是魔法(為了表示遞歸),再次領略了計算理論的魅力。另外,最近讀sicp第三章《模塊化、對象和狀態》,也理解了最初的麵向對象思想來自何處,在引入了內部狀態模擬時間變化之後,對象的最初思想也產生了,同時也帶來了賦值導致的Side-Effect,而其實這正是動態OO語言中的對象的理念,通過消息來決定對象的type(ducktyping)。可現代的靜態OO語言,在type和clas
之間畫上了等號,java裏麵說一切都是object,其實他想表達的卻是一切都是class,通過type以及函數簽名等來決定消息的分派(message dispatch),導致更多的代碼集中在消息分派,而不是真正的計算任務上,可以說靜態OO已經偏離原始的對象模型很遠。
一點胡思亂想吧,我沒有科班經曆,所有的東西都是自己在學,在摸索,如有理論和常識上的謬誤,請不吝賜教。
文章轉自莊周夢蝶 ,原文發布時間2007-08-03
最後更新:2017-05-17 16:01:36