<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    C語言會過時嗎?為什么?

    • 發布:C++培訓
    • 來源:C++資訊
    • 時間:2020-12-04 15:24

    評價任何一門編程語言,都是招人罵的。永遠是這樣。就像是春寒料峭的季節,街上穿棉襖和穿單衣的擦肩而過,雙方一定是同時在心里出現了兩個字:“傻逼!”這個在心理學上有個專業的名字:叫做“二逼”現象!

    不過對于C語言會不會過時這個問題對很多剛剛踏入程序猿這個行業的新手至關重要。因為他們有深深的擔憂,萬一C語言就像Fortran那樣過時了怎么辦?

    就在5月,時隔5年,C語言再次領先Java,榮登TIOBE編程語言排行榜第一!排名前十的分別是哪些一起來看一下:

    C,Java,Python,C++,C#,Visual Basic.NET,JavaScript,PHP,SQL和R。

    有沒有發現亮點?沒錯, 第一易主了,C 語言反超了 Java 。要知道,C 語言上次第一還是在 5 年前,是什么原因讓其“東山再起”了呢?

    對所有的編程語言,他們的最后的目的其實就是兩種:提高硬件的運行效率和提高程序員的開發效率。

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

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

    C語言自詡的“相信程序員”都是漂亮的說辭,它的唯一目的就是快,要么飛速的運行,要么飛速的崩潰。C語言只關心程序飛的高不高,不關心程序猿飛的累不累。就是這樣!

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

    現在回答兩個最普遍的問題:硬件這么便宜了,有必要讓軟件更快嗎?有這種疑問的人大部分都是網吧的固定客戶,他們理解的計算機只在電腦城,他們理解的計算只是游戲和播放硬盤中的小電影。不要玩個游戲開個掛就樂得不行不行的,別忘了還有全實景仿真,還有3D渲染,還有自動駕駛。

    人在開車的時候,每秒要收集60個不同的物體,然后根據這60個物體的不同組合和反映來做20個最重要的決定。然后從這20多個決定中選一個執行。所以就算用上最快的硬件,自動駕駛現在還不敢說能像人那樣開車。就算是自動駕駛成功了,下一步還要自動飛行呢?因為我們老早就預言了:你咋不上天呢!

    所以說:計算速度永遠是不夠的!因為新的應用會越來越復雜,越來也實時。對了!我還忘了一個更重要的限制:計算的能耗!NASA飛行器上的CPU最多就是32位的,說出來你可能不信,國際空間站上沒有一個CPU是64位的,我猜一個最主要的原因是航天員不愛看硬盤小電影吧。

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

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

    那為什么C語言還下降這么多呢?很簡單,有些任務本身就不是C語言的。我上學的時候還用C語言編過窗口界面呢?然后很快微軟的人就推出了MFC,就是一大堆宏把底層的C windowAPI包裝了起來。

    再后來這個技術也過時了。因為微軟的人認識到,帶有窗口的應用程序說到底不是C語言的本職工作,再這么一層一層包下去就有露餡的危險,于是他們發明了一個全新的語言C#來負責這個任務。

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

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

    最后說點閑話,C++不會淘汰C語言。有了對象后你會發現再簡樸的對象也耗費資源,而且有了對象以后,總是不由自主的去想繼承這個事,一但繼承實現了,你會發現繼承帶來的麻煩遠超過你的想象。Java的發明人James被問到如果可以從新設計Java語言的話,第一個要做什么事?他說:“去掉對象”!作為一個已婚,有兩個孩子的程序猿,我感同身受。如果大家感興趣,我可以再寫一個博客,聊聊C++和C的真實區別所在。

    如果你看到這里,還什么都沒記住。那就只記住一點:沒人能預測未來。如果再有人對你說C語言已經過時了,最好自己思考一下,能求真最好,如果不能,至少要做到存疑。

    版權聲明:轉載文章來自公開網絡,版權歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系刪除或授權事宜。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C開發單片機為什么用全局變量形式?
    下一篇:C語言如何實現拷貝圖片?

    C語言宏定義的幾種使用方法

    C與C++內存管理避坑指南

    C/C++代碼規范注釋有哪些講究?

    C語言中,全局變量濫用的后果竟如此嚴重?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>