Go 為什麼能成功?Rob Pike 認為做了這 5 件事

2019-11-12     Go語言中文網

俗話說,歷史雖然不會重演,但總是驚人的相似!

如果您想創建一門成功的程式語言(或者至少了解該如何做),那麼向其他有這方面經驗的人學習是非常有價值的。 在《Go Time》第 100 期中,Rob Pike 和 Robert Griesemer(Go 的兩位創建者)一起探討了 Go語言的成功經驗。

以下是 Rob Pike 在演出談到的,該語言成功可能是做對了這 5 件事。

1、正式的語言規範

在介紹該項目的起源時,Rob 說:

在我們經過六個多月的頭腦風暴和思想成形之後,我們做的第一件重要的事情,就是花了幾個星期寫了一份正式的語言規範,我認為這是項目成功的關鍵部分。

另外一件最重要的事情之一是, Ian Taylor(他也是Google的一員)看到了規範,並決定要為此編寫一個編譯器。 因此,有一天他走進我們的辦公室,說:「哦,順便說一句,我已經為您的語言編寫了一個編譯器。」這對於我們來說,真是一個令人驚喜的時刻。 當然,他已經成為團隊的一員,並且他現在仍在為 Go 工作。

該規範引起了 Ian Lance Taylor 等工程師的最初興趣。

(巧合的是,Ian 最近也在一些演講中談論他在 泛型 方面的工作。)

2、殺手鐧應用

然而,Rob 說當時並沒有重點考慮為什麼要引入Docker 的,大概是為了使 Go 語言對系統程式設計師有吸引力?

是的,Docker 是我們的殺手級應用程式,因為它是用 Go 編寫的,它運作良好,並且成為了現在所謂的雲計算的核心……我們過去僅將其稱為系統編程或伺服器。事實上,只要有一項重要的技術是用 Go 語言寫的,這就證明了它的用武之地。而且,我認為這實際上說明 Go 是一門非常好的語言。 這是我們在將語言整合在一起時所考慮的事情,儘管不是自己做的。

後來,Kubernetes 又出現了,這一次來自 Google。能夠使用你的語言編寫重要的軟體,這是取得成功的一個重要部分。如果一門語言沒有任何實際應用,那麼它有多好就無關緊要了。

3、建立了一個開源社區

Rob 坦率地談到了他們在開放原始碼時所面臨的挑戰,這令人耳目一新。

我確實認為我們團隊並未真正做好與開源社區進行交互的準備,這意味著什麼?Ian 是我們中唯一一個在開源世界中待了很多時間的人,他在社區中做的事情比他應得的要多。

我們花了很長時間才了解成為開源社區的一部分意味著什麼,擁有一個基本上由公司支付的項目,但是有很多開源貢獻者……實際上,我們早期就有很多很棒的開源貢獻的開發。 Windows 的移植工作就完全由外部貢獻者完成,這真是太好了……社區的意見至關重要。

我認為有時人們會認為 Google 控制得太多,這是他們的觀點,但是我不同意。我認為他們低估了團隊聽取開源社區所說的話,查閱所有 issue,很好地處理所有問題的能力……有時不是很好,但是後來都解決了。

當有成千上萬人時,這是一個非常具有挑戰性的事情,而現在,據說世界上有數百萬的 Go 程式設計師。他們都對這件事有自己的看法,也知道如何去做,但也要確保您正確把握項目的靈魂——我認為對此沒有任何簡單的答案。我認為很多人都認為這很瑣碎,而您只是接受了每個人想要的東西……但是那樣的話您就不會擁有 Go,而您會擁有其他東西。這確實很棘手,很難平衡。

4、不輕易改變語言

咋一聽,這有點違反直覺。 通常對於軟體而言,延展性是一種美德,要避免僵化。但是,Rob 很好地解釋了為什麼像 Go 這樣的程式語言這點如此重要。(大家都知道,2012 年 Go1 承諾的兼容性,7 年多過去了,一直保持著)

好吧,對我們來說,這點其實很難。 對於 Go1,我們刻意寫下我們保證不做任何(不兼容的)更改。 這對於語言的成功至關重要,因為它使企業能夠相信我們正在做的事情以及依賴我們的事情不會破壞他們的工作……而這使得進行更改變得更加困難。 我認為很多人不理解我們對合約的鐘情。 儘管這是一個已有十年歷史的項目,但我們並未破壞人們的計劃。 這是一個令人難以置信的負擔,但對於使我們到達現在的位置至關重要。

5、堅持自己的信仰

當 Jon Calhoun 問及社區反饋以及 Go 團隊對變更的抵制如何影響這一點時,Rob 說:

Go 的某些特性對它的成功至關重要,但人們不一定喜歡,我們對此直言不諱。我認為您提到的其中一個是未使用變量的編譯錯誤。這很煩人——您忘記刪除未使用的變量,程序就會出現編譯錯誤。但對我們來說,這是 Go 語言出彩的地方,這就是使一種語言能夠儘可能保證高質量的代碼,雖然不能阻止你寫「壞」代碼,但我們試圖告訴你……這樣可以避免你的程序很慢,或者你的代碼難以維護。

我認為真正使人抓狂的是,Go 不允許導入不使用的庫。這對我們至關重要,因為我們花了很多時間來進行大量二進位文件的緩慢構建,確保你程序的依賴項完全是您所需要的,而不再是其他依賴項。這對我們至關重要,但對於很多人來說,每次你進行編輯並刪除列印語句或類似內容時,編譯器都會說「你沒有使用這個庫」。

後來,Brad 編寫了一個名為 goimports 的東西,它是 gofmt 的變體,可以為您管理導入(import),並且幾乎使該抱怨消失。通常,自動化可以消除很多煩惱。

以上就是 Rob Pike 認為 Go 語言成功的 5 件事。整個對話都很精彩,如果英語好,可以聽聽音頻。

音頻地址:https://changelog.com/gotime/100

本文原文地址:https://changelog.com/posts/5-things-rob-pike-attributes-to-gos-success

翻譯:polaris

文章來源: https://twgreatdaily.com/zh-tw/h6rdbW4BMH2_cNUgOq5D.html