1. 程式人生 > >Go 的這十年!Go 語言之父等人回顧

Go 的這十年!Go 語言之父等人回顧

【導讀】:Go 語言的主要締造者 Rob Pike、Robert Griesemer 與 Ken Thompson,他們三人撰文回顧 Go 的發展史與一些重要人物,並曝光促成 Go 誕生的相關郵件的片段。

2017 年 9 月,Go 語言迎來其誕生十週年紀念日。

關於 Go 語言設計的初次討論是在 2007 年 9 月 20 日,一個週四的下午。這次討論促使 Robert Griesemer、Rob Pike、 以及 Ken Thompson 於第二天下午 2 點,在 Google’s Mountain View 的 43 號大樓的 Yaounde 會議室又組織了一次關於該語言設計的會議。語言的名字於 9 月 25 號確定了,在有關該語言設計的第一封郵件裡面有關於命名的考量:

(譯註:這是一封由 Rob Pike 在 2007 年 9 月 25 號,星期二,下午 3:12 回覆給 Robert Griesemer、Ken Thompson 的有關程式語言討論主題的郵件,郵件正文大意為:在開車回家的路上我得到了些靈感。1.給這門程式語言取名為“go”。你可以為這個命名假借各種理由,但它確實有其可取之處。它很簡短,易書寫。工具類可以命名為:goc、 gol、goa。互動式的除錯工具也可以直接命名為“go”。語言檔案字尾名為 .go ……)

(值得一提的是,本語言的名字是 Go ;“golang”來自於其 web 站點網址(go.com 在當時已是一個迪士尼 web 站點地址。),並不是該語言的正確名字。)

Go 專案團隊將 2009 年 11 月 10 日,即該語言正式對外開源的日字作為其官方生日。原始碼最初託管在 code.google.com 上,之後幾年才遷移到 GitHub 上。但是,現在我們要回到語言設計的最初概念構建階段,即更早的兩年,這可以讓我們做更進一步地回顧,以更長遠的視角,見證語言發展歷史上的一系列早期事件。

在開發設計 Go 語言過程中的第一個重大驚喜是收到了以下這封郵件:

(譯註:這是一封由 Ian Lance Taylor 在 2008 年 6月 7 日(星期六)的晚上 7:06 寫給 Robert Griesemer、Rob Pike、 Ken Thompson 的關於 Go gcc 編譯器前端的郵件。郵件正文大意如下:我的同事向我推薦了這個網站 http://…/go_lang.html 。這似乎是一門很有趣的程式語言。我為它寫了一個 gcc 編譯器前端。雖然這個工具仍缺少很多的功能,但它確實可以編譯網站上展示的那個素數篩選程式了。)

(Drawing Copyright ©2017 Renee French

Ian Lance Taylor 的加入以及第二個編譯器 (gcc go) 的實現 在帶來震驚的同時,也伴隨著喜悅。這對 Go 專案來說不僅僅是鼓勵,更是一種對可行性的證明。語言的第二次實現對制定語言規範和確定標準庫的過程至關重要,同時也有助於保證其高可移植性,這也是 Go 語言承諾的一部分。

雖然 Ian 的辦公室離我們不遠,但在收到此郵件以前,我們三人與他素未謀面。不過,自那以後,Ian Lance Taylor 便成為了設計和實現 Go 語言及其工具的核心人物。

 Russ Cox 在2008 年帶著他的語言設計天賦和程式設計技巧也加入了剛成立不久的 Go 團隊。Russ 發現 Go 方法的通用性意味著函式也能擁有自己的方法,這直接促成了 的實現,這是一個出乎我們所有人意料的結果。Russ 還提出了更多的泛化性的想法,比如 io.Reader 和 io.Writer 介面,奠定了所有 I/O 庫的整體結構。

Jini Kim 是我們最初的產品經理,聘請了安全專家 Adam Langley 幫助 Go 走向 Google 外面的世界。Adam 為我們做了許多不為外人知曉的工作,包括建立最初的 golang.org  網站以及 build dashboard。不過他最大的貢獻當屬建立了 cryptographic 庫。起先,在我們中的部分人看來,這個庫無論在規模還是複雜度上都不成氣候。但是就是這個庫在後期成為了很多重要的網路和安全軟體的基礎,並且成為了 Go 語言開發歷史的關鍵組成部分。許多網路基礎設施公司,比如 Cloudflare,均重度依賴 Adam 在 Go 專案上的工作,網際網路也因它變得更好。因此,就 Go 而言,我們由衷地感謝 Adam。

事實上,有許多公司在專案早期就開始使用 Go 語言進行開發,尤其是一些初創公司。在這些公司當中有些現已成為雲端計算領域中的巨頭。有一家創業公司,現在叫 Docker,就是使用 Go 進行專案開發,並促進了計算機領域的容器行業,進而出現了像 Kubernetes 這樣的專案。現在,我們完全可以說 Go 是容器語言,這是另一個完全出乎意料的結果。

不過,Go 在雲端計算領域中所起的作用更大。2014 年 3 月, Donnie Berkholz 為 RedMonk 撰寫文章,聲稱 Go 是“雲端計算基礎設施的新興語言”。同時,Apcera 的 Derek Collison 表示,Go 已是一門雲端計算語言。彼時,這樣的表述可能言過其實,但 Berkholz 所使用的“新興”一詞恰如其分地表達了 Go 語言在當時的地位。

如今 Go 已經是雲端計算程式語言。想象一下:一個只有 10 年發展經歷的程式語言已經成為了如此巨大而且正在不斷髮展的行業的主導者,這種成功是每個人都無法想象的。如果你認為“主導”一詞太過強勢,請看看中國的網際網路。一段時間以來,Go 在中國大量使用的資料一度讓我們誤認為 Google 趨勢圖出現了某些錯誤,但是凡是去過中國,參加過中國區 Go 語言大會的人都可以證實:Google 趨勢圖的資料是真實的。Go 在中國的使用非常火爆!

簡而言之,Go 語言的十年發展旅程中經歷了眾多里程碑。最令人震驚的是我們現在的位置:保守估計至少有 50 萬 Go 程式設計師。當傳送那封為 Go 命名的郵件時,憧景將會有五十萬 Go 追隨者,這聽起來一定很荒唐。但就在此時此刻,我們不僅有 50 萬 gopher,並且這個數量還在持續增長。

說到 gophers,很高興看到來自 Renee French 想法的吉祥物 Go Gopher(地鼠),不僅成為了一個非常受人喜愛的作品,而且也是世界各地Go 程式設計師的象徵。許多各地區頂級的 Go 大會都被稱為 GopherCons,因為他們聚集了來自世界各地的 gophers。

Gopher 會議正在飛速發展。第一次大會的舉辦只不過是三年前的事情,但今天在全世界各地有很多這樣的 Gopher 大會,並且還有無數小的本地“聚會”。無論哪一天,都會有不止一個 gopher 群體相聚在世界上的某個地方分享有關 Go 語言設計的想法。

回顧過去十年的 Go 設計和開發,Go 社群的發展尤其驚人的。技術會議和聚會的數量、長長的且不斷增加的 Go 專案貢獻者名單、大量使用Go 實現的開原始碼庫、使用 Go 開發公司數量(有些甚至只使用 Go 開發):任何一項資料考量後都足以讓人震驚!

就我們三人而言,Robert、 Rob 和 Ken,當初只是想讓我們的程式設計生活更輕鬆一些,而如今,我們難以置信地、欣慰地看到我們的工作已經開始起作用了。

未來十年它將會帶來什麼呢?讓我們拭目以待。

– Rob Pike、Robert Griesemer 和 Ken Thompson