關(guān)于函數(shù)式語(yǔ)言的只言片語(yǔ)
Posted on 2007-12-05 22:09 canonical 閱讀(4332) 評(píng)論(9) 編輯 收藏 所屬分類: 設(shè)計(jì)理論1. 函數(shù)式語(yǔ)言可以合理的看作是泛函分析思想的一種體現(xiàn),從歷史發(fā)展的時(shí)間上看大概也是具有這種可能性的。在Backus的論文中對(duì)函數(shù)式語(yǔ)言的一種樂(lè)觀的情緒甚至擴(kuò)大到functional algebra can be used to tranform programs and to solve equations whose "unknowns" are programms in much the same way one transform equations in high school algebra。這種信心只能來(lái)源于泛函分析和方程論,來(lái)自于數(shù)學(xué)分析學(xué)的發(fā)展。將函數(shù)的函數(shù)作為分析對(duì)象就構(gòu)成泛函分析。泛函分析的最核心的思想當(dāng)然不等價(jià)于它所研究的那些無(wú)窮維空間,不等價(jià)于種種正交基的構(gòu)造。它的思想核心在于函數(shù)的函數(shù)具有獨(dú)立的分析價(jià)值,具有脫離數(shù)量空間的具體的結(jié)構(gòu)。這也是函數(shù)式語(yǔ)言試圖推銷(xiāo)的一種理念。
2. 最近這些年來(lái)一種稱為"范疇"(Category)的東西在計(jì)算機(jī)理論研究中頻頻出現(xiàn)。范疇論是從同調(diào)代數(shù)發(fā)展而來(lái)的一種較新的代數(shù)語(yǔ)言,但它顯然也不是可以解決任何問(wèn)題的靈丹妙藥。多一種表達(dá)方式當(dāng)然在某種程度上可以增進(jìn)我們的理解。但是范疇本身只是研究一種基礎(chǔ)結(jié)構(gòu),它本身并沒(méi)有承載所有的物理事實(shí),基于它不可能對(duì)所有的規(guī)律一網(wǎng)打盡。不是明白了范疇,就懂了程序。范疇論是一種基礎(chǔ)性的語(yǔ)言,有些人致力于基于范疇論來(lái)構(gòu)建數(shù)學(xué)的其他分支,取代集合論的地位。將計(jì)算的本質(zhì)重新歸結(jié)于范疇論是無(wú)意義的,它不過(guò)是對(duì)事實(shí)的另一種陳述方式。說(shuō)“函數(shù)式語(yǔ)言是基于范疇”是無(wú)意義的,因?yàn)檫@和說(shuō)“所有現(xiàn)代數(shù)學(xué)都基于集合論”一樣。無(wú)法發(fā)現(xiàn)新的相互作用關(guān)系,所有的概念都只是同義反復(fù)。不是一拿起數(shù)學(xué),就找到了組織。
3. 我對(duì)函數(shù)式語(yǔ)言并沒(méi)有什么反對(duì)意見(jiàn)。它是非常重要也非常優(yōu)美的一種技術(shù)思想。但是現(xiàn)在一些函數(shù)式語(yǔ)言的狂熱支持者似乎對(duì)函數(shù)世界充滿了烏托邦式的幻想,一種大一統(tǒng)的世界觀讓人迷醉,但是它卻解決不了現(xiàn)實(shí)的問(wèn)題。所以我說(shuō)無(wú)法認(rèn)同函數(shù)式編程的世界觀。作為一種具體的技術(shù)工具,問(wèn)題不在于函數(shù)式語(yǔ)言是否體現(xiàn)了計(jì)算的本質(zhì),而在于它是否向我們提供了稱手的兵器。現(xiàn)在我要計(jì)算兩個(gè)小球相互碰撞的問(wèn)題,我可以操起廣義相對(duì)論,量子力學(xué)啥的開(kāi)始大干一場(chǎng),也可以用個(gè)牛頓力學(xué)小試牛刀,甚至可以只用反射關(guān)系擺個(gè)等式。但是在絕大多數(shù)情況下我們都會(huì)說(shuō)這里面的物理是彈性反射而不是相對(duì)論。在理論分析中我們經(jīng)常使用平面波假設(shè),但只要實(shí)際關(guān)心的對(duì)象不在波包的邊緣,沒(méi)有人會(huì)認(rèn)為平面波不是真實(shí)的物理機(jī)制。理論物理不是理想物理。在具體的參數(shù)設(shè)定下,我們只會(huì)使用特定的物理學(xué)。
對(duì)世界的認(rèn)識(shí)并不是非此即彼的。并不是說(shuō)函數(shù)式語(yǔ)言好它就永遠(yuǎn)都好,要把所有對(duì)立面都滅掉。也不是說(shuō)函數(shù)式不好,命令式就必然的好,就必然的能夠解決問(wèn)題。函數(shù)式語(yǔ)言的世界觀過(guò)分單純而排他,這是我反對(duì)的,我同樣無(wú)法認(rèn)同面向?qū)ο蟮谋倔w論論調(diào)。就像CISC和RISC架構(gòu)之爭(zhēng)一樣,最終我們?cè)诂F(xiàn)實(shí)的物理約束下,運(yùn)行的最好的芯片是兩者思想的結(jié)合。這是我們面對(duì)物理世界的基本態(tài)度。
4. 函數(shù)式語(yǔ)言中時(shí)間是個(gè)有趣的概念。命令式語(yǔ)言中因?yàn)橘x值語(yǔ)句的存在,使得我們可以觀測(cè)到狀態(tài)的變化,因此必然要定義時(shí)間。而函數(shù)式語(yǔ)言是無(wú)狀態(tài)的,可以是無(wú)時(shí)間概念(對(duì)Lazy Caculation的依賴是否體現(xiàn)了深層次上對(duì)時(shí)間概念的需求?)。有些人認(rèn)為函數(shù)可以看作是相空間中的遷移函數(shù),是與相對(duì)論協(xié)調(diào)的,因而反映了時(shí)間的本質(zhì)等等。相對(duì)論主要是解決了物理規(guī)律的協(xié)變性的問(wèn)題,在此過(guò)程中它使人們認(rèn)識(shí)到了時(shí)空之間奇異的對(duì)稱性。但是廣義相對(duì)論的表述中時(shí)間也是可逆的。真正定義了時(shí)間之箭的是熱力學(xué)第二定律。根據(jù)Landauer's principle: 擦除(erase)1比特信息,耗散到環(huán)境中的能量至少是k*T*ln2, 或者說(shuō)熵增至少是k*ln2. 這意味著只要我們對(duì)眼前的黑板不停的寫(xiě)了擦,擦了寫(xiě),就必然無(wú)法回到過(guò)去。物理世界是復(fù)雜的。
5. 如果將狀態(tài)看作是可以附著在某個(gè)對(duì)象上的標(biāo)記,顯然狀態(tài)的存在性便于我們識(shí)認(rèn)概念的唯一性。對(duì)象還是那個(gè)對(duì)象,只是狀態(tài)標(biāo)記發(fā)生了變化。而如果系統(tǒng)中沒(méi)有狀態(tài),則必然產(chǎn)生了一個(gè)新的概念。這在很多情況下是不必要的負(fù)擔(dān)。狀態(tài)的存在使得系統(tǒng)在局部結(jié)構(gòu)上允許出現(xiàn)非常復(fù)雜的變化,函數(shù)式編程的擁躉們對(duì)此多有詬病。但是從另一個(gè)方面上說(shuō),狀態(tài)使得我們可以基于局部信息處理很多問(wèn)題而不需要把它擴(kuò)大化為一個(gè)全局匹配問(wèn)題。
6. 函數(shù)構(gòu)成函數(shù)似乎是很完備統(tǒng)一的世界。 但是在物理世界中發(fā)生的一切卻復(fù)雜的多。雖然世界可以還原為原子,但是原子構(gòu)成分子,分子構(gòu)成宏觀物質(zhì)時(shí),系統(tǒng)的基本性狀發(fā)生了本質(zhì)性的變化,并不再是統(tǒng)一的形式。每一個(gè)層面上都會(huì)產(chǎn)生獨(dú)立的結(jié)構(gòu)規(guī)律。
7. 函數(shù)式語(yǔ)言和命令式語(yǔ)言的計(jì)算能力相同(可以相差一個(gè)任意長(zhǎng)度的多項(xiàng)式時(shí)間),但是在具體的情形下它們的描述能力是不同的。我所關(guān)心的不是語(yǔ)言層面的問(wèn)題,因?yàn)檎Z(yǔ)言本身的能力并不足以解決現(xiàn)實(shí)開(kāi)發(fā)中的所有問(wèn)題。即現(xiàn)實(shí)開(kāi)發(fā)中所需要處理的結(jié)構(gòu)問(wèn)題并不是在語(yǔ)言層面得到充分解決的,這是我們需要做工作的地方。
關(guān)于現(xiàn)實(shí)中的結(jié)構(gòu)問(wèn)題,我無(wú)意去定義什么萬(wàn)能的描述能力。你可以用微分幾何,積分幾何,廣義變分等等手段去證明圓盤(pán)是某種意義下的周長(zhǎng)最短的東西,但是這一切對(duì)你發(fā)明輪子并無(wú)本質(zhì)上的助益。不過(guò)可以說(shuō)說(shuō)現(xiàn)實(shí)中的結(jié)構(gòu)。這里不是要證明某種語(yǔ)言中無(wú)法描述這些結(jié)構(gòu),而是說(shuō)結(jié)構(gòu)是客觀存在的,它并不是要在基礎(chǔ)語(yǔ)言層面得到充分解決的。實(shí)際上現(xiàn)在的通用語(yǔ)言也是無(wú)法有效承載Domain Specific Structure的。
A. ErLang大概是目前世界上應(yīng)用最為深入的函數(shù)式語(yǔ)言了。它確實(shí)發(fā)揮了函數(shù)式語(yǔ)言無(wú)顯式狀態(tài)變量的優(yōu)勢(shì)。但是它對(duì)程序構(gòu)建本質(zhì)上的幫助更多的來(lái)源于無(wú)共享的超輕量級(jí)進(jìn)程模型,相當(dāng)于定制了一般操作系統(tǒng)所提供的基本服務(wù)。微軟的一個(gè)實(shí)驗(yàn)性操作系統(tǒng)項(xiàng)目Singularity, 其中也定義了只通過(guò)消息傳遞發(fā)生數(shù)據(jù)關(guān)聯(lián)的超輕量級(jí)進(jìn)程模型,它使用C#的一個(gè)擴(kuò)展語(yǔ)言,額外增加的功能是消息管道上定義的規(guī)格狀態(tài)機(jī),對(duì)消息交互的時(shí)空模式進(jìn)行額外的規(guī)約。這里對(duì)我們真正有價(jià)值的是隔離的單元結(jié)構(gòu)。
B. AOP是程序結(jié)構(gòu)空間中的定位和組裝技術(shù)。在Witrix中我們規(guī)范化了切點(diǎn)處的狀態(tài)空間,并對(duì)AOP進(jìn)行了偏置處理.這種結(jié)構(gòu)調(diào)整大大提高了AOP的可用性,使得它成為Witrix中的核心技術(shù)手段之一。
C. 面向?qū)ο蟮睦^承關(guān)系從結(jié)構(gòu)觀點(diǎn)上看是兩個(gè)一維集合之間的覆蓋關(guān)系。在Witrix中擴(kuò)展了extends所對(duì)應(yīng)的結(jié)構(gòu)操作,創(chuàng)造了新的結(jié)構(gòu)融合手段。
2. 最近這些年來(lái)一種稱為"范疇"(Category)的東西在計(jì)算機(jī)理論研究中頻頻出現(xiàn)。范疇論是從同調(diào)代數(shù)發(fā)展而來(lái)的一種較新的代數(shù)語(yǔ)言,但它顯然也不是可以解決任何問(wèn)題的靈丹妙藥。多一種表達(dá)方式當(dāng)然在某種程度上可以增進(jìn)我們的理解。但是范疇本身只是研究一種基礎(chǔ)結(jié)構(gòu),它本身并沒(méi)有承載所有的物理事實(shí),基于它不可能對(duì)所有的規(guī)律一網(wǎng)打盡。不是明白了范疇,就懂了程序。范疇論是一種基礎(chǔ)性的語(yǔ)言,有些人致力于基于范疇論來(lái)構(gòu)建數(shù)學(xué)的其他分支,取代集合論的地位。將計(jì)算的本質(zhì)重新歸結(jié)于范疇論是無(wú)意義的,它不過(guò)是對(duì)事實(shí)的另一種陳述方式。說(shuō)“函數(shù)式語(yǔ)言是基于范疇”是無(wú)意義的,因?yàn)檫@和說(shuō)“所有現(xiàn)代數(shù)學(xué)都基于集合論”一樣。無(wú)法發(fā)現(xiàn)新的相互作用關(guān)系,所有的概念都只是同義反復(fù)。不是一拿起數(shù)學(xué),就找到了組織。
3. 我對(duì)函數(shù)式語(yǔ)言并沒(méi)有什么反對(duì)意見(jiàn)。它是非常重要也非常優(yōu)美的一種技術(shù)思想。但是現(xiàn)在一些函數(shù)式語(yǔ)言的狂熱支持者似乎對(duì)函數(shù)世界充滿了烏托邦式的幻想,一種大一統(tǒng)的世界觀讓人迷醉,但是它卻解決不了現(xiàn)實(shí)的問(wèn)題。所以我說(shuō)無(wú)法認(rèn)同函數(shù)式編程的世界觀。作為一種具體的技術(shù)工具,問(wèn)題不在于函數(shù)式語(yǔ)言是否體現(xiàn)了計(jì)算的本質(zhì),而在于它是否向我們提供了稱手的兵器。現(xiàn)在我要計(jì)算兩個(gè)小球相互碰撞的問(wèn)題,我可以操起廣義相對(duì)論,量子力學(xué)啥的開(kāi)始大干一場(chǎng),也可以用個(gè)牛頓力學(xué)小試牛刀,甚至可以只用反射關(guān)系擺個(gè)等式。但是在絕大多數(shù)情況下我們都會(huì)說(shuō)這里面的物理是彈性反射而不是相對(duì)論。在理論分析中我們經(jīng)常使用平面波假設(shè),但只要實(shí)際關(guān)心的對(duì)象不在波包的邊緣,沒(méi)有人會(huì)認(rèn)為平面波不是真實(shí)的物理機(jī)制。理論物理不是理想物理。在具體的參數(shù)設(shè)定下,我們只會(huì)使用特定的物理學(xué)。
對(duì)世界的認(rèn)識(shí)并不是非此即彼的。并不是說(shuō)函數(shù)式語(yǔ)言好它就永遠(yuǎn)都好,要把所有對(duì)立面都滅掉。也不是說(shuō)函數(shù)式不好,命令式就必然的好,就必然的能夠解決問(wèn)題。函數(shù)式語(yǔ)言的世界觀過(guò)分單純而排他,這是我反對(duì)的,我同樣無(wú)法認(rèn)同面向?qū)ο蟮谋倔w論論調(diào)。就像CISC和RISC架構(gòu)之爭(zhēng)一樣,最終我們?cè)诂F(xiàn)實(shí)的物理約束下,運(yùn)行的最好的芯片是兩者思想的結(jié)合。這是我們面對(duì)物理世界的基本態(tài)度。
4. 函數(shù)式語(yǔ)言中時(shí)間是個(gè)有趣的概念。命令式語(yǔ)言中因?yàn)橘x值語(yǔ)句的存在,使得我們可以觀測(cè)到狀態(tài)的變化,因此必然要定義時(shí)間。而函數(shù)式語(yǔ)言是無(wú)狀態(tài)的,可以是無(wú)時(shí)間概念(對(duì)Lazy Caculation的依賴是否體現(xiàn)了深層次上對(duì)時(shí)間概念的需求?)。有些人認(rèn)為函數(shù)可以看作是相空間中的遷移函數(shù),是與相對(duì)論協(xié)調(diào)的,因而反映了時(shí)間的本質(zhì)等等。相對(duì)論主要是解決了物理規(guī)律的協(xié)變性的問(wèn)題,在此過(guò)程中它使人們認(rèn)識(shí)到了時(shí)空之間奇異的對(duì)稱性。但是廣義相對(duì)論的表述中時(shí)間也是可逆的。真正定義了時(shí)間之箭的是熱力學(xué)第二定律。根據(jù)Landauer's principle: 擦除(erase)1比特信息,耗散到環(huán)境中的能量至少是k*T*ln2, 或者說(shuō)熵增至少是k*ln2. 這意味著只要我們對(duì)眼前的黑板不停的寫(xiě)了擦,擦了寫(xiě),就必然無(wú)法回到過(guò)去。物理世界是復(fù)雜的。
5. 如果將狀態(tài)看作是可以附著在某個(gè)對(duì)象上的標(biāo)記,顯然狀態(tài)的存在性便于我們識(shí)認(rèn)概念的唯一性。對(duì)象還是那個(gè)對(duì)象,只是狀態(tài)標(biāo)記發(fā)生了變化。而如果系統(tǒng)中沒(méi)有狀態(tài),則必然產(chǎn)生了一個(gè)新的概念。這在很多情況下是不必要的負(fù)擔(dān)。狀態(tài)的存在使得系統(tǒng)在局部結(jié)構(gòu)上允許出現(xiàn)非常復(fù)雜的變化,函數(shù)式編程的擁躉們對(duì)此多有詬病。但是從另一個(gè)方面上說(shuō),狀態(tài)使得我們可以基于局部信息處理很多問(wèn)題而不需要把它擴(kuò)大化為一個(gè)全局匹配問(wèn)題。
6. 函數(shù)構(gòu)成函數(shù)似乎是很完備統(tǒng)一的世界。 但是在物理世界中發(fā)生的一切卻復(fù)雜的多。雖然世界可以還原為原子,但是原子構(gòu)成分子,分子構(gòu)成宏觀物質(zhì)時(shí),系統(tǒng)的基本性狀發(fā)生了本質(zhì)性的變化,并不再是統(tǒng)一的形式。每一個(gè)層面上都會(huì)產(chǎn)生獨(dú)立的結(jié)構(gòu)規(guī)律。
7. 函數(shù)式語(yǔ)言和命令式語(yǔ)言的計(jì)算能力相同(可以相差一個(gè)任意長(zhǎng)度的多項(xiàng)式時(shí)間),但是在具體的情形下它們的描述能力是不同的。我所關(guān)心的不是語(yǔ)言層面的問(wèn)題,因?yàn)檎Z(yǔ)言本身的能力并不足以解決現(xiàn)實(shí)開(kāi)發(fā)中的所有問(wèn)題。即現(xiàn)實(shí)開(kāi)發(fā)中所需要處理的結(jié)構(gòu)問(wèn)題并不是在語(yǔ)言層面得到充分解決的,這是我們需要做工作的地方。
關(guān)于現(xiàn)實(shí)中的結(jié)構(gòu)問(wèn)題,我無(wú)意去定義什么萬(wàn)能的描述能力。你可以用微分幾何,積分幾何,廣義變分等等手段去證明圓盤(pán)是某種意義下的周長(zhǎng)最短的東西,但是這一切對(duì)你發(fā)明輪子并無(wú)本質(zhì)上的助益。不過(guò)可以說(shuō)說(shuō)現(xiàn)實(shí)中的結(jié)構(gòu)。這里不是要證明某種語(yǔ)言中無(wú)法描述這些結(jié)構(gòu),而是說(shuō)結(jié)構(gòu)是客觀存在的,它并不是要在基礎(chǔ)語(yǔ)言層面得到充分解決的。實(shí)際上現(xiàn)在的通用語(yǔ)言也是無(wú)法有效承載Domain Specific Structure的。
A. ErLang大概是目前世界上應(yīng)用最為深入的函數(shù)式語(yǔ)言了。它確實(shí)發(fā)揮了函數(shù)式語(yǔ)言無(wú)顯式狀態(tài)變量的優(yōu)勢(shì)。但是它對(duì)程序構(gòu)建本質(zhì)上的幫助更多的來(lái)源于無(wú)共享的超輕量級(jí)進(jìn)程模型,相當(dāng)于定制了一般操作系統(tǒng)所提供的基本服務(wù)。微軟的一個(gè)實(shí)驗(yàn)性操作系統(tǒng)項(xiàng)目Singularity, 其中也定義了只通過(guò)消息傳遞發(fā)生數(shù)據(jù)關(guān)聯(lián)的超輕量級(jí)進(jìn)程模型,它使用C#的一個(gè)擴(kuò)展語(yǔ)言,額外增加的功能是消息管道上定義的規(guī)格狀態(tài)機(jī),對(duì)消息交互的時(shí)空模式進(jìn)行額外的規(guī)約。這里對(duì)我們真正有價(jià)值的是隔離的單元結(jié)構(gòu)。
B. AOP是程序結(jié)構(gòu)空間中的定位和組裝技術(shù)。在Witrix中我們規(guī)范化了切點(diǎn)處的狀態(tài)空間,并對(duì)AOP進(jìn)行了偏置處理.這種結(jié)構(gòu)調(diào)整大大提高了AOP的可用性,使得它成為Witrix中的核心技術(shù)手段之一。
C. 面向?qū)ο蟮睦^承關(guān)系從結(jié)構(gòu)觀點(diǎn)上看是兩個(gè)一維集合之間的覆蓋關(guān)系。在Witrix中擴(kuò)展了extends所對(duì)應(yīng)的結(jié)構(gòu)操作,創(chuàng)造了新的結(jié)構(gòu)融合手段。