国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

王垠:關于編程語言的思考

開發(fā) 開發(fā)工具 后端
之前寫了那么多 Haskell 的不好的地方,卻沒有提到它好的地方。其實我必須承認,我從 Haskell 身上學到了非常重要的東西,那就是對于“類型”的思考。雖然 Haskell 的類型系統(tǒng)有過于強烈的約束性,從一種“哲學”的角度看感覺“不自然”,但如果一個程序員從來沒學過 Haskell,那么他的腦子里就會缺少一種重要的東西。

之前寫了那么多 Haskell 的不好的地方,卻沒有提到它好的地方。其實我必須承認,我從 Haskell 身上學到了非常重要的東西,那就是對于“類型”的思考。雖然 Haskell 的類型系統(tǒng)有過于強烈的約束性,從一種“哲學”的角度看感覺“不自然”,但如果一個程序員從來沒學過 Haskell,那么他的腦子里就會缺少一種重要的東西。這種東西很難從除 Haskell,ML,Coq,Agda 以外的其它語言身上學到。

Haskell 教會我的東西

一個沒有學過 Haskell 的 Scheme 程序員,最容易犯的一個錯誤就是,把除 #f(Scheme 的邏輯“假”) 以外的任何值都作為 #t(Scheme 的邏輯“真”)。很多人認為這是 Scheme 的一個“特性”,可是殊不知這其實是 Scheme 的極少數缺點之一。如果你了解 Lisp 的歷史,就會發(fā)現(xiàn)在最早的時候,Lisp 把 nil(空鏈表)這個值作為“假”來使用,而把 nil 意外的其它值都當成“真”。這帶來了邏輯思維的混亂。

Scheme 對 Lisp 的這種混亂做法采取了一定的改進,所以在 Scheme 里面,空鏈表 '() 和邏輯“假”值 #f 被劃分開來。這是很顯然的事情,一個是鏈表,一個是 bool,怎么能混為一談。Lisp 的這個錯誤影響到了很多其它的語言,比如 C 語言。C 語言把 0 作為“假”,而把不是 0 的值全都作為“真”。所以你就看到有些自作聰明的 C 程序員寫出這樣的代碼:

  1. int i = 0;  
  2. ...  
  3. ...  
  4. if (i++) { ...} 

Scheme 停止把 nil 作為“假”,卻仍然把不是 #f 的值全都作為“真”。Scheme 的崇拜者一般都告訴你,這樣做的好處是,你可以使用

  1. (or x y z ...) 

這樣的表達式,如果其中有一個不是 #f,那么這個表達式會直接返回它實際的值,而不只是 #t。

然而他們沒有看到的是,其實這個表達式所要達到的“目的”,其實有更加簡單而直接的方法,而不需要把非 #f 的值都作為“真”。你只需要定義一個函數:

  1. (define orf  
  2.   (lambda (ls)  
  3.     (cond  
  4.       [(null? ls) #f]  
  5.       [else 
  6.        (let ([v (car ls)])  
  7.          (if (not (eq? v #f))  
  8.              v  
  9.              (orf (cdr ls))))]))) 

之后你就可以這樣調用它:(orf '(#f #f 0 #f "foo"))。這會在遇到 0 的時候返回它,因為0是這個鏈表里第一個不是 #f 的值。如果鏈表里全都是 #f 它就返回 #f。

這比起 Scheme 的 or 來,不但效率一樣,而且還有一個好處。那就是這個 orf 是一個函數,而 or 是一個宏。所以你沒法把 or 作為參數傳遞給另一個函數。你沒法使用像 (map or ...) 這樣的寫法。而這個 orf 由于是一個函數,所以可以被作為值,任意的傳遞給另一個函數。

Haskell 的類型系統(tǒng),就是幫助你嚴密的思考關于類型的問題的。可是 Haskell 做得過分了一點,由于對類型推導,一階邏輯和 category theory 等理論的盲目崇拜,Haskell 里面存在很多不必要的復雜性。各種各樣的類型推導我寫過不下十個,其中有一些比 Haskell 強大很多。我設計了自己的類型系統(tǒng)。category theory 其實不是什么有用的東西。很多數學家把它叫做“abstract nonsense”,就是說它太“通用”了,以至于相當于什么都沒說。我曾經在一個晚上看完了整本的 category theory 教材,發(fā)現(xiàn)里面的內容我其實通過自己的動手操作(實現(xiàn)編譯器,設計類型系統(tǒng)和靜態(tài)分析等等),早就明白了。

所以我不想再使用 Haskell,我對它的程序員的“天才態(tài)度”也感到厭倦,然而我的腦子里卻留下了它教會我的東西。對 Haskell 的理解,讓我成為了一個更好的 Scheme 程序員,更好的 Java 程序員,更好的 C++ 程序員,甚至更好的 shell 腳本程序員。我能夠在任何語言里再現(xiàn) Haskell 的編程方式的精髓。然而讓我繼續(xù)用 Haskell ,卻就像是讓我坐牢一樣。本來很簡單的事情,到 Haskell 里面就變成這樣那樣莫名其妙的新術語。Haskell 的設計者們的論文我大部分都看過,幾分鐘之內我就知道他們那一套東西怎么變出來的,其實里面很少有新的東西。大部分是因為 Haskell 引入的那些“新概念”(比如 monad)而產生的無須有的問題。世界上有比他們更聰明的人,更簡單卻更強大的理論。不要以為 Haskell 就是世界之巔。

所以怎么說呢,我覺得每個程序員的生命中都至少應該有幾個月在靜心學習 Haskell。學會 Haskell 就像吃幾天素食一樣。每天吃素食顯然會缺乏某些營養(yǎng),但是每天都吃葷的話,你就永遠意識不到身體里的毒素有多嚴重。

專攻一門語言的害處

我曾經對人說 C++ 里面其實有一些好東西,但是我沒有說的是,C++ 里面的壞東西實在太多了。

有些人從小寫 C++,一輩子都在寫 C++。這樣的結果是,他們對 C++ 里面的“珍珠”掌握的非常牢靠,以至于出現(xiàn)了一種“腦殘”的現(xiàn)象——他們沒法再寫出邏輯清晰的程序。(這里“珍珠”是一個特殊的術語,它并不含有贊美的意思。請參考這篇博文。)

比如,很多 C++ 程序員很精通 functor 的寫法,可是其實 functor 只是由于 C++ 沒有 first-class function 而造成的“變通”。C++ 的 functor 永遠也不可能像 Scheme 的 lambda 函數一樣好用。因為每次需要一個 functor 你都得定義一個新的 class,然后制造這個 class 的對象。如果函數里面有自由變量,那么這些自由變量必須通過構造函數放進 functor 的 field 里面,這樣當 functor 內部的“主方法”被調用的時候,它才知道自由變量的值。所以為此,你又得定義一些 field。麻煩了這么久,你得到的其實不過是 Scheme 程序員用起來就像呼吸空氣一樣的 lambda。

這些“精通” functor 的 C++ 程序員,認為會用 functor 就說明自己水平高。殊不知 functor 這東西不但是一個“變通”,而且是從函數式語言里面“學”過來的。在最早的時候,C++ 程序員其實是不知道 functor 這東西的。如果你考一下古就會發(fā)現(xiàn),C++ 誕生于 1983 年,而 Scheme 誕生于 1975 年,Lisp 誕生于 1958 年。C++ 的誕生比 Scheme 整整晚了8年,然而 Scheme 一開始就有 lexical scoping 的 lambda。functor 只不過是對 lambda 的一種繞著彎的模仿。實際上 C++ 后來加進去的一些東西(包括 boost 庫),基本上都是東施效顰。

記得2011年11月11日的良辰吉日,C++ 的創(chuàng)造者 Bjarne Stroustrup 在 Indiana 大學做了一個演講,主題是關于 C++11 的新特性。當時我也在場,主持人 Andrew 是 boost 庫的首席設計師之一(他后來有段時間當過我的導師)。他連夸 Stroustrup 會選日子,只是遺憾演講時間沒有定在11點。

雖然我對 Stroustrup 的幽默感和謙虛的態(tài)度感到敬佩,但我也看出來 C++11 相對于像 Scheme 這樣的語言,其實沒有什么真正的“新東西”。大部分時候它是在改掉自己的一些壞毛病,然后向其它語言學習一些東西,然后把這些學習的痕跡掩蓋起來。可是到最后,它仍然不可能達到其他語言那么原汁原味的效果。然而,由于 C++ 的普及程度之高,現(xiàn)成的代碼之多,它的地位和重要性還是一時難以動搖的。所以“先輩的罪”,我們恐怕要用很多代人的工作才能彌補。

那么 C++ 有什么其他語言沒有的好東西呢?其實非常少。我還是有空再講吧。

多學幾種語言

我今天想說其實就是,沒有任何一種語言值得你用畢生的精力去“精通”它。“精通”其實代表著“腦殘”。你必須對每種語言都帶有一定的懷疑態(tài)度,而不是完全的擁抱它。每個人都應該學習多種語言,這樣才不至于讓自己的思想受到單一語言的約束,而沒法接受新的,更加先進的思想。這就像每個人都應該學會至少一門外語一樣,否則你就深陷于自己民族的思維方式。有時候這種民族傳統(tǒng)的思想會讓你深陷無須有的痛苦,卻無法自拔。

原文鏈接:http://www.yinwang.org/blog-cn/2013/04/17/languages/

責任編輯:林師授 來源: 王垠的博客
相關推薦

2012-08-13 09:40:12

語言編程語言程序語言

2017-07-10 17:00:24

程序語言語言特性

2013-03-08 10:00:01

2013-06-19 09:42:27

工作經歷程序員開發(fā)經驗

2012-10-30 15:31:17

2013-03-29 10:02:37

編譯器語言編譯開發(fā)

2013-05-21 09:47:15

編輯器IDE程序員

2014-02-12 14:31:55

2013-03-18 10:19:41

程序設計語言

2012-09-12 10:33:37

工具工具奴隸語言工具

2013-03-20 09:54:07

2012-08-14 10:44:52

解釋器編程

2011-06-03 13:03:03

JAVA

2012-12-17 10:50:27

程序員

2010-09-27 08:10:22

JVMScalaGroovy

2013-06-26 10:13:32

C語言結構體結構體偏移

2021-06-15 07:10:14

JavaScript異步編程

2022-08-01 07:38:29

代碼開發(fā)

2011-04-13 14:04:14

Java數組

2021-12-08 10:54:09

汽車智能芯片
點贊
收藏

51CTO技術棧公眾號

成人午夜免费av| 亚洲激情在线视频| 国产伦精品一区二区三区免| 欧美在线一级| 欧美丝袜丝交足nylons图片| av五月天在线| 国产一区二区三区四区在线观看| 国产精品丝袜白浆摸在线| 欧美精选视频一区二区| 7777精品伊人久久久大香线蕉超级流畅| 97操碰视频| 国产精品123| 国产综合动作在线观看| 亚洲欧洲色图| 精品国产一区二区三区久久狼5月| 91.xxx.高清在线| 亚洲综合区在线| 精品久久久久久久免费人妻| 久久免费国产| 91视频国产精品| 久久精品凹凸全集| 久久久国产精品亚洲一区| 牛牛电影国产一区二区| 在线这里只有精品| 伦理电影国产精品| 国产亚洲自拍一区| 五月丁香综合缴情六月小说| 蜜桃av噜噜一区二区三区小说| 97超碰资源| 99re66热这里只有精品8| 久久久久久久国产精品视频| 欧美黄色a视频| 亚洲人成在线观看| 在线视频cao| 亚洲国产第一页| 啦啦啦中文在线观看日本| 6080yy午夜一二三区久久| 成人高清网站| 欧美在线免费播放| 色老头视频在线观看| 欧美日韩中文字幕一区| a天堂中文在线88| 欧美日本精品一区二区三区| 国产精品一二三区视频| 欧美午夜精品免费| 黄色网址在线免费| 亚洲成人av中文字幕| 竹内纱里奈兽皇系列在线观看| 亚洲欧美日韩一区二区三区在线| 日本美女一区| 久久中国妇女中文字幕| 91综合精品国产丝袜长腿久久| 97精品国产aⅴ7777| 欧美男同视频网| 国产在线a不卡| 欧美先锋影音| 欧美激情视频一区二区三区| 日本亚洲最大的色成网站www| 亚洲v欧美v另类v综合v日韩v| 免费观看在线综合| 国产美女永久无遮挡| 久久精品视频在线看| 1024欧美极品| 色综合激情久久| 欧美14一18处毛片| 日韩在线观看你懂的| 国内精品国产成人国产三级粉色| 国产精品丝袜高跟| 国产精品视频| 国产xxxx振车| 亚洲免费看黄网站| 女女色综合影院| 国产一区二区三区四区福利| 日本在线视频一区二区三区| 国产精品久久久久久久久久ktv| 国内精品福利| 日本久久高清视频| 国产精品伦理在线| 噜噜噜在线观看播放视频| 精品国产91乱码一区二区三区 | 成人免费视频97| 中文在线一区| 欧美a级免费视频| 亚洲精品一二三| 国产福利视频在线| xxxxx91麻豆| 婷婷综合伊人| 久久久久久久久网| 亚洲综合在线视频| 日本在线观看高清完整版| 久久精品亚洲国产| 91日韩免费| 在线一区日本视频| 亚洲天堂a在线| 99视频免费在线观看| 欧美精品日韩三级| 在线日本成人| www日韩在线观看| 3d成人动漫网站| 久久porn| 中文字幕在线乱| 日韩欧美国产高清91| 欧美大胆性生话| 亚洲综合中文字幕在线| 成人av在线看| 黄色免费在线观看| 日本韩国欧美精品大片卡二| 久久福利资源站| 色综合久久网女同蕾丝边| 日韩在线小视频| 99精品国产在热久久| 羞羞视频立即看| 亚洲欧洲视频在线| 欧美在线首页| 三上悠亚在线一区二区| 欧美mv日韩mv| 国产精品精品| 国产又粗又长又大的视频| 亚洲成人性视频| 亚洲欧美色图| 人人干人人干人人| 亚洲免费电影在线观看| 午夜欧美精品| 成人综合av| 欧美成人四级hd版| 精彩视频一区二区三区| 97超碰人人在线| 国产精品成熟老女人| 99久久免费视频.com| 色呦呦呦在线观看| 97se视频在线观看| 亚洲视频中文字幕| 国产精品美女久久久久人| 亚洲欧美影院| 欧美性色黄大片| 成人一区二区| 在线观看成人影院| 日韩一区二区久久久| 久久成人av少妇免费| 日本欧美在线视频免费观看| 成人黄色大片在线免费观看| ㊣最新国产の精品bt伙计久久| 国产精品蜜月aⅴ在线| 亚洲欧美日韩精品久久久| 欧美日韩激情一区| 亚洲色图插插| 最新av番号| 日韩av理论片| 国产精品久久久久桃色tv| 日韩视频1区| 欧美国产亚洲一区| 日韩中文在线中文网三级| 国产一区二区免费看| 美足av综合网| 先锋影音网一区| 91精品福利在线一区二区三区 | 超碰免费在线播放| 国产精品日韩高清| 一本到三区不卡视频| 国产一区二区三区日韩精品| 国产情侣av自拍| 欧美精品久久久久久久| 99视频精品在线| 91视频成人| 日日噜噜夜夜狠狠| 欧美孕妇性xx| 亚洲精品国产无天堂网2021| 香蕉视频一区| а√天堂www在线а√天堂视频| 69av视频在线播放| 亚洲欧美激情在线| 国产成人三级| 清纯唯美亚洲色图| 国内精品二区| 精品免费国产一区二区三区四区| 美女脱光内衣内裤视频久久影院| 成人av影院在线观看| 亚洲色成人www永久在线观看 | 欧美巨大另类极品videosbest | 亚洲激情第一区| 日韩综合一区| 搞黄视频免费在线观看| 久久久久国产精品视频| 精品捆绑美女sm三区| 国产sm精品调教视频网站| 免费看一区二区三区| 色av一区二区三区| 俄罗斯精品一区二区| 精品久久五月天| 久久影院视频免费| 久久免费大视频| 欧美videos另类精品| 精品视频免费在线播放| 午夜精品久久久久久99热软件 | 日韩一级特黄| 天天草夜夜草| 狠狠色噜噜狠狠色综合久| 亚洲人成五月天| 亚洲电影中文字幕在线观看| 视频在线观看91|