在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言究竟會不會過時?

wFVr_Hardware_1 ? 來源:未知 ? 作者:胡薇 ? 2018-10-17 14:09 ? 次閱讀

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

那我為啥還要做這個挨罵的事呢?作為《C語言點滴》《drop of knowledge of C++》書籍的作者,《C語言新思維,第二版》的譯者。

我覺得我有責任系統的介紹一下這本語言,他的特點,還有他的未來。這個問題對很多剛剛踏入程序猿這個行業的新手至關重要。

因為他們有深深的擔憂,萬一C語言就像Fortran,perl語言那樣過時了怎么辦?

先上一個表,這個就是著名的TIOBE語言排行榜。

目前它是一個最權威的一個語言流行度的排行榜,從這個排行榜上看,你會得到一個最直觀的結論。

Java和C都在下降,而下降的部分被第三名以后的語言所瓜分。

(最新的TIOBE數據顯示Java和C分別以17.8%和15.37%排在前兩名)

每次C語言的排名上升,都會讓做硬件的朋友覺得是硬件的春天來了。。。

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

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

C語言已經把硬件的運行效率壓縮到了極致。這種設計思想帶來的問題就是易用性和安全性的缺失。例如,你不能在數組中混合保存不同的類型,否則編譯器沒有辦法計算正確的偏移量。同時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語言會穩定在自己核心的應用中,并開始逐步回升。

但是Java語言我個人不樂觀。小型和靈活性上,Python更勝一籌。一行python代碼后,你根本不知道自己還是不是duck類型?平臺領域,每個平臺都推出自己專屬的語言。Windows會繼續支持C#,蘋果偏愛Swift, Android推出Kotlin,Google用go。Java宣稱自己可以自由到每家做客,但是無論是到誰家,都會發現客廳里面坐著一個親兒子,這個時候自己這個干兒子多多少少有點尷尬。所以我猜測,最后Java會穩定在對跨平臺有嚴格要求的,大型非實時應用上。

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

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

全世界只需要五臺電腦 -IBM創始人

640K內存足夠了 -微軟創始人

沒必要在家里用電腦-DEC創始人

如果再有人對你說C語言已經過時了,最好自己思考一下,能求真最好,如果不能,至少要做到存疑。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140740
  • 匯編語言
    +關注

    關注

    14

    文章

    410

    瀏覽量

    36643

原文標題:為什么C語言不會過時?

文章出處:【微信號:Hardware_10W,微信公眾號:硬件十萬個為什么】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如果主節點使用AD2433,從節點使用AD2428,會不會有什么風險點?

    如果主節點使用AD2433,從節點使用AD2428,會不會有什么風險點?晚上找不到AD2433的數據手冊,感謝各位把遇到的問題提前預警一下。 萬分感謝!
    發表于 04-15 07:09

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?981次閱讀

    TPA3116D2的輸入增益太大會不會造成輸出嘯叫?

    TPA3116D2(用于吉他設備)的輸入增益太大會不會造成輸出嘯叫(自激),因為我遇到把高低中頻三個調頻按鍵打到最大,打開BOOST,TPA3116D2輸出會有嘯叫(自激)。而其他輸出口沒有自激,只有TPA3116D2輸出會自激。
    發表于 10-25 07:22

    手機頻繁卸載和安裝軟件到底會不會影響手機性能

    我們想要知道頻繁的安裝APP會不會對手機造成傷害,就首先需要了解,頻繁的安裝和卸載主要是對那個硬件進行操作。
    的頭像 發表于 10-24 17:22 ?2.6w次閱讀

    TAS3151不使用MCLK會不會產生其他問題?

    我有看到TAS3151的規格書,裡面提到不需要MCLK訊號,可以支援3線輸入 請問不使用MCLK會不會產生其他問題,還是TAS3251內部會產生這一個訊號
    發表于 10-14 08:02

    TPA3118芯片發熱會不會導致輸出LC中的電感也會跟著發熱?

    TPA3118芯片發熱厲害,如果芯片發熱會不會導致輸出LC中的電感也會跟著發熱,輸出用的是15uH的電感和1uF電容
    發表于 10-12 07:46

    TAS5760M-Q1增益大于1會不會影響PA的功率控制?

    如下圖,PA輸出濾波器的頻率響應曲線,① 增益大于1會不會有問題?增益大于1會不會影響PA的功率控制?② 正常人聲范圍,20HZ-20KHZ,TI建議-3db截止頻率設置多少?
    發表于 09-30 07:55

    差分儀表運放的電阻電容混接會不會有問題?

    我的電路如上圖所示,輸入端由外部接入,不接時就是懸空。 1)兩個1M電阻用于輸入懸空時保證輸出為0附近; 2)電容用作濾波退藕。 請問電阻電容這么混接會不會有問題,例如振蕩啥的?(外部輸入信號為直流。)
    發表于 09-10 08:23

    運放輸出波形的峰峰值會不會超過供電電壓的幅值?

    運放輸出波形的峰峰值會不會超過供電電壓的幅值?
    發表于 09-06 07:25

    放大電路的閉環增益在-180度相位會不會變成正反饋?

    如題,下圖里的放大電路。放大電路的增益在-180度相位那,會不會變成正反饋產生自激振蕩??
    發表于 09-06 06:13

    運放的輸入頻率會不會影響運放的靜態電流呢?

    運放的的靜態電流與運放的帶寬有關系,要提高帶寬相對的提高了靜態電流。 那么運放的輸入頻率會不會影響運放的靜態電流呢?
    發表于 09-04 06:36

    LF353能夠單電源使用嗎?會不會影響輸出?

    TL072有單電源使用的方案嗎? LF353能夠單電源使用嗎?會不會影響輸出?
    發表于 08-28 08:13

    XTR111如果負載RLoad短路會不會造成SET引腳過流損壞芯片?

    在XTR111的手冊中,在電流輸出模式提供了過流保護電路。 但是圖Figure 48的電壓模式,閉合SW1 如果負載RLoad短路會不會造成SET引腳過流損壞芯片? 內部是否有電流限制功能,如果沒有,有什么辦法提供過流保護?
    發表于 08-20 06:15

    AMC1200的輸出如果短路到+5.7V,會不會造成器件損壞?

    AMC1200的輸出如果短路到+5.7V,會不會造成器件損壞?
    發表于 08-14 08:28

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發表于 07-19 08:05
    主站蜘蛛池模板: 欧美午夜色大片在线观看免费 | 国产一级簧片 | 天天干天天干天天操 | 激情综合网站 | 午夜久久久久久久 | 日本黄页在线观看 | 亚洲天堂电影在线观看 | 免费在线视频播放 | 国产精品国产三级国产在线观看 | 在线观看www妖精免费福利视频 | 最近最新中文字幕在线第一页 | 国产女人水多白浆 | 最新地址四虎www4hutv | 午夜一区二区三区 | 狠狠色丁香婷婷综合欧美 | 我要看一级大片 | 三级毛片网 | 黄色的视频免费看 | 天天插天天爱 | 日韩高清性爽一级毛片免费 | 欧美黄一片 | 男人的天堂免费网站 | 午夜无遮挡怕怕怕免费视频 | 曰本又色又爽又黄三级视频 | 免费视频现线观看 | 激情综合色综合啪啪开心 | 四虎影永久地址www 四虎影永久在线观看精品 四虎影永久在线观看网址 四虎影院.com | 中文字幕在线一区二区在线 | 97天天操| 日本网站免费 | 色综合天天综合网亚洲影院 | 一区二区影院 | 色鬼久久 | 亚洲精品mv在线观看 | 黄色日本视频网站 | 免费看日本大片免费 | 亚洲高清色图 | 成人性视频网站 | 日本簧片在线观看 | 韩国三级观影久久 | 亚洲欧洲色 |