今天就跟大家聊聊有關(guān)C語言為什么不會(huì)過時(shí),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
評(píng)價(jià)任何一門編程語言,都是招人罵的。永遠(yuǎn)是這樣。就像是春寒料峭的季節(jié),街上穿棉襖和穿單衣的擦肩而過,雙方一定是同時(shí)在心里出現(xiàn)了兩個(gè)字:“傻逼!”這個(gè)在心理學(xué)上有個(gè)專業(yè)的名字:叫做“二逼”現(xiàn)象!
那我為啥還要做這個(gè)挨罵的事呢?但是我還是想系統(tǒng)的介紹一下這門語言,他的特點(diǎn),還有他的未來。這個(gè)問題對(duì)很多剛剛踏入程序猿這個(gè)行業(yè)的新手至關(guān)重要。因?yàn)樗麄冇猩钌畹膿?dān)憂,萬一C語言就像Fortran,perl語言那樣過時(shí)了怎么辦?
先上一個(gè)表,這個(gè)就是著名的TIOBE語言排行榜。目前它是一個(gè)最權(quán)威的一個(gè)語言流行度的排行榜,從這個(gè)排行榜上看,你會(huì)得到一個(gè)最直觀的結(jié)論。Java和C都在下降,而下降的部分被第三名以后的語言所瓜分。
對(duì)所有的編程語言,他們的最后的目的其實(shí)就是兩種:提高硬件的運(yùn)行效率和提高程序員的開發(fā)效率。
遺憾的是,這兩點(diǎn)是不可能并存的!你只能選一樣。在提高硬件的運(yùn)行效率這一方面,C語言沒有競(jìng)爭(zhēng)者!舉個(gè)簡(jiǎn)單的例子,實(shí)現(xiàn)一個(gè)列表,C語言用數(shù)組inta[3],經(jīng)過編譯以后變成了(基地址+偏移量)的方式。對(duì)于計(jì)算機(jī)來說,沒有運(yùn)算比加法更快,沒有任何一種方法比(基地址+偏移量)的存取方法更快。
這種設(shè)計(jì)思想帶來的問題就是易用性和安全性的缺失。例如,你不能在數(shù)組中混合保存不同的類型,否則編譯器沒有辦法計(jì)算正確的偏移量。同時(shí)C語言對(duì)于錯(cuò)誤的偏移量也不聞不問,這就是C語言中臭名昭著的越界問題。
C語言自詡的“相信程序員”都是漂亮的說辭,它的目的就是快,要么飛速的運(yùn)行,要么飛速的崩潰。C語言只關(guān)心程序飛的高不高,不關(guān)心程序猿飛的累不累。就是這樣!
現(xiàn)在來看看那些非C的語言,他們的長(zhǎng)處都在于提高程序員的開發(fā)效率上?;蛘咧С謩?dòng)態(tài)的列表,或者支持安全的列表。但是加入任何的中間層,加入任何的安全檢驗(yàn),它不可能比(基地址+偏移量+無檢驗(yàn))的方式更快。這個(gè)世界上不存在“開發(fā)容易,運(yùn)行快”的語言,開發(fā)容易畢竟來源于對(duì)底層的一層一層又一層的包裝。
現(xiàn)在回答兩個(gè)最普遍的問題:硬件這么便宜了,有必要讓軟件更快嗎?有這種疑問的人大部分都是網(wǎng)吧的固定客戶,他們理解的計(jì)算機(jī)只在電腦城,他們理解的計(jì)算只是游戲和播放硬盤中的小電影。不要玩?zhèn)€游戲開個(gè)掛就樂得不行不行的,別忘了還有全實(shí)景仿真,還有3D渲染,還有自動(dòng)駕駛。
人在開車的時(shí)候,每秒要收集60個(gè)不同的物體,然后根據(jù)這60個(gè)物體的不同組合和反映來做20個(gè)最重要的決定。然后從這20多個(gè)決定中選一個(gè)執(zhí)行。所以就算用上最快的硬件,自動(dòng)駕駛現(xiàn)在還不敢說能像人那樣開車。就算是自動(dòng)駕駛成功了,下一步還要自動(dòng)飛行呢?因?yàn)槲覀兝显缇皖A(yù)言了:你咋不上天呢!
所以說:計(jì)算速度永遠(yuǎn)是不夠的!因?yàn)樾碌膽?yīng)用會(huì)越來越復(fù)雜,越來也實(shí)時(shí)。對(duì)了!我還忘了一個(gè)更重要的限制:計(jì)算的能耗!NASA飛行器上的CPU最多就是32位的,說出來你可能不信,國(guó)際空間站上沒有一個(gè)CPU是64位的,我猜一個(gè)最主要的原因是航天員不愛看硬盤小電影吧。
我可以發(fā)明一種同樣快的語言,但是沒有C語言那么多的坑。想法是可以的,而且還真巧有這個(gè)語言,真巧它的名字叫D語言,真巧沒有太多的人用!這是因?yàn)橐粋€(gè)基本的事實(shí)?,F(xiàn)在有太多,太多太多的C代碼,他們大部分都在正常工作,就像Linux,Window,MacOS,Unix,Vxworks。你沒有看錯(cuò),這些操作系統(tǒng)的內(nèi)核都是C,我雖然不確定C在Window中所占的比例,但是我相信微軟的人不會(huì)傻到用C#去全部改寫一個(gè)操作系統(tǒng)的內(nèi)核。你想讓這些人去用你的全新的語言,這就不是“有點(diǎn)”很傻,很天真了!
而且有些代碼,我們根本就不能改!NASA一個(gè)簡(jiǎn)單的5個(gè)CPU飛控軟件編寫完畢后,要進(jìn)行一種“全覆蓋”測(cè)試。如果CPUA壞了會(huì)發(fā)生什么?如果CPUA,B壞了呢?如果CPUA,C壞了呢。。。。?如果你愿意,你可以做個(gè)簡(jiǎn)單的數(shù)學(xué)組合。測(cè)試完畢后,別說重寫,就算加個(gè)注釋都不行。因?yàn)橹鞴躳ayload的大媽會(huì)非常嚴(yán)肅的質(zhì)問你,為什么你上報(bào)的東西數(shù)量增加了,但是質(zhì)量沒有增加?你需要和她詳細(xì)的解釋:硬件和軟件是不同的,硬件是那種摸起來硬硬的東西,但是軟件不是那種摸起來軟軟的東西??粗髬尡梢牡难凵?,這個(gè)時(shí)候你會(huì)非常后悔自己手欠加入的哪一行注釋。你還別不當(dāng)真,這個(gè)是NASA的真實(shí)故事。
很簡(jiǎn)單,有些任務(wù)本身就不是C語言的。我上學(xué)的時(shí)候還用C語言編過窗口界面呢?然后很快微軟的人就推出了MFC,就是一大堆宏把底層的CwindowAPI包裝了起來。
再后來這個(gè)技術(shù)也過時(shí)了。因?yàn)槲④浀娜苏J(rèn)識(shí)到,帶有窗口的應(yīng)用程序說到底不是C語言的本職工作,再這么一層一層包下去就有露餡的危險(xiǎn),于是他們發(fā)明了一個(gè)全新的語言C#來負(fù)責(zé)這個(gè)任務(wù)。
Java也是這樣,突出網(wǎng)絡(luò),易用,安全,跨平臺(tái)。無論是Java,c#還是python,他們都有意避開提高硬件的運(yùn)行效率這個(gè)問題,因?yàn)檫@個(gè)問題上沒辦法和C競(jìng)爭(zhēng),也無法撼動(dòng)Linux,Unix,GNUtool這些已有C代碼的位置。剩下的就只是提高程序員的開發(fā)效率上大作文章。這對(duì)C語言是好事,把自己不善長(zhǎng)的東西去掉,讓自己跑的更快!
伴隨著嵌入和實(shí)時(shí)系統(tǒng)的興起,AI,機(jī)器人,自動(dòng)駕駛等。這些都是C語言的核心應(yīng)用,而且在這種應(yīng)用上面,C語言沒有競(jìng)爭(zhēng)者。所以我感覺C語言會(huì)穩(wěn)定在自己核心的應(yīng)用中,并開始逐步回升。
看完上述內(nèi)容,你們對(duì)C語言為什么不會(huì)過時(shí)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
標(biāo)題名稱:C語言為什么不會(huì)過時(shí)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://chinadenli.net/article44/dgjdee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站改版、面包屑導(dǎo)航、云服務(wù)器、App開發(fā)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容