歐洲的編程語(yǔ)言三巨頭,只剩下一位了!
能把三位大牛的名字都叫出來(lái)的人恐怕不多吧:
這三位都是圖靈獎(jiǎng)獲得者,他們的名字和發(fā)明散布在各種教科書中,從左到右,依次是:
尼克勞斯·沃斯 (Niklaus Wirth)
瑞士人,一生發(fā)明了8種編程語(yǔ)言,其中最著名的是Pascal,提出了著名的“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,1984年沃斯因開(kāi)發(fā)了一系列創(chuàng)新的計(jì)算機(jī)語(yǔ)言而獲得圖靈獎(jiǎng)。
迪杰斯特拉(Edsger Dijkstra)
荷蘭人,發(fā)明了“最短路徑算法”,“信號(hào)量”,提出了“Goto是有害的”,1972年因?qū)Y(jié)構(gòu)化編程的貢獻(xiàn)獲得圖靈獎(jiǎng)。
霍爾(Tony Hoare)
英國(guó)人,發(fā)明了“快速排序算法”,發(fā)明了霍爾邏輯來(lái)驗(yàn)證程序正確性,提出CSP解決并發(fā)過(guò)程的交互,發(fā)明了null這個(gè)引發(fā)“數(shù)十億美元”損失的錯(cuò)誤,1980年因?yàn)閷?duì)編程語(yǔ)言的定義和設(shè)計(jì)的基本貢獻(xiàn)獲得圖靈獎(jiǎng)。
他們?nèi)硕荚跉W洲,都是從學(xué)工程學(xué)開(kāi)始,后來(lái)轉(zhuǎn)到了計(jì)算機(jī)領(lǐng)域。
他們年齡相仿(沃斯和霍爾同歲,比迪杰斯特拉小4歲),共同的興趣讓他們走到一起,不但在暑期活動(dòng),學(xué)術(shù)會(huì)議上經(jīng)常碰面,密切合作,在私下里,也建立了深厚的友誼,經(jīng)常來(lái)回走動(dòng),互相拜訪。
今天講幾個(gè)小故事來(lái)聊聊他們的偉大貢獻(xiàn)。
迪杰斯特拉率先登場(chǎng)
在上世紀(jì)六七十年代,是編程語(yǔ)言發(fā)展的黃金時(shí)代。
第一個(gè)高級(jí)編程語(yǔ)言Fortran已經(jīng)出現(xiàn),但是主要應(yīng)用在工程界,和硬件密切相關(guān)。
1960年1月,F(xiàn)ortran之父約翰·巴克斯,Lisp之父約翰·麥卡錫,第一位圖靈獎(jiǎng)獲得者Alan Jay Perlis等一大批頂尖科學(xué)家在巴黎聚會(huì),經(jīng)過(guò)一番唇槍舌戰(zhàn)的討論,他們推出了ALGOL 60,這是一種和計(jì)算機(jī)硬件無(wú)關(guān)的編程語(yǔ)言,方便算法的描述。
ALGOL 60有很多創(chuàng)新,遞歸、本地變量、begin end 代碼塊都是由它率先推出。
現(xiàn)代大多數(shù)編程語(yǔ)言的語(yǔ)法,都是類ALGOL的。
從下圖中,就可以看到ALGOL的江湖地位,是很多編程語(yǔ)言的老祖宗。
圖片
迪杰斯特拉對(duì)Algol-60非常欣賞,他不止一次說(shuō)道,這是計(jì)算機(jī)科學(xué)成為一個(gè)學(xué)科的重要時(shí)刻。
僅僅7個(gè)月以后,迪杰斯特拉就在荷蘭實(shí)現(xiàn)了第一個(gè)ALGOL60的編譯器,比其他小組早了一年多。
為了實(shí)現(xiàn)ALGOL60中的遞歸,迪杰斯特拉第一次引入了Stack這個(gè)概念。
迪杰斯特拉等人還舉辦了一個(gè)ALGOL 60的培訓(xùn)班,來(lái)培訓(xùn)的就有霍爾,霍爾剛剛發(fā)表了快速排序算法,他上完培訓(xùn)班,也在自己公司機(jī)器上實(shí)現(xiàn)了ALGOL 60,霍爾的實(shí)現(xiàn)效率高,可靠性強(qiáng),受到國(guó)際學(xué)術(shù)界的關(guān)注,進(jìn)入了IFIP工作組,開(kāi)始維護(hù)和發(fā)展ALGOL。
PASCAL的誕生
1966年,霍爾和沃斯一起做了一個(gè)提案,希望對(duì)ALGOL做出一次改進(jìn)。但是ALGOL小組認(rèn)為他們的提案太保守,改動(dòng)太小,拒絕了。
“一氣之下”,沃斯和霍爾退出了ALGOL小組,自己把提案的想了做了實(shí)現(xiàn),即編程語(yǔ)言ALGOL W。
正是在ALGOL W 中,霍爾發(fā)明了那個(gè)被“無(wú)數(shù)人詬病”的空引用null。
在2009年的一個(gè)軟件會(huì)議上,霍爾為發(fā)明null夸張地道歉:
“我當(dāng)時(shí)正在設(shè)計(jì)ALGOL W 的類型系統(tǒng),我忍不住想把null放進(jìn)去,因?yàn)樗苋菀讓?shí)現(xiàn)......沒(méi)想到它導(dǎo)致了無(wú)數(shù)的錯(cuò)誤,系統(tǒng)崩潰......在過(guò)去的40年,引發(fā)了數(shù)十億美元的損失?!?/p>
1970年,沃斯進(jìn)一步改進(jìn)了 ALGOL W,成為了大名鼎鼎的Pascal
為了幫助在各種計(jì)算機(jī)上實(shí)現(xiàn)Pascal, 他創(chuàng)建了一種新型的編譯器,該編譯器不會(huì)直接生成機(jī)器碼,而是生成一種中間的代碼形式,在虛擬機(jī)上運(yùn)行。
1976年,沃斯寫了一本書介紹基本的數(shù)據(jù)結(jié)構(gòu)和算法,也捎帶著介紹了Pascal語(yǔ)法。
這本書的名稱也很神奇,叫做《程序=算法+數(shù)據(jù)結(jié)構(gòu)》,從此這個(gè)公式開(kāi)始名揚(yáng)世界。
圖片
PASCAL的流行
雖然 Pascal 很快就得到了大學(xué)的認(rèn)可,但它又花了幾年時(shí)間才成為主流。
這得益于Philippe Kahn,是沃斯在瑞士蘇黎世聯(lián)邦理工學(xué)院教學(xué)期間的一個(gè)學(xué)生。
圖片
Philippe Kahn看到了沃斯教授在Pascal上的開(kāi)創(chuàng)性工作,1982年成了一家叫做Borland的公司,從事軟件開(kāi)發(fā)工具的開(kāi)發(fā)。
1983年,Borland推出了革命性的集成開(kāi)發(fā)環(huán)境,Turbo Pascal ,僅賣49.95美元。
圖片
Turbo Pascal 除了價(jià)格低廉以外,另外一個(gè)殺手锏就是編譯速度飛快。
操刀編譯器的是丹麥人Anders Hejlsberg,他很大程度上受到了《程序=算法+數(shù)據(jù)結(jié)構(gòu)》這本書中Tiny Pascal”編譯器的啟發(fā)。
關(guān)于Anders Hejlsberg的故事,可以看這篇漫畫《一個(gè)養(yǎng)活了四代程序員的男人》。
Goto是有害的
1968年,迪杰斯特拉向ACM提交了一篇論文,尖銳地批評(píng)了當(dāng)時(shí)編程中過(guò)度使用Goto語(yǔ)句的情況,以及對(duì)結(jié)構(gòu)化編程的擁護(hù),他提議,在高級(jí)語(yǔ)言中廢除Goto語(yǔ)句!
論文的標(biāo)題平淡無(wú)奇:A Case Against the Goto Statement。
沃斯正好是當(dāng)時(shí)的編輯,他順手把標(biāo)題改成了Goto語(yǔ)句是有害的(Goto Statement Considered Harmful)。
如果放在如今的自媒體時(shí)代,沃斯絕對(duì)是一個(gè)擅長(zhǎng)抓熱點(diǎn)的標(biāo)題大師。
這個(gè)標(biāo)題就像一個(gè)重磅炸彈,很多大牛跳出來(lái),或支持或反對(duì)。
高德納寫了一篇叫做《使用 Goto語(yǔ)句進(jìn)行結(jié)構(gòu)化編程》的文章,分析了一些常見(jiàn)的編程場(chǎng)景,指出一些場(chǎng)景中Goto是最適合的語(yǔ)言結(jié)構(gòu)。
K&R在《C語(yǔ)言編程》中,也指出Goto可以用于函數(shù)結(jié)束錯(cuò)誤處理程序和循環(huán)的多級(jí)中斷。
即使在多年以后,Linus之父Linus Torvalds和《代碼大全》的作者Steve McConnell還反對(duì)迪杰斯特拉的觀點(diǎn),指出 Goto可以是一種有用的語(yǔ)言功能,可以提高程序速度、大小和代碼清晰度。
據(jù)統(tǒng)計(jì),2013 年,Linux 內(nèi)核代碼中約有 100,000 個(gè) goto。
“XXX是有害的”成為了計(jì)算機(jī)的時(shí)尚用詞,在隨后的幾十年中不斷出現(xiàn):
“全局變量是有害的”
“Unix風(fēng)格,或者cat -v 是有害的”
“MD5被認(rèn)為是有害的”
“以人為本的設(shè)計(jì)是有害的”
“Java的新特性是有害的”
“‘被認(rèn)為有害’的文章是有害的”
......
尾聲
沃斯,迪杰斯特拉和霍爾都在歐洲,獲得圖靈獎(jiǎng)都和編程語(yǔ)言有關(guān),可以稱為歐洲編程語(yǔ)言的三巨頭。
他們都是結(jié)構(gòu)化編程的先驅(qū),他們的工作深刻地影響了我們現(xiàn)在的編程。
2002年8月6日,迪杰斯特拉和癌癥斗爭(zhēng)多年以后,不幸離世,享年72歲。
2024年1月1日,沃斯去世。享年89歲。
三巨頭中,只剩下霍爾一位了。
其實(shí),除了這三位之外,歐洲還有一對(duì)編程語(yǔ)言雙子星,挪威的Ole-Johan Dahl和Kristen Nygaard ,他們發(fā)明了面向?qū)ο蟮恼Z(yǔ)言Simula,兩人也都于2002年去世。
我們現(xiàn)在使用的編程語(yǔ)言的概念和特性,差不多都在上世紀(jì)六七十年代就已發(fā)明,那一批編程語(yǔ)言的先驅(qū),都在逐漸老去。
編程語(yǔ)言的黃金時(shí)代,過(guò)去了。
如需轉(zhuǎn)載,請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)。