再過4年C語言就50歲了,這麼老的程式語言怎麼還沒有過時?
再過四年,C語言將迎來它的 50 歲生日,同樣進行週年慶的還有 PL/M和Prolog。不過,C語言至今仍然非常受歡迎,它在幾乎所有程式語言中的受歡迎程度,始終排在前十名。

image.png
大多數作業系統的核心(包括 Windows,MAC,Linux,IOS 和 Android 等)都主要由使用C語言實現。此外,python 的 CPython 直譯器,perl,ruby,差不多一半的 R 語言,以及 mysql 的 MysAm 程式碼,甚至 java 的第一個編譯器都是使用C語言編寫的。

9693047-4e3847865e1a0b6c.png
幾個月前,新的 C語言標準——C18 獲得批准,只要 198 法郎(瑞士貨幣單位)就可以購買 ISO/IEC 9899:2018標準,共520頁。當然,也可以在 openstd 上免費檢視該標準的最終草案。
不過,可能只有開發C語言編譯器的人,或者對編譯器非常感興趣的人才會去了解吧,哈哈。

image.png
C18 獲得批准
新的C語言標準 C18 並沒有新增什麼新功能,更多的只是修復,所以它在很大程度上可以說是 C17 的延續。對C語言最後一個主要更改是在 C11 中,包括新增對變長陣列、多執行緒、更好的 Unicode、匿名結構體和聯合體等的支援。
C語言和C++打了個平手
C++ 在 C語言的領域中取得一些進展,特別是自從 C++11 中增加了移動語義,如果能夠正確使用該語法,在處理指向大物件的指標時,C++能以更小的開銷,帶來更好的效能,並且C++也能夠在傳統的嵌入式C語言領域使用。

image.png
C語言和C++打了個平手
但是,C++程式程式碼編譯後通常還是會比C語言的大一點,因為C++增加了異常處理,以及內聯模板等C語言沒有的機制。例如在 Visual C++ 2017 的 release 模式編譯下面這段C++程式碼:
最終得到的 exe 可執行檔案的大小達到 10752 位元組。再來編譯相同功能的 C語言程式碼:
得到的 exe 可執行檔案大小為 9216 位元組,只有 C++ 程式的 85%。這裡的差別還不是特別大,但是可以肯定的是,使用C++程式設計時,一旦加入了其他類,它與C語言程式大小的差異會越來越大。

image.png
程式碼大小非常重要,因為物聯網(IOT)裝置的數量越來越多,微控制器的使用也越來越多,要知道這些微控制器的 RAM 和 ROM 通常都是千位元組級別的。所以在嵌入式領域,C語言在2005年至2018年期間獲得的市場份額實際上是有所提升的。
C語言是程式設計界的通用語言
就像現實生活中,英語是世界是的通用語言一樣,C語言是程式語言界的通用語言。許多其他程式語言編譯器輸出的其實是 C 語言程式碼,由C語言編譯器進一步生成可執行程式。這不難理解,因為C語言是最低級別的可移植語言。(唯一更低級別的組合語言與 CPU 緊密相關,不方便移植。)
Github 專案頁面上列出了大約 60 個開源編譯器,一小部分是 C++ 的,但是C語言佔絕對的主導地位。

image.png
使用C語言提升效率
python 是如今最流行的程式語言之一,但是因為它是解釋型程式語言,同時也受它的動態變數的影響,所以 python 程式的執行效率一直是一個痛點。使用過 python 進行大資料處理的朋友應該知道 numpy、scipy 等庫可以提升效率,而 numpy 庫就是由 C語言實現的。python 的標準實現是 CPython,它的主要庫也是由 C語言(少許C++)實現的。
C語言是“九陽神功”
C語言可能不是每個程式設計初學者想學的第一程式語言,但是作為第二、第三程式語言,C語言一直很流行。我把它看做程式設計界的“九陽神功”,學會C語言後,再學其他程式語言都如有神助。

image.png
小結
至少在底層硬體裝置驅動層,C語言還未逢對手。另外在作業系統核心開發中,C語言也幾乎是唯一選擇,特別是在 Linux 上,C語言還將存在很長一段時間。
如今,儘管 Go 語言和 Rust 的呼聲很高,但是當超過一半活躍的 Web、 伺服器執行的是 Apache 和 nginx,它們都是C語言編寫的,如今已經存在近 50 年了。