Linux中國

C 語言發展簡史

下面是我對 布萊恩·克尼漢 Brian Kernighan 的採訪,他(與 丹尼斯·里奇 Dennis Ritchie )是《 C 程序設計語言 The C Programming Language 》一書的共同作者,我們談及了 C 語言及其 50 年的歷史。

兩位作者寫的最初的 C 語言編程指南,大約是在 1978 年

C 語言將在 2022 年滿 50 歲。然而,儘管它歷史悠久,在許多「流行編程語言」的調查中,C 語言仍然是「最常用」的編程語言之一。例如,你可以看看 TIOBE 指數,它追蹤不同編程語言的流行程度。許多 Linux 應用程序是用 C 語言編寫的,例如 GNOME 桌面。

我採訪了 布萊恩·克尼漢 Brian Kernighan ,以了解更多關於 C 語言及其歷史他(與 丹尼斯·里奇 Dennis Ritchie )是《 C 程序設計語言 The C Programming Language 》一書的共同作者。

C 語言是怎麼誕生的呢?

C 語言由一系列旨在進行系統編程的語言演變而來,系統編程就是編寫像編譯器、彙編器、編輯器以及最終的操作系統這樣的程序。麻省理工學院有一個與貝爾實驗室合作的 Multics 項目,它計劃用一種高級語言編寫系統的所有部分(這在 1965 年那時候是一個新想法)。他們打算使用 IBM 的 PL/1,但它非常複雜,而且承諾的編譯器也沒有及時交付。

在與一個叫做 EPL 的子集(由貝爾實驗室的 道格拉斯·麥克羅伊 Douglas McIlroy 設計)進行了短暫交流後,Multics 轉向了 BCPL,這是一個由劍橋的 Martin Richards 設計和實現的,更加簡單和乾淨的語言,我記得他當時正在麻省理工學院訪問。當 肯·湯普遜 Ken Thompson 開始研究後來的 Unix 時,他在 BCPL 的基礎上創造了一種更簡單的語言,他稱之為 B 語言。在 1969 年,他為搭載了第一個 Unix 原型系統的 PDP-7 計算機實現了這種語言。

BCPL 和 B 都是「無類型」語言。也就是說,它們只有一種數據類型,即整數。DEC 公司的 PDP-11 計算機大約在 1971 年投入使用,它搭載了第一個真正的 Unix 系統。PDP-11 支持幾種數據類型,特別是 8 位位元組和 16 位整數。因此,一種同樣支持幾種數據類型的語言是更好的選擇。這就是 C 語言的起源。

C 語言在貝爾實驗室和早期版本的 Unix 中是如何使用的呢?

C 語言最初只在 Unix 上使用,儘管過了一段時間,也有了用於其他機器和操作系統的 C 語言編譯器。大多數情況下,它被用於系統級的編程,涵蓋了相當多有趣的領域,還有很多用於管理 AT&T 電話網路運營的系統。

在貝爾實驗室用 C 語言編寫的最有趣的項目是什麼?

可以說,最有趣、最令人難忘、也是最重要的 C 語言程序就是 Unix 操作系統本身。1971 年 Unix 的第一個版本是用 PDP-11 彙編語言編寫的,但到了第四版,也就是 1973 年左右,我們用 C 語言重寫了它。這很關鍵,因為這意味著操作系統(和它所有的支持軟體)基本上可以通過重新編譯來移植到不同類型的計算機上。雖然在實踐中並沒有那麼簡單,但也相差不遠。

你與丹尼斯·里奇合著了《C 程序設計語言》一書。那本書是怎麼來的,你和丹尼斯又是如何在書中合作的呢?

我曾經寫過一本肯·湯普遜的 B 語言教程,幫助人們快速上手使用它。當 C 語言可用時,我將其升級為 C 語言的教程。過了一段時間,我說服了丹尼斯,讓他和我一起寫一本 C 語言的書。基本上,除了系統調用那章外,大部分的教程材料都是我寫的,而丹尼斯已經寫好了那個參考手冊,寫的非常棒。然後我們反覆修改,使教程部分更加流暢。參考手冊幾乎保持不變,因為它從一開始就寫得很好。這本書的格式是用 troff 格式器格式的,這是 Unix 上的許多工具之一,我做了大部分的格式化工作。

C 語言什麼時候成為了貝爾實驗室以外的其他程序員用於工作的東西呢?

我真的記不大清了,但我認為大概是在最初的五六年里,C 語言主要是跟著 Unix 一起發展的。隨著其他操作系統上的編譯器的發展,它開始蔓延到 Unix 以外的其他系統。我不記得我們是什麼時候意識到 C 和 Unix 產生了真正的影響,但應該是在 20 世紀 70 年代中後期。

為什麼 C 語言會成為如此有影響力的編程語言呢?

早期的主要原因是它與 Unix 的聯繫,Unix 在世界上迅速傳播。如果你使用 Unix,你就會用 C 語言來編程。後來,C 語言傳播到不一定運行 Unix 的計算機上,很大程度上是因為 Steve Johnson 編寫了可移植 C 語言編譯器。在工作站領域,比如 昇陽微系統 Sun Microsystems 、MIPS(後來成為 SGI)和其他公司,它們都是因為 Unix 和 C 語言的結合而獲得成功。IBM PC 出現得稍晚一些,大約在 1982 年。後來 C 語言成為 MS-DOS 和 Windows 下的標準編程語言之一。今天,大多數物聯網(IoT)設備會使用 C 語言。

在創建約 50 年後的今天,C 仍然是一種流行的編程語言。為什麼它仍然如此受歡迎呢?

我認為 C 語言在效率和表現力這兩個方面達到了一個平衡點。在早期,效率真的很重要,因為與我們今天所使用的計算機相比,當時的計算機速度很慢、內存十分有限。C 語言是非常高效的,因為它可以被編譯成高效的機器代碼,而且它也足夠簡單,人們很容易學會如何編譯它。同時,它還具有很強的表現力,易於編寫,並且結構緊湊。至少在我謙虛而正確的觀點中,沒有任何一種語言能很好地達到這種境界。

多年來,C 語言的發展和變化如何?

我想,C 語言的發展是適度的,但我並沒有太注意 C 語言標準的發展。C 語言已經有足夠的改變了,80 年代寫的代碼需要做一些前置工作才能編譯,但這主要與誠實對待類型有關。比較新的功能,如複數,也許是有用的,但對我來說不是,所以我不能做出明智的評論。

哪些編程問題可以用C語言最容易解決?

嗯,對於任何事情來說,它都是一種很好的語言,但在今天,有了充足的內存和處理能力,大多數程序員都可以用 Python 這樣的語言來進行內存管理和處理其他更高級的結構。C 語言仍然是底層編程的一個很好的選擇,因為對於底層編程來說,充分利用 CPU 周期和每一個位元組仍然很重要。

C 語言影響了其他編程語言,包括 C++、Java、Go 和 Rust。你對這些編程語言有什麼看法?

幾乎每一種語言在某些方面都是對其前輩的反應。簡單點說,C++ 增加了控制信息訪問的機制,所以對於真正的大型程序來說,它比 C 更好。Java 是對 C++ 的複雜性的一種反應。Go 是對 C++ 的複雜性和 Java 的限制的一種反應。Rust 是對 C 語言(大概也是對 C++)中內存管理問題的一種嘗試,同時它接近了 C 語言的效率。

它們都帶來了某些積極的特性,但不知何故,沒有人能夠完全滿意,所以總是會有更多的語言,反過來對以前的語言做出反應。同時,老的語言,在大多數情況下,仍會繼續存在,因為它們的工作做得很好,而且有一個嵌入式的根據地,老的語言在裡面可以完美使用,而用新的東西來重新實現是不可行的。

感謝 Brian 為我們分享了 C 語言編程的偉大歷史!

via: https://opensource.com/article/22/3/how-c-programming-language-has-grown

作者:Jim Hall 選題:lkxed 譯者:lkxed 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國