你可能不會到處看到 C 程式語言,但它卻無所不在。當你啟動汽車時,汽車主機板很可能就是用 C 語言與各個組件溝通的。當你使用手機時,無論是 iOS 還是 Android 系統,作業系統的核心都是用 C 語言寫的。 你不能忽視 C 語言.

好吧,這個雙關語有點爛。但是字母 C 的由來是什麼呢? C 程式語言的出現徹底改變了世界。但為什麼它會被命名為 C 呢?
快速連結
很久很久以前,在貝爾實驗室…
傑出人才和巨額預算

要回答這個問題,我們需要回到過去,看看位於新澤西州一座規模龐大卻又略顯簡陋的建築。這棟建築就是貝爾實驗室。它由亞歷山大·格拉漢姆·貝爾(這個名字聽起來是不是很耳熟?)創立,當時隸屬於AT&T公司——實際上,AT&T是一家政府支持的壟斷企業——貝爾實驗室擁有雄厚的預算,並享有充分的自由去進行實驗和探索各種想法。
這種非侵入式方法促成了晶體管(這也是為什麼電腦不再像以前那樣體積龐大)、雷射和太陽能電池等諸多發明的誕生。 C 程式語言也是傳奇的貝爾實驗室的傑作。但在 C 語言出現之前,還有 B 語言。
有一種B語言
B 代表更好的 BCPL

1969年,貝爾實驗室一位才華橫溢、特立獨行的研究員肯·湯普森正在開發一個名為Multics的龐大而複雜的作業系統專案。貝爾實驗室終止Multics專案後,湯普森有了一些空閒時間,同時也遇到了一個非常具體的問題:他想玩一款她編寫的遊戲,名為 太空旅行 在一台老舊、佈滿灰塵的 DEC PDP-7 電腦上,它被放置在走廊上。

PDP-7 是圖片在右側。即使以 20 世紀 60 年代的標準來看,它也已經過時了。它的記憶體非常小(大約 8 KB)。為了在 PDP-7 上運行他的遊戲,湯普森從零開始建立了一個新的作業系統。這就是 Unix 的誕生。然而,用一種程式語言編寫 Unix 系統並非易事。 彙編程式碼 (那種用0和1與機器溝通的原始語言)簡直是一場惡夢。湯普森需要一種高階語言,一種更接近人類邏輯的語言。
當時,相關的高階程式語言是BCPL(Basic組合程式語言)。 BCPL對於PDP-7的有限硬體來說過於龐大,因此湯普森從BCPL中提取了「Basic」一詞,剝離了其核心要素,創造了一種新的語言。他將這種新語言命名為B語言。它速度快、簡單易用,是邁向現代程式設計的第一步。

然而,B語言最終還是難逃厄運。它在PDP-7上運作良好,但當貝爾實驗室升級到更先進的PDP-11時,像B這樣類型未指定的語言就顯得力不從心了。它效率低下,使得昂貴的新型PDP-11運行速度遠低於其應有的水平。
C 變成了新的 B
B 升職了。

這就引出了湯普森的摯友兼夥伴丹尼斯·里奇。里奇意識到,如果Unix想要在新機器上繼續運行,它所使用的程式語言就必須與時俱進——於是他花了兩年時間開發B語言來改進它。
他的創新之處在於引進了類型系統。他創建了字元類型(char)和整數類型(int)。現在,程式設計師可以告訴電腦一個方框代表一個字符,從而避免浪費額外的空間。這使得程式對機器更加友善。

一段時間裡,里奇和湯普森只是簡單地將這個計畫稱為「新B語言」。但隨著這種語言日益普及和發展,他們意識到它應該擁有自己的名稱。由於它是B語言的繼承者,他們便選取了字母表中的下一個字母,並將其命名為C。
1973年,里奇和湯普森用C語言重寫了Unix作業系統的核心代碼。在此之前,作業系統一直都是用組合語言寫的,因為大家都認為高階語言速度太慢。 C語言的出現證明了所有人的看法都是錯的。它速度快、程式碼簡潔,而且最重要的是,它具有良好的可移植性。
然後D來了
不然呢?

到了 20 世紀 70 年代末,C 語言無疑是軟體界的王者。但隨著軟體變得越來越複雜,C 語言也開始顯露出疲態。貝爾實驗室的另一位研究員比雅尼·斯特勞斯特魯普 (Bjarne Stroustrup) 欣賞 C 語言的運行速度,但他希望引入一個名為「物件導向程式設計」的概念。簡單來說,他希望允許程式設計師收集資料並登入「物件」中,例如具有已知使用者名稱和密碼的「使用者」物件。

當斯特勞斯特魯普的時代來臨的時候(請看左邊他的辦公室。既然已經為他的發明命名了,那麼下一步合乎邏輯的選擇應該是 D。但貝爾實驗室的人喜歡玩文字遊戲。於是,斯特勞斯特羅普的同事馬斯凱蒂建議用 C++。至少在他們看來,這真是神來之筆。這個名字暗示著這門語言是在 C 的基礎上增加了一個「1」。 C 是 但更好.
這個名字的選擇如此吸引人,以至於字母表中的 D 位置空置了近二十年。 C++ 成為了從電玩遊戲到網頁瀏覽器等各領域的標準,世界也隨之發展。如果你不知道如何在 C 語言中將一個數字加一,你需要使用一個特殊的指令: ++如果你有一個變數 x 她寫道 x++它將成為 x + 1.
D 語言已經存在了。
但它卻在幾十年後才出現。

直到 2001 年,資深交換機工程師沃爾特·布萊特才最終決定認領這個頭銜。布萊特多年來一直致力於建立 C++ 工具,但他對這種語言的「龐大」和「不安全」感到沮喪,因為它必須與 20 世紀 70 年代的遺留程式碼相容。
他想要C語言的強大功能和C++的組織特性,但又希望設計得現代、簡潔且穩定可靠。於是,他創造了D程式語言。 D語言提供了更優秀的記憶體管理和安全特性,可以避免導致電腦藍屏死機的那些錯誤。
然而,儘管D語言取得了許多成就,它也面臨一個經典的難題。當D語言問世時,世界早已超越了它。企業都在使用Java和C#,而整個產業仍然牢牢地佔據著C和C++的主導地位。幾年後,一種名為Rust的語言橫空出世,它非常重視記憶體完整性(與D語言的原則相同),並以D語言從未企及的方式吸引了整個科技界的目光——這實際上使D語言變得無關緊要。
如今,D 語言已成為備受推崇的專業語言。像 Netflix 和 eBay 這樣的公司已經在使用它來處理特定的高效能任務。它是一種非常優秀的語言,但它從未成為主流語言。
是否存在一種A語言?
是的,但是……也不完全是。
好的。現在我們知道C之所以是C,是因為它源自於B。但是,在B之前是否存在一種A語言呢?答案是肯定的,但並非你想的那樣。你看,在這些語言之前並沒有正式的A語言。沒錯,C之所以成為C,是因為它出現在B之後。但B之所以成為B,是因為它是BCPL的首字母,而不是因為它出現在A之後。

然而,如果我們正確地追溯其發展脈絡,故事要從貝爾實驗室之前說起。早在B或C出現之前,就已經有了ALGOL。 ALGOL是演算法語言(Algorithmic Language)的縮寫,誕生於1958年。它並非出自一人之手,而是由一群歐美科學家組成的委員會共同研發,他們希望找到一種通用的數學運算描述方法。如果我們要找現代數學符號的鼻祖——金字塔頂端的真正「A」——那就是ALGOL。
一種名為 CPL(組合程式語言)的語言是基於 ALGOL 的想法而創建的,但它過於複雜——對於當時的機器來說過於複雜。這促成了 CPL 的「基礎」版本——BCPL 的誕生。而我們的貝爾實驗室故事也因此開始。
如今到了2026年,我們仍然生活在C語言時代。即使是像Python或JavaScript這樣時髦的新語言,通常也是由C語言編寫的程式來解釋執行的。 C語言仍然是基礎。它誕生於新澤西州的一個實驗室,最初是為了幫助人們在一臺本質上是巨型計算器的電腦上玩太空遊戲。










