引言
一直想做個技術分享的社區,讓我們每個人都有機會把自己學到的編程知識分享出來一起探討,于是借這次學弟學妹們的入學潮流,我的簡書賬號正式成立,不定期持續分享,歡迎大家的持續關注與深入交流。
編程是一件很有趣的事情,因為我們可以隨心地修改程序來調侃一段人生,亦或寫一串飽含詩意的代碼向心動已久的女生表白。
while(i.meet(u)) {
ourStory.begin();
}
那么就從很基礎也很長壽的 C 語言歷史開始講起吧。如果你是學弟學妹,那沒問題,這里正是一切的開始;如果你是學長學姐,學完 C 語言來這里聽聽故事,也不失有趣。
C語言的來歷
先來緬懷一位前輩,Dennis Ritchie —— C 語言之父和 Unix 之父,計算機及網絡技術的奠定者。Dennis Ritchie 于 1978 年出版的名著《C程序設計語言(The C Programming Language)》,推動了C語言的發展和普及,該數至今仍通過不斷再版廣泛傳播。書中用 "hello world" 為實例開始講解程序設計,也已經成為程序設計語言圖書的傳統。
Dennis Ritchie 于 1970 年前后和計算機科學家 Ken Thompson 在貝爾實驗室開發出來的 UNIX 操作系統起初是用無數據類型的 B 語言開發,計算機內大部分操作將數據作為整數對待(例如進行+、-、*、/操作),其余操作將作為一個復引用的內存地址。
下圖為一些早期的高級程式語言的誕生時間線,其中 ALGOL 60 是計算機發展史上首批產生的高級程式語言,標志著程序設計語言成為一門獨立的科學學科,并為后來軟件自動化及軟件可靠性的發展奠定了基礎。ALGOL 60 語言基礎上設計出了 CPL,CPL 基礎上設計出 BCPL,B 語言便是簡化 BCPL 后取首字母 B 命名而來。
由于 B 語言過于簡單以及數據無類型的弊端,Dennis Ritchie 和 Ken Thompson 在 B 語言的基礎上設計出了 C 語言,C 語言更加精煉、也更加接近硬件。之后的 UNIX 操作系統便用 C 語言重構,并一直用 C 語言編寫至今。
一個有趣的故事是,Ken Thompson 想寫個模擬在太陽系航行的電子游戲 Space Travel 玩,身邊只有一臺沒有操作系統的空閑機器 PDP-7,而游戲必須使用操作系統的一些功能,于是 Ken Thompson 開始著手用 B 語言為 PDP-7 開發一個操作系統,后來這個操作系統便命名為 UNIX。這個過程中吸引到了同樣酷愛 Space Travel 的 Dennis Ritchie,加入到了 Thompson 的開發項目中。Dennis Ritchie 的開發重心在改造 B 語言,結果誕生出了取 BCPL 語言第二個字母的新語言——C語言。
最后創造操作系統的快樂遠遠超出了玩 Space Travel 的初衷。
C語言的發展
從下圖可以看出 C 語言歷史上的幾個重要事件,首先是 C 語言于 1972 年在貝爾實驗室的誕生,1973 年 Dennis Ritchie 和 Ken Thompson 用 C 語言改寫 UNIX 操作系統,再到 1978 年 Dennis Ritchie 正式發布名著《The C Programming Language》,打下 C 語言發展的基石。接下來分別于1990年、1999年、2011年由國際標準化組織(ISO)和國際電工委員會(IEC)推動的 C88、C99、C11 標準,保持了 C 語言的活力,讓 C 語言不在歷史的潮流中消逝。
C語言的特點
誕生時的輝煌可以成就一個語言的開始,但能在歷史的潮流中不被淘汰也會要求這門語言持續發揚自身的優點,逐步克服自身的缺點。至今公開的最少
256 種編程語言中,C 語言便是在發揚自身的優點,克服自身的缺點的過程中穩排編程榜榜首前列。
以下便是 C 語言常見的幾個優點:
- 簡潔緊湊、靈活方便
- 運算符豐富
- 數據結構豐富
- 表達方式靈活實用
- 允許直接訪問物理地址,對硬件進行操作
- 生成目標代碼質量高,程序執行效率高
- 可移植性好
- 表達力強
而不足之處在于:
- 數據封裝性不好 -- 數據安全性有缺陷
- 語法限制不嚴格 -- 自由的代價
- 缺少支持代碼重構的語言結構 -- 面向過程的缺點
一個個字符,隨著敲擊鍵盤的噠噠聲,經由或是懵懂或是老練的程序員指尖的躍動,最終呈現為顯示器上一行行的代碼。它們就這樣,一行接一行隨著回車與換行不停的跳動。那,是眼前這個人悅動的靈魂,它一點一點、一行行慢慢的實現著屏幕前這個程序員的夢想,也一點點,一步步推動著時代的發展,社會的變遷。
- Hello,我是韓亦樂,現任本科軟工男一枚。軟件工程專業的一路學習中,我有很多感悟,也享受持續分享的過程。如果想了解更多或能及時收到我的最新文章,歡迎訂閱我的個人微信號:韓亦樂。我的簡書個人主頁中,有我的訂閱號二維碼和 Github 主頁地址;我的知乎主頁 中也會堅持產出,歡迎關注。
- 本文內部編號經由我的 Github 相關倉庫統一管理;本文可能發布在多個平臺但僅在上述倉庫中長期維護;本文同時采用【知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議】進行許可。