C語言學習必看 | C語言永遠不過時,真的嗎?

對于C語言,我們理工科或從事開發(fā)的人,可謂有一種特殊的情結,被指針數組折磨的廢寢忘食,還得靠計算機等級證書,學了這么多年之后,尤其對于從事JAVA、PHP開發(fā)的小伙伴而言,C仿佛真的沒用,已經跟不上時代技術的發(fā)展了,早就過時了,這是真的嗎?

 

C語言把硬件的運行效率壓縮到了極致

 

對所有的編程語言,目的其實就是兩種:提高硬件的運行效率和提高程序員的開發(fā)效率。遺憾的是,這兩點是不可能并存的!你只能選一樣。在提高硬件的運行效率這一方面,C語言沒有競爭者!舉個簡單的例子,實現一個列表,C語言用數組int a[3],經過編譯以后變成了(基地址+偏移量)的方式。對于計算機來說,沒有運算比加法更快,沒有任何一種方法比(基地址+偏移量)的存取方法更快。

 

C語言易用性和安全性的缺失

 

C語言已經把硬件的運行效率壓縮到了極致,這種設計思想帶來的問題就是易用性和安全性的缺失。例如,你不能在數組中混合保存不同的類型,否則編譯器沒有辦法計算正確的偏移量。同時C語言對于錯誤的偏移量也不聞不問,這就是C語言中臭名昭著的越界問題。

 

現在來看看那些非C的語言,他們的長處都在于提高程序員的開發(fā)效率上?;蛘咧С謩討B(tài)的列表,或者支持安全的列表。但是加入任何的中間層,加入任何的安全檢驗,它不可能比(基地址+偏移量+無檢驗)的方式更快。這個世界上不存在“開發(fā)容易,運行快”的語言,開發(fā)容易畢竟來源于對底層的一層一層又一層的包裝。

 

C語言能被替代嗎?

 

我可以發(fā)明一種同樣快的語言,但是沒有C語言那么多的坑。想法是可以的,而且還真巧有這個語言,真巧它的名字叫D語言,真巧沒有太多的人用!這是因為一個基本的事實?,F在有太多,太多太多的C代碼,他們大部分都在正常工作,就像Linux, Window, MacOS,UnixVxworks。你沒有看錯,這些操作系統的內核都是C,我雖然不確定CWindow中所占的比例,但是我相信微軟的人不會傻到用C#去全部改寫一個操作系統的內核。你想讓這些人去用你的全新的語言,天真了!


 

而且有些代碼,我們根本就不能改!NASA一個簡單的5CPU飛控軟件編寫完畢后,要進行一種“全覆蓋”測試。如果CPU A壞了會發(fā)生什么?如果CPU AB壞了呢?如果CPU A,C壞了呢...?如果你愿意,你可以做個簡單的數學組合。測試完畢后,別說重寫,就算加個注釋都不行。因為主管payload的大媽會非常嚴肅的質問你,為什么你上報的東西數量增加了,但是質量沒有增加?你需要和她詳細的解釋:硬件和軟件是不同的,硬件是那種摸起來硬硬的東西,但是軟件不是那種摸起來軟軟的東西??粗髬尡梢牡难凵?,這個時候你會非常后悔自己手欠加入的哪一行注釋。你還別不當真,這個是NASA的真實故事。

 

無論是Java, c#還是python, 他們都有意避開提高硬件的運行效率這個問題,因為這個問題上沒辦法和C競爭,也無法撼動LinuxUnix,GNU tool這些已有C代碼的位置。剩下的就只是提高程序員的開發(fā)效率上大作文章。這對C語言是好事,把自己不善長的東西去掉,讓自己跑的更快!

 

伴隨著嵌入和實時系統的興起,AI,機器人,自動駕駛等。這些都是C語言的核心應用,而且在這種應用上面,C語言沒有競爭者。所以我感覺C語言會穩(wěn)定在自己核心的應用中,并開始逐步回升。

 

如果你看到這里,還什么都沒記住。那就只記住一點:沒人能預測未來。

 

全世界只需要五臺電腦 IBM創(chuàng)始人

 

640K內存足夠了 -微軟創(chuàng)始人

 

沒必要在家里用電腦-DEC創(chuàng)始人

 

結語沒有人可以預測未來,C語言過時與否,時間會給出最終的答案。但目前而言,隨著Linux、人工智能的應用日漸廣泛,C語言的作用仍不可小覷!

the end

評論(0)