- Go語言高級編程(第2版)
- 柴樹杉 曹春暉
- 810字
- 2025-08-07 17:56:08
1.1.1 來自貝爾實驗室特有基因
作為Go語言標志性的并發編程特性來自貝爾實驗室的Tony Hoare于1978年發表的鮮為外界所知的關于并發研究的基礎文獻:通信順序進程(communicating sequential processes,CSP)。在最初的CSP論文中,程序只是一組沒有中間共享狀態的并發運行的處理過程,它們之間使用通道進行通信和控制同步。Tony Hoare的CSP并發模型只是一種用于描述并發性基本概念的描述語言,并不是編寫可執行程序的通用編程語?言。
CSP并發模型最經典的實際應用是愛立信公司發明的Erlang編程語言。不過,在Erlang將CSP理論作為并發編程模型的同時,同樣來自貝爾實驗室的Rob Pike及其同事也在不斷嘗試將CSP并發模型引入當時新發明的編程語言中。他們嘗試在Newsqueak語言中支持CSP模式的并發編程。此后的Alef語言試圖將C語言改造為系統編程語言(Alef也是C語言之父Ritchie比較喜愛的編程語言),但是因為缺少垃圾收集機制而導致并發編程很痛苦(這也是繼承C語言手工管理內存的代價)。在Alef語言之后還有一款名為Limbo的編程語言,是運行在虛擬機中的腳本語言。Limbo語言是與Go語言最接近的祖先,它和Go語言有著最接近的語法。到設計Go語言時,Rob Pike在CSP并發編程模型的實踐中已經積累了20多年的經驗,關于Go語言并發編程的特性完全是信手拈來,新編程語言的到來也是水到渠?成。
圖1-2展示了Go語言代碼庫的早期開發日志(在Git中用git log --before={2008-03-03} --reverse
命令查看),由此可以看出Go語言最直接的演化歷?程。

圖1-2 Go語言開發日志
從早期提交的日志中可以看出,Go語言是從Ken Thompson發明的B語言、Dennis M. Ritchie發明的C語言逐步演化過來的,它先是C語言家族的成員,因此很多人將Go語言稱為21世紀的C語?言。
圖1-3給出的是Go語言中來自貝爾實驗室特有并發編程基因的演化過?程。

圖1-3 Go語言并發演化歷史
回顧貝爾實驗室開發編程語言的進程,從B語言、C語言到Newsqueak、Alef、Limbo,一路走來,Go語言繼承了來自貝爾實驗室的近半個世紀的軟件設計基因,終于完成了C語言革新的使命。縱觀近幾年的發展趨勢,Go語言已經成為云計算、云存儲時代甚至大語言模型時代最重要的基礎編程語?言。