類型與系統_風聞
code2Real-有人就有江湖,有code就有bug2021-12-02 17:30
學haskell函數式編程,類型是繞不過去的坎。
軟件工程的概念已經提出了幾十年了,但是因為沒有銀彈,所以軟件工程不是一個放之四海而皆準的真理。
專家的意見是,軟件之所以難以處理複雜系統,主要是抽象能力不足。
抽象能力不足體現在“盲人摸象”上,只見局部,難以獲得整體的感覺,因此不知道何處下手能達到皰丁解牛的效果。
皰丁因為對牛很熟悉了,所以動刀時勢如破竹,刀鋒未到,竹子已經裂開了。
因為是先學了LISP,所以在學haskell時有點痛苦。
LISP通過抽象語法樹(AST)實現抽象。
LISP的語言最簡單,只有7種結構,LISP的本質是用list表示語法樹。
LISP的本名就是表處理語言:List Processing language。
LISP用“表”表達萬物,對“表”的操作就是對萬物的操作。
haskell是一個完全不同的思維模式,它以類型的視角看待萬物。
這有點象數學的羣論,羣論把所有的運算,如+-*/都視為一種操作類型,研究這些操作的結果是否滿足自反、傳遞等特性,是否有逆元,是否有零元,是否滿足結合律交換律。
羣論還是初級的抽象代數,後面還有更抽象的,如範疇論等。
中國古人説:非我族類,其心必異。
近代科學本質上是分類學,針對不同的類型,有不同的措施。
類型是編譯技術的酵母,否則無法消化複雜的語法系統。
中國人受傳統文化影響,早已經習慣了簡單的分類。
如二元思維,陰陽思維,非黑即白思維。
中國人崇尚大道至簡,而西方因為歷史比較短,加上有技術工具,所以不厭其煩地細分類型。
近代西方將分類推廣到極致,形成非常複雜的分類系統。
其中,有進步也有退步。例如,菲律賓土著孩子可以識別3000種野生藥物,而英國醫科大學博士只能識別900種野生藥物。
説得極端的例子,中國將性別分為男女兩種。但是西方白左將性別分為56種。
剛開始時,我以為自己眼花了,是不是作者筆誤,把中國56個民族搬到西方文獻中了。
haskell是純函數式編程,水至清而無魚,越是純的東西,工程上就越是不方便使用,所以haskell在學術上用得比較多。
haskell在類型上B格還不夠,不支持depent type。
Idris支持depent type,在類型處理能力上達到一個頂峯。
但是,抽象層次還不夠。
編程的目標要達到老子在《道德經》中所説的那樣:天得一而清,地得一而寧。
對老子而言,萬物抽象成“一”,則無往而不利。就象手中有錘子,把所有的問題都看成釘子。
對於用户而言,他們的要求就是“一”,但是對於程序員而言,到達那個“一”之前,需要在代碼的沼澤中艱難地邁開雙腿。