posts - 176, comments - 240, trackbacks - 0, articles - 7
              我在前面的文章中列舉了大量物理學(xué)相關(guān)的例子來試圖說明采用物理視角的必要性,但是可能因?yàn)槲锢硎聦?shí)大家不熟悉,結(jié)果直接被無視了. 在本文中我想有必要舉一個(gè)軟件領(lǐng)域的例子。只是在實(shí)際思考的過程中,我主要還是基于物理概念進(jìn)行推理.
             
              首先我所謂“現(xiàn)在的通用語言”,它并不意指“現(xiàn)在至未來所有通用語言之合集”,而是指“目前正在被使用的某一種通用語言”,這種差別便體現(xiàn)了我所強(qiáng)調(diào)的不同的價(jià)值觀和不同的視角。不是一種覆蓋一切的全稱判斷,而是在特定物理約束下的物理實(shí)體。
             
              現(xiàn)在無論我們設(shè)計(jì)什么大型系統(tǒng),一般總是要優(yōu)先考慮微內(nèi)核設(shè)計(jì)。但是很顯然,如果我們的編程控制能力極強(qiáng)(強(qiáng)大到不現(xiàn)實(shí)的地步),我們可以把所有的代碼實(shí)現(xiàn)為一個(gè)大的整體。一個(gè)整體的好處是勿用質(zhì)疑的,否則Linux Torvalds就不會有信心和Tanenbaum PK。但即使是Linux, 隨著系統(tǒng)越來越龐大,在內(nèi)核中也補(bǔ)充了很多模塊管理策略。我并不把這種情況看作是一種現(xiàn)在技術(shù)能力不到位所造成的結(jié)果,而是把它看作是在現(xiàn)實(shí)的物理約束下所促成的一種必然的選擇。
             
              按照類似的邏輯,我認(rèn)為在通用語言層面不應(yīng)該導(dǎo)入越來越多的特征,實(shí)際上也不可能把所有可能的結(jié)構(gòu)方式都內(nèi)置在語言中(這種不可能不是數(shù)學(xué)意義上的不可能)。這會破壞一種語言的純潔性,使得它極難維護(hù)和發(fā)展。為了擴(kuò)大通用語言的有效應(yīng)用范圍,一種顯然的方式是在語言中定義一些支持結(jié)構(gòu)再次抽象的機(jī)制,通過可插拔的方式實(shí)現(xiàn)與domain相關(guān)的知識的融合。ruby這樣的語言提供了大量的元編程機(jī)制, Witrix平臺中tpl模板語言也發(fā)展了一系列編譯期結(jié)構(gòu)構(gòu)造技術(shù), 但是顯然它們都不能說是結(jié)構(gòu)抽象技術(shù)的終極形態(tài). 目前我對所有通用語言所提供的結(jié)構(gòu)抽象和結(jié)構(gòu)組裝能力都是不滿意的,因此在Witrix中發(fā)展了一些領(lǐng)域特定的結(jié)構(gòu)融合手段.例如根據(jù)"繼承"關(guān)系的結(jié)構(gòu)詮釋(繼承可以看作是兩個(gè)一維集合之間的覆蓋關(guān)系), 我們擴(kuò)展了extends的結(jié)構(gòu)操作方式, 定義了廣義的extends算子. 這些特定的結(jié)構(gòu)關(guān)系目前在領(lǐng)域特定的BizFlow語言中體現(xiàn), 它們在通用語言中是難以想象的, 而把它們放置在通用的語言中也是不合適的(這種復(fù)雜的結(jié)構(gòu)融合操作如果不能結(jié)合領(lǐng)域知識進(jìn)行直觀的理解, 必將導(dǎo)向一種思維的混亂). 這就是我所謂"現(xiàn)在的通用語言無法有效承載Domain Specific Structure"的含義. 這種說法其實(shí)類似于"集合論是無法包容所有數(shù)學(xué)結(jié)構(gòu)的". 我們在集合論中只研究最普遍的關(guān)系,而特定的結(jié)構(gòu)在特定的學(xué)科中研究.
             
              關(guān)于ErLang的例子, 我的原意是用來說明結(jié)構(gòu)問題是獨(dú)立的,它是和具體語言無關(guān)的.即基于消息傳遞發(fā)生數(shù)據(jù)關(guān)聯(lián)的超輕量級進(jìn)程模型這一結(jié)構(gòu)不是和ErLang語言綁定的. 為此我特意加了一段說明:"這里不是要證明某種語言中無法描述這些結(jié)構(gòu),而是說結(jié)構(gòu)是客觀存在的,它并不是要在基礎(chǔ)語言層面得到充分解決的". 即使在語言層面我們并不解決這個(gè)結(jié)構(gòu)問題, 它仍然客觀存在著,我們?nèi)匀豢梢杂闷渌募夹g(shù)手段去定義,去解決. 解決了這個(gè)結(jié)構(gòu)問題就必然會帶給我們價(jià)值,而無論我們使用何種實(shí)現(xiàn)語言.

              "什么原因,什么樣的約束條件,導(dǎo)致了現(xiàn)在的通用語言是無法有效承載消息傳遞發(fā)生數(shù)據(jù)關(guān)聯(lián)的超輕量級進(jìn)程模型". 這一命題并不是我原文中論點(diǎn)的合理推論.我并不是要說某一種特定的領(lǐng)域結(jié)構(gòu)無法在一種特定的通用語言中得到支持.而是說如果我們認(rèn)為一種通用語言是比較穩(wěn)定的,則它一般選擇只內(nèi)置一些通用的不帶有領(lǐng)域特定含義的概念. 而缺乏領(lǐng)域知識,或者說因?yàn)橥ㄓ谜Z言故意的摒棄領(lǐng)域依賴, 它在處理領(lǐng)域相關(guān)的問題的時(shí)候并不是有效的.這種有效性不是數(shù)學(xué)含義上的,而是可以進(jìn)行物理度量的. 現(xiàn)在也有很多人認(rèn)為ErLang并不是真正的通用語言,它是針對通信領(lǐng)域進(jìn)行了特定結(jié)構(gòu)調(diào)整的, 是內(nèi)置了領(lǐng)域特定結(jié)構(gòu)的. 而目前在ErLang上建立GUI的努力也并不算是成功.
             
              在前文中我舉了一個(gè)例子試圖說明:"在限定的物理約束下,我們的選擇范圍會大大縮小". "比如說我現(xiàn)在有無窮多種方式從北京跑到上海,但是如果限定只允許用1升汽油,那么我們的選擇就近乎于0". 這里并不是要說明加上物理約束之后,我們便沒有任何選擇了.而是說物理約束對無窮多的可能方式起了限定選擇的作用, 它最終造成我們在具體的物理場景下可能只有非常有限的選擇. 例如現(xiàn)在允許用100升汽油, 有多少種運(yùn)輸方式可以滿足我們的要求? 如果允許1000升呢? 但是如果不考慮所有物理約束, 我們是否能夠證明說: 飛機(jī)和拖拉機(jī)的運(yùn)輸能力是完全一致的, 因?yàn)樗鼈兌寄軓谋本╅_到上海.

              我的觀點(diǎn)是結(jié)構(gòu)問題是獨(dú)立存在的,它具有自身的價(jià)值, 研究它也需要建立特定的價(jià)值觀. 一個(gè)結(jié)構(gòu)可以體現(xiàn)為語言上的某種語法特征, 也可以通過框架等實(shí)現(xiàn), 或者表現(xiàn)為某種設(shè)計(jì)模式,某種編程技巧. 我們在思考結(jié)構(gòu)問題的時(shí)候并不是從特定語言的機(jī)制出發(fā)的, 當(dāng)語言不直接支持的時(shí)候我們可以發(fā)展特定的實(shí)現(xiàn)技術(shù)支持它. 在未來的日子里某個(gè)結(jié)構(gòu)可能被證明具有普適的價(jià)值,它會被吸收到某個(gè)通用語言中成為所有程序的支撐結(jié)構(gòu), 但是更多的結(jié)構(gòu)永遠(yuǎn)都不會進(jìn)入通用語言, 而是居留在某個(gè)特定的領(lǐng)域. 通用語言的發(fā)展并不是完全基于抽象的數(shù)學(xué)分析而進(jìn)行的, 它可以從更加豐富的物理世界中吸取營養(yǎng). 當(dāng)一種結(jié)構(gòu)進(jìn)入通用語言的時(shí)候, 它所帶來的絕對不只是一組數(shù)量關(guān)系,而是同時(shí)帶來一系列經(jīng)過實(shí)踐檢驗(yàn)的物理詮釋.

              我所謂的領(lǐng)域并不是指業(yè)務(wù)領(lǐng)域, 而是結(jié)構(gòu)領(lǐng)域, 一個(gè)可以定義特定結(jié)構(gòu)的物理場景. 一個(gè)特定的結(jié)構(gòu)仍然可以支撐著任意多的具體應(yīng)用. 例如CRUD操作可以作為數(shù)據(jù)管理模型. BizFlow作為界面和單實(shí)體的交互模型.

              函數(shù)式語言為我們提供了一種具體的技術(shù)工具, 但是在現(xiàn)實(shí)的開發(fā)中, 為了有效的處理結(jié)構(gòu)問題, 顯然我們需要多種視角的組合, 而不是把所有可想見的圖景都純化為函數(shù). 我們對世界的體驗(yàn)是多樣化的. 這就是我所謂"世界比函數(shù)的集合要復(fù)雜"的含義.
          主站蜘蛛池模板: 崇州市| 苗栗县| 绥中县| 枣阳市| 大宁县| 商丘市| 永安市| 南靖县| 保亭| 明光市| 陆丰市| 宁夏| 侯马市| 云阳县| 花垣县| 青海省| 家居| 枝江市| 阿鲁科尔沁旗| 江陵县| 延吉市| 亳州市| 柳河县| 岐山县| 鲁甸县| 东乌珠穆沁旗| 牡丹江市| 永年县| 邹城市| 永善县| 兴化市| 秀山| 吉安市| 平武县| 兴隆县| 霍邱县| 西峡县| 鄄城县| 江安县| 灌阳县| 博乐市|