我認為 Go 的成功歸功於這 5 個方面

ITPUB社群 發表於 2022-12-01
Go

在國外的播客節目 Go Time #100 中,Rob Pike 和 Robert Griesemer(Go 的兩位創始人)和主持人 Jerod Santo 討論了 Go 語言的成功緣由和一些思考。

如果你想創造一門成功的程式語言,向已經做到的人學習是非常有價值的。

歡迎對 Go 感興趣的小夥伴一起圍觀!

0. 說明

Rob Pike(下稱:Rob)將 Go 的成功歸為了 5 個方面,在主持人 @Jerod Santo 的分享下形成了這篇《5 things Rob Pike attributes Go's success to[1]》文章,與播客的內容相對應。

目錄如下:

  • 他們寫了一份正式的規範。
  • 他們吸引了殺手級應用。
  • 他們啟動了一個開源社群。
  • 他們使語言難以改變。
  • 他們堅持使用他們相信的功能。

1. 他們寫了一份正式的規範

在介紹 Go 專案的起源時,Rob:

" 這就是規範發生的時候。是的,幾個星期。所以我們真的開始了六個月左右的頭腦風暴和近似塑造。

我們做的第一件重要的事情——也許是我們做的第一件重要的事情 —— 是我們編寫了語言的正式規範,我認為這是專案成功的關鍵部分

其中最重要的事情之一是 Ian Taylor 也在 Google,看到了規範,並決定為它編寫一個編譯器。

有一天他走進我們的辦公室說:“哦,順便說一句,我已經為你的語言編寫了一個編譯器。” 那對我們來說是一個了不起的時刻。

理所當然,他成為了 Go團隊的一員,現在仍在研究 Go。"

主持人:“該規範最初引起了 Ian Lance Taylor 等工程師同事的興趣”。

2. 他們吸引了殺手級應用

不幸的是,Rob 並沒有說明他們早期是如何吸引 Docker 的。我猜,透過使語言……對程式設計師有吸引力?🤷‍♂️

Rob“ 是的,Docker 是我們的殺手級應用程式,因為它是用 Go 編寫的,執行良好,並且成為現在所謂的雲端計算的核心……我們過去只稱其為系統程式設計或伺服器。

其中一項關鍵技術是用 Go 編寫的,這一事實證明了該語言對很多人的目的是正確的……而且我認為它實際上是一種非常好的語言。

這正是我們在將語言放在一起時正在考慮的事情,儘管我們自己並沒有這樣做。Kubernetes 是另外出現的,其誕生來自谷歌。但是,擁有用你的語言編寫的重要軟體是用一種語言取得成功的一個非常重要的部分

如果什麼都沒有寫,那麼語言有多好並不重要。”

3. 他們啟動了一個開源社群

Rob 坦率地談到了他們在開源世界中面臨的挑戰,這令人耳目一新。

Rob" 我確實認為團隊並沒有真正準備好與開源社群互動以及這意味著什麼。Ian 是我們當中唯一一個在開源世界中花費大量時間的人,他所做的超出了他在社群工作中應有的份額。

我們花了很長時間才理解成為開源社群的一部分意味著什麼,擁有一個基本上由公司支付的專案,但有很多開源貢獻者......我們實際上有很多很棒的開源發展很早就發生了。Windows 的移植完全由外部貢獻者完成,這太棒了……社群的投入至關重要。

我認為有時人們認為谷歌控制它太多,這是他們的意見,但我不同意;我認為他們低估了團隊對開源社群所說的話、閱讀所有問題、處理得很好……有時不是很好,但最終它們都得到了修復。

當有成千上萬的人使用你的程式語言時,這是一件非常具有挑戰性的事情,而現在它被認為是世界上數百萬的 Go 程式設計師。他們對這件事都有自己的看法,以及如何傾聽,但也要確保你保持專案的靈魂正確 —— 我認為沒有任何簡單的答案。

我認為很多人認為這是微不足道的,你只是接受了每個人都想要的東西......但是你不會有 Go,你會擁有完全不同的東西。這真的很棘手,這是一個非常困難的平衡行為。"

4. 他們使語言難以改變

這個一開始有點違反直覺。通常對於軟體,延展性是一種美德,而僵化則是一種詛咒。然而,Rob 很好地解釋了為什麼不這麼做,對於像 Go 這樣的程式語言是多麼的重要。

Rob“好吧,我們很難改變。我們特意為 Go 1 寫下了我們承諾不會改變任何東西。這對語言的成功至關重要,因為它使企業能夠相信我們正在做的、依賴我們的 Go,並不會破壞他們的東西……這使得做出改變變得更加困難。我認為很多人不欣賞我們對這份合同的熱情相信。

我們沒有破壞人們的程式,儘管它現在是一個有十年曆史的專案。這只是一個令人難以置信的負擔,但讓我們到達現在的位置至關重要 ”

煎魚:“這裡指的是 Go1 相容性保障,產生了很大的意義。

5. 他們堅持使用他們相信的功能

當 Jon Calhoun 詢問社群反饋以及團隊對變革的抵制如何與之抗衡時。

Rob:"Go 的某些功能對其成功很重要,但人們並不喜歡,我們對此非常直言不諱

我認為您提到的未使用變數的編譯錯誤就是其中之一。這很煩人 —— 你忘記刪除一個未使用的變數,你的程式就會無法編譯。但對我們來說,這是我們試圖講述的故事的一部分,也就是:編寫一種儘可能保證更好程式碼質量的語言,即使我們無法阻止你編寫糟糕的程式碼……但我們可以確保不會讓你的構建速度變慢或程式碼更難維護的事情發生。

我認為真正讓人們發瘋的是:你不允許匯入你不使用的庫。這對我們來說非常重要,因為我們花了很多時間用大量二進位制檔案進行緩慢構建,確保程式的依賴項正是您需要的,僅此而已;這對我們來說非常重要,但對很多人來說,每次你進行編輯並刪除列印語句或其他東西時,編譯器都會說“你沒有使用這個庫。我不會再繼續編譯你了。”

然後 Brad 寫了一個叫做 goimports 的東西,它是 gofmt 的一個變種,可以為你管理匯入,這幾乎消除了這類抱怨。

通常情況下,自動化可以解決很多抱怨。"

推薦閱讀

  • goto 語句讓 Go 程式碼變成義大利麵條?
  • 太瘋狂了,Go 程式說 nil 不是 nil...

參考資料

[1]

5 things Rob Pike attributes Go's success to:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024420/viewspace-2926178/,如需轉載,請註明出處,否則將追究法律責任。