官术网_书友最值得收藏!

1.1 Go語言創(chuàng)世紀

Go語言由谷歌公司的Robert Griesemer、Ken Thompson和Rob Pike這3位技術(shù)大咖于2007年開始設(shè)計,設(shè)計新語言的最初動力來自對超級復(fù)雜的C++ 11特性的吹捧報告的鄙視,最終的目標是設(shè)計網(wǎng)絡(luò)和多核時代的C語言。2008年中,語言的大部分特性已經(jīng)設(shè)計完成并開始著手實現(xiàn)編譯器和運行時,此時Russ Cox作為主力開發(fā)者加入。到2009年,Go語言已經(jīng)逐步趨于穩(wěn)定。同年9月,Go語言正式發(fā)布并開源了代?碼。

Go語言很多時候被描述為“類C語言”或者“21世紀的C語言”。從各種角度看,Go語言確實從C語言繼承了相似的表達式語法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等諸多編程思想,并徹底繼承和發(fā)揚了C語言簡單直接的暴力編程哲學(xué)等。圖1-1展示了《Go語言程序設(shè)計》(The Go Programming Language,這本書在國內(nèi)Go 語言社區(qū)中被譽為“Go語言圣經(jīng)”,閱讀這本書可以系統(tǒng)地學(xué)習(xí)Go語言)中給出的Go語言基因族譜,我們可以從中看到有哪些編程語言對Go語言產(chǎn)生了影?響。

首先看基因族譜的左邊一支。可以明確看出Go語言的并發(fā)特性是由CSP理論演化而來的。CSP理論是貝爾實驗室的Hoare于1978年提出的。其后,CSP并發(fā)模型在Squeak/Newsqueak和Alef等編程語言中逐步完善并走向?qū)嶋H應(yīng)用,最終這些設(shè)計經(jīng)驗被消化并吸收到了Go語言中。業(yè)界比較熟悉的Erlang編程語言的并發(fā)編程模型也是CSP理論的一種實?現(xiàn)。

圖1-1 Go語言基因族譜

接著看基因族譜的中間一支。這一支展現(xiàn)了Go語言中面向?qū)ο蠛桶匦缘难莼瘹v程。Go語言中包和接口及面向?qū)ο蟮忍匦岳^承自Niklaus Wirth所設(shè)計的Pascal語言及其后衍生的相關(guān)編程語言。其中包、包的導(dǎo)入和聲明等語法主要來自Modula-2編程語言,面向?qū)ο筇匦运峁┑姆椒ǖ穆暶髡Z法等則來自O(shè)beron編程語言。最終Go語言演化出了自己特有的支持鴨子型的面向?qū)ο竽P偷碾[式接口等諸多特?性。

最后看基因族譜的右邊一支。這一支是對C語言的致敬。Go語言是對C語言最徹底的一次揚棄,在語法上對C語言做了很多簡化和改進,最重要的是舍棄了C語言中靈活但是危險的指針運算。Go語言還重新設(shè)計了C語言中部分不太合理的運算符優(yōu)先級,并在很多細微的地方都做了必要的打磨和改變。當然,C語言中少即是多、簡單直接的暴力編程哲學(xué)被Go語言更徹底地發(fā)揚光大了(Go語言居然只有25個關(guān)鍵字,語言規(guī)范還不到50頁)。

Go語言的其他特性零散地來自其他一些編程語言,例如,iota語法是從APL語言借鑒的,詞法作用域與嵌套函數(shù)等特性來自Scheme語言(和其他很多編程語言)。Go語言中也有很多自己發(fā)明創(chuàng)新的設(shè)計。例如Go語言的切片為輕量級動態(tài)數(shù)組提供了有效的隨機存取的功能,這可能會讓人聯(lián)想到鏈表的底層共享機制。還有Go語言新發(fā)明的defer語句(Ken發(fā)明)也是神來之?筆。

主站蜘蛛池模板: 武邑县| 西吉县| 彰化县| 巴中市| 江津市| 贵港市| 大姚县| 营口市| 江阴市| 安阳县| 巴东县| 遵义县| 凤翔县| 北海市| 红原县| 云阳县| 施秉县| 阳东县| 安岳县| 雷州市| 邳州市| 邵阳市| 乐业县| 衢州市| 玉树县| 吉木乃县| 兴城市| 交口县| 孟连| 香河县| 二连浩特市| 敦煌市| 渑池县| 黔江区| 剑阁县| 张家界市| 金山区| 苍溪县| 泾川县| 鸡泽县| 富宁县|