自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 哪里沒有做好?Rob Pike 深刻反思了

開發(fā) 前端
從歷史背景來看,在 Go 誕生的那個年代,并發(fā)編程是一個比較新穎的理念。許多其他編程語言、論文甚至?xí)紝戇^關(guān)于并發(fā)編程的內(nèi)容。并發(fā)編程還沒有成為主流思想。

今天這篇將會繼續(xù)延續(xù)前文,一起深入探究 Go 做錯、失敗的地方在哪。學(xué)習(xí)前人的經(jīng)驗。

沒有引導(dǎo)好并發(fā)理念

從歷史背景來看,在 Go 誕生的那個年代,并發(fā)編程是一個比較新穎的理念。許多其他編程語言、論文甚至?xí)紝戇^關(guān)于并發(fā)編程的內(nèi)容。并發(fā)編程還沒有成為主流思想。

Go 團隊發(fā)明了 “goroutine” 這個詞,Go 讓協(xié)程的使用變得非常簡單。也正因為有了并發(fā),讓這一切看起來像是一種新鮮的事物。

聽起來都很美妙。但是,Go 做錯了什么?

rob 認(rèn)為:Go 團隊在并發(fā)上,缺乏對使用 Go 的開發(fā)者進行并發(fā)編程的指導(dǎo)。認(rèn)為這是重大錯誤。

為此 Go 團隊整體上花了非常多的時間做教育和宣導(dǎo),來澄清并行和并發(fā)之間的區(qū)別。

這一現(xiàn)象,直到 2012 年在技術(shù)大會上做了以下分享:

圖片圖片

Concurrency is not Parallelism by Rob Pike[1]

自此,“并發(fā)不是并行” 這句 Go 哲學(xué)用語流行了起來。一直到現(xiàn)在。

編譯器有些困擾

早期的 Go 編譯器是用 C 編寫的。對社區(qū)里的開發(fā)者造成一定的困擾。

普遍上正確的方式是使用 LLVM 或類似的工具包,或者用 Go 本身編寫編譯器。這被稱為自托管或自舉。

圖片圖片

The Go compiler architecture post Go 1.5

后面 rsc 加入后寫了個工具,半自動地將編譯器從 C 翻譯為 Go。再到后面(現(xiàn)在)絕大部分都是 Go 編寫的了。

編譯器的正式完善,Go 團隊一開始優(yōu)先級是放的比較低的。只是 ken 用 C 快速寫了個 plan9 風(fēng)格的編譯器。直至后面 Go 核心相對穩(wěn)定,也有了新的人員進入后才逐步改變。

有的同學(xué)看到這,可能在想。這有什么錯誤的?rob 的解釋是:有些人對這一選擇感到不快,但這是我們當(dāng)時最正確的選擇。

項目管理沒做好

這里特指的是開源社區(qū)。Go 團隊一開始就知道,Go 如果希望成功,必須要是一個開源項目。

但是 Go 團隊向開源的過渡的不是很順利,也比較缺乏經(jīng)驗。花費了大量的時間與社區(qū)溝通、互動、討論。

最終花了很長時間才了解轉(zhuǎn)為開放源代碼項目的影響,以及如何進行管理這個項目。

另外,Go 項目曾使用過 4 種不同的內(nèi)容管理系統(tǒng):SVN、Perforce、Mercurial 和 Git。Russ 做了一項艱巨的工作,讓所有的歷史都得以保留,這非常有價值。

包管理做的不太好

開發(fā) Go 軟件包管理的過程并不順利。

嚴(yán)謹(jǐn)來講,Go 本身的軟件包設(shè)計非常出色,但包管理和過程不太好。

主要分為以下兩點:

1、沒有使用包管理的經(jīng)驗:早期 Go 核心團隊的成員都很熟悉 Google 的工作方式,即使用 monorepo 和每個人都在進行構(gòu)建。但是,我們在使用軟件包管理器沒有足夠的經(jīng)驗,軟件包版本眾多,解決依賴關(guān)系圖的問題也非常困難。

2、與社區(qū)的合作不太成功:讓社區(qū)參與幫助解決依賴管理問題的初衷是好的,但當(dāng)最終設(shè)計出來時,即使有大量的文檔和關(guān)于理論的文章,社區(qū)中的許多人還是覺得被輕視了。

Go 團隊認(rèn)為這次失敗給團隊上了一課,讓他們知道如何真正與社區(qū)互動,并且自此取得了很大的進步。

現(xiàn)在包模塊的事情已經(jīng)塵埃落定,新出現(xiàn)的設(shè)計在技術(shù)上非常出色,而且似乎對大多數(shù)用戶來說都很好用。只是時間太長,道路崎嶇。

本煎魚表示,這次包管理的社區(qū)和官方的斗爭事件,也成為了 Go 團隊在社區(qū)里顯著的黑料,這么多年了也一直被記著。反復(fù)被人提起。

文檔和示例沒寫好

前期沒有做好的事情是文檔。Go 團隊寫了很多文檔,并認(rèn)為自己做得很好,但很快就發(fā)現(xiàn),社區(qū)需要的文檔水平與團隊的預(yù)期不同。

原先的文檔,即使是最簡單的功能,我們也缺少示例。原以為只要說出某個功能的作用就可以了,我們花了很長時間才認(rèn)識到,展示如何使用這些功能才更有價值。

Executable examplesExecutable examples

劃重點,要有例子!

圖片圖片

后面這些問題都已經(jīng)解決,現(xiàn)在的文檔中有很多示例,可以在瀏覽器上直接運行這些代碼片段。

總結(jié)

在 rob 對 Go 過去那么多年做回顧時,我們能夠發(fā)現(xiàn)無論是做得好,做的不好,都不是單純一點就能夠涵蓋的。

在本篇文章中,我認(rèn)為更多的是 Go 團隊的成長過程中,一開始不懂,后面慢慢才懂的事情。我們可以以此吸取好的地方,爭取站在大佬的肩膀上。

最后 rob 也再次強調(diào)了,Google 對 Go 的支持慷慨得令人難以置信,Google 并不制定議程。社區(qū)的參與度要高得多。核心 Go 團隊由 Google 支付報酬,但他們是獨立的。

參考資料

[1]Concurrency is not Parallelism by Rob Pike: https://www.youtube.com/watch?v=oV9rvDllKEg

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2014-07-09 13:18:55

編程谷歌

2012-08-20 09:53:48

編程編程建議程序員

2015-05-07 13:38:15

2023-11-13 16:09:09

2024-01-03 15:09:21

云原生Go語言

2023-10-04 00:18:00

云原生Go語言

2020-03-09 15:11:44

微盟安全態(tài)勢度量網(wǎng)絡(luò)安全

2021-02-23 08:58:13

Go語言變量

2021-09-01 18:38:59

Goselectdefault

2024-11-06 09:23:32

2024-01-08 08:23:07

Go語言代碼

2022-07-11 12:37:15

安全運營網(wǎng)絡(luò)攻擊

2015-06-11 11:19:35

2011-10-14 10:27:04

OpenFlow

2017-03-15 08:06:47

谷歌谷歌學(xué)術(shù)

2015-06-01 15:06:45

攜程數(shù)據(jù)庫災(zāi)備

2021-11-17 07:44:29

React 前端 組件

2021-12-13 20:09:33

GoElasticsearJava

2016-09-27 21:25:08

Go語言Ken Thompso

2023-11-03 07:47:12

機器資源大模型:
點贊
收藏

51CTO技術(shù)棧公眾號