<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          文末送書(shū)|豆瓣9.4分,“hello,world”起源于這本書(shū)!

          共 3852字,需瀏覽 8分鐘

           ·

          2022-07-22 12:53

          C語(yǔ)言是個(gè)很有意思的話(huà)題。對(duì)于計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生來(lái)說(shuō),C語(yǔ)言可以算是本專(zhuān)業(yè)的另一門(mén)“普通話(huà)”。曾經(jīng)看過(guò)一份資料,說(shuō)國(guó)內(nèi)九成高校在給大一開(kāi)設(shè)的“高級(jí)編程語(yǔ)言”一課中選擇使用C語(yǔ)言,而這僅僅只是開(kāi)始。我們知道,計(jì)算機(jī)專(zhuān)業(yè)是有幾門(mén)“硬菜”課程的,比如說(shuō)數(shù)據(jù)結(jié)構(gòu)、算法、編譯原理和操作系統(tǒng),這些課程都有自己的知識(shí)體系,不過(guò),所使用的教材很可能會(huì)在書(shū)名后面多加一個(gè)括號(hào)寫(xiě)上“C語(yǔ)言描述”,這是因?yàn)橛?jì)算機(jī)專(zhuān)業(yè)的知識(shí)總是需要通過(guò)編程才能落地見(jiàn)效,而教材們都喜歡選擇用C語(yǔ)言來(lái)示例編程。可以說(shuō),計(jì)算機(jī)的專(zhuān)業(yè)課基本上就是個(gè)C語(yǔ)言宇宙,哪怕是畢業(yè)多年以后重聚,說(shuō)一句“Long time no C”,一定都能引得大家會(huì)心一笑和無(wú)限回憶。

          不過(guò),疑惑隨之而來(lái)。前兩年一位985的學(xué)生在網(wǎng)上發(fā)帖詢(xún)問(wèn):為什么現(xiàn)在學(xué)校還在教授C語(yǔ)言,而不選擇更為“現(xiàn)代”的Java或者Python?這貼很快變成圈內(nèi)熱帖,大家一時(shí)議論紛紛。在很多人看來(lái),誕生于1973年的C語(yǔ)言雖然歷史地位無(wú)法撼動(dòng),但已經(jīng)是一款爺爺輩的老語(yǔ)言,早就該到了“尚能飯否”的年紀(jì)。

          那么,應(yīng)該學(xué)什么呢?在20年前互聯(lián)網(wǎng)剛剛興起的時(shí)候,大家都想去學(xué)更時(shí)髦的Java,而到了機(jī)器學(xué)習(xí)大紅大紫的現(xiàn)在,則很難拒絕Python的誘惑。近幾年Rust、Go、Swift等新語(yǔ)言像雨后春筍般冒出來(lái),隔一段時(shí)間就來(lái)一版重大更新,變著花樣在刺激著大家喜新厭舊的神經(jīng)。所以,每隔一段時(shí)間網(wǎng)上就會(huì)掀起一陣“是時(shí)候要換掉C語(yǔ)言”的討論。

          不過(guò),C語(yǔ)言真的已經(jīng)是時(shí)代的眼淚了嗎?


          01


          穩(wěn)如泰山的C語(yǔ)言



          大家都知道的是,當(dāng)下很多主流的編程語(yǔ)言,其實(shí)都和C語(yǔ)言有著緊密的血緣關(guān)系,C++就是C語(yǔ)言加上面向?qū)ο螅珻++--又派生出了Java,至于受C++和Java影響而派生的語(yǔ)言又不知道有多少,真可謂一生二、二生三、三生萬(wàn)物。不過(guò),也許大家并不了解,雖然C語(yǔ)言?xún)簩O滿(mǎn)堂,但自身還正處在當(dāng)打之年,和子孫同臺(tái)競(jìng)技不落半點(diǎn)下風(fēng)

          TIOBE是業(yè)內(nèi)知名的編程語(yǔ)言排行榜,我查了一下最近20年的排名記錄,驚訝地發(fā)現(xiàn)雖然各色編程語(yǔ)言一直在TIOBE上你方唱罷我登場(chǎng),但是C語(yǔ)言始終穩(wěn)如老狗,一直像釘子一樣釘在前2位置霸榜,不時(shí)還偷摸一把排名第一的寶座。近幾年P(guān)ython乘著機(jī)器學(xué)習(xí)的東風(fēng)從一個(gè)勝利走向另一個(gè)勝利,最近更是成功把Java從王座上請(qǐng)了下來(lái),然而回頭一看,發(fā)現(xiàn)排在第二的居然還是C語(yǔ)言



          這就很有意思了。也許有人會(huì)認(rèn)為,這是因?yàn)镃語(yǔ)言占了時(shí)間悠久的便宜,歷史上積累下來(lái)的代碼量大,所以比重就大。不過(guò),TIOBE是綜合了全球在搜索引擎中的搜索次數(shù)、各類(lèi)課程的使用次數(shù),以及業(yè)內(nèi)資深專(zhuān)家和廠(chǎng)商的使用偏好等等因素綜合計(jì)算給出的排名結(jié)果,反映的是編程語(yǔ)言在全球的熱度,而不是機(jī)械地比較代碼量。從TIOBE的排名可以看出,不僅僅是國(guó)內(nèi)高校,即使放眼全球的教育界和工業(yè)界,C語(yǔ)言都仍然是穩(wěn)穩(wěn)當(dāng)當(dāng)?shù)睦洗蟾纭?/span>

          不過(guò),編程語(yǔ)言領(lǐng)域早就卷得一塌糊涂,為什么一款誕生了50年的編程語(yǔ)言居然還能傲視群雄,其中是不是有什么成功的秘密呢?


          02


          成功的秘密


          在我看來(lái),C語(yǔ)言最大的成功就是準(zhǔn)確卡位。C語(yǔ)言有一本當(dāng)之無(wú)愧的經(jīng)典之作,叫作《The C Programming Language》,機(jī)工華章出了中文版,譯為《C程序設(shè)計(jì)語(yǔ)言》,作者是B.W.Kernighan和D.M.Ritchie,也稱(chēng)為K&R,而其中的R——D.M.Ritchie正是C語(yǔ)言的作者。



          《C程序設(shè)計(jì)語(yǔ)言》不但是C語(yǔ)言的經(jīng)典教材,還是教材的教材,大家都在通過(guò)這本書(shū)學(xué)習(xí)怎么寫(xiě)教材,我們學(xué)習(xí)新語(yǔ)言都會(huì)從打印“hello,world”開(kāi)始,這個(gè)傳統(tǒng)就是起源于這本書(shū)。

          《C程序設(shè)計(jì)語(yǔ)言》談到了C語(yǔ)言的優(yōu)勢(shì),說(shuō):C語(yǔ)言是一種通用的程序設(shè)計(jì)語(yǔ)言,既不“高級(jí)”也不龐大,它與UNIX系統(tǒng)關(guān)系密切,但并不受限于任何一種操作系統(tǒng)或機(jī)器,很適合用來(lái)編寫(xiě)編譯器和操作系統(tǒng),因此被稱(chēng)為“系統(tǒng)編程語(yǔ)言”。

          C語(yǔ)言的秘密就藏在這句“既不‘高級(jí)’也不龐大”里面。這里的“高級(jí)”并不是指編程語(yǔ)言的水平高低,而是相對(duì)于底層硬件的抽象,越高級(jí)的編程語(yǔ)言,會(huì)越模糊底層的硬件細(xì)節(jié)。

          C語(yǔ)言雖然經(jīng)常用于教授“高級(jí)編程語(yǔ)言”這門(mén)課,但既不是第一款高級(jí)編程語(yǔ)言,也不是最高級(jí)的編程語(yǔ)言。C語(yǔ)言借鑒了BCPL語(yǔ)言的很多概念,而B(niǎo)CPL語(yǔ)言本身比C語(yǔ)言還要高級(jí)一點(diǎn)。BCPL語(yǔ)言注重的是算法,并沒(méi)有設(shè)置“類(lèi)型”這一概念,也即我們?cè)贑語(yǔ)言里面十分熟悉的字符、整型和浮點(diǎn)型這些類(lèi)型,在BCPL語(yǔ)言都是沒(méi)有的。我曾經(jīng)出于好奇找過(guò)BCPL的代碼來(lái)看,感覺(jué)這種盡量剝離底層硬件細(xì)節(jié)的編程語(yǔ)言寫(xiě)起來(lái)更像是偽代碼。

          其實(shí),很多現(xiàn)代編程語(yǔ)言也在淡化類(lèi)型這一概念,Python一類(lèi)的動(dòng)態(tài)語(yǔ)言使用的是“鴨子類(lèi)型”,不用顯示聲明變量類(lèi)型,而傳統(tǒng)強(qiáng)類(lèi)型的靜態(tài)語(yǔ)言則選擇了“類(lèi)型推斷”來(lái)曲線(xiàn)救國(guó),相比之下,強(qiáng)調(diào)類(lèi)型的C語(yǔ)言就要低級(jí)得多。

          不過(guò),低級(jí)有低級(jí)的好處,C語(yǔ)言設(shè)計(jì)的類(lèi)型并非憑空生造,而是對(duì)底層硬件的概括描述,尤為適合精準(zhǔn)地操縱計(jì)算機(jī)底層硬件。我們寫(xiě)操作系統(tǒng)、寫(xiě)驅(qū)動(dòng)、寫(xiě)單片機(jī)、或者寫(xiě)一些想要榨干硬件性能的程序,就必須選擇這種能夠看到底層硬件細(xì)節(jié)的編程語(yǔ)言。

          有人會(huì)說(shuō),匯編也是低級(jí)語(yǔ)言,也能操縱硬件,也能看到硬件細(xì)節(jié),甚至能看到更多的硬件細(xì)節(jié),為什么不選擇匯編呢?這是因?yàn)镃語(yǔ)言比匯編又高級(jí)一點(diǎn),在開(kāi)發(fā)效率和開(kāi)發(fā)體驗(yàn)方面是降維打擊。正是因?yàn)镃語(yǔ)言比低級(jí)語(yǔ)言要高級(jí)一點(diǎn),又比高級(jí)語(yǔ)言要低一點(diǎn),在一眾編程語(yǔ)言中硬生生地開(kāi)辟出叫“系統(tǒng)編程語(yǔ)言”的生態(tài)位這是個(gè)很特殊的生態(tài)位,IT生態(tài)越是枝繁葉茂,面向應(yīng)用開(kāi)發(fā)的高級(jí)編程語(yǔ)言競(jìng)爭(zhēng)越是激烈,系統(tǒng)編程語(yǔ)言的地位就越重要越穩(wěn)固。

          也許又有人會(huì)說(shuō),能不能用Java和Python這些更現(xiàn)代的編程語(yǔ)言干系統(tǒng)編程語(yǔ)言的活呢?很難。C語(yǔ)言中有一個(gè)讓所有人既愛(ài)又恨的語(yǔ)言特性,叫做指針。指針很神奇,它很靈活,也是個(gè)小惡魔,很多開(kāi)發(fā)者把C語(yǔ)言稱(chēng)作“災(zāi)難”,那么災(zāi)難的源頭就是指針。所以,當(dāng)初Java推出來(lái)的時(shí)候,就把干掉指針作為其中一個(gè)重要賣(mài)點(diǎn)。靈活和安全是一對(duì)矛盾體,主流的開(kāi)發(fā)語(yǔ)言都選擇了犧牲靈活性來(lái)提升安全性,當(dāng)然代價(jià)也就是不再可能染指系統(tǒng)編程語(yǔ)言這一生態(tài)位了。



          03


          不斷進(jìn)化


          提升軟件開(kāi)發(fā)能力當(dāng)然很重要,想要熟悉主流的編程語(yǔ)言無(wú)可厚非。不過(guò),軟件開(kāi)發(fā)并非只是編程,而對(duì)于計(jì)算機(jī)專(zhuān)業(yè)來(lái)說(shuō),軟件開(kāi)發(fā)也遠(yuǎn)非全部?jī)?nèi)容,全面地理解計(jì)算機(jī)體系結(jié)構(gòu)也許更符合這個(gè)專(zhuān)業(yè)的教學(xué)目的。從這個(gè)角度來(lái)看,準(zhǔn)確卡位的C語(yǔ)言確實(shí)比Java和Python更為適合。

          不過(guò),C語(yǔ)言也并不是靠精準(zhǔn)卡位的老本吃到了現(xiàn)在。在閱讀C語(yǔ)言的相關(guān)文獻(xiàn)時(shí),有時(shí)會(huì)看到C89、C99、C11、C2x之類(lèi)的神秘?cái)?shù)字,譬如說(shuō)Linux內(nèi)核在從C89向C11遷移中取得了一些進(jìn)展,又譬如說(shuō)Visual Studio 開(kāi)始支持C11 和 C17 。這些神秘?cái)?shù)字正是C語(yǔ)言在不斷進(jìn)化的證據(jù)。

          C語(yǔ)言誕生于50年前,無(wú)論設(shè)計(jì)在當(dāng)時(shí)來(lái)說(shuō)多么精妙,經(jīng)歷了如此漫長(zhǎng)的時(shí)間跨度以后,肯定都會(huì)積累巨量的改進(jìn)需求。一成不變肯定會(huì)被時(shí)代淘汰,但放任讓各家C語(yǔ)言編譯器廠(chǎng)商自行改進(jìn),結(jié)果可能是出現(xiàn)一堆都自稱(chēng)是C語(yǔ)言但無(wú)法互通代碼的C語(yǔ)言實(shí)例。

          C語(yǔ)言早就看到了這個(gè)問(wèn)題,早在1983年美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)就成了專(zhuān)門(mén)的委員會(huì)來(lái)制定一個(gè)“無(wú)歧義的、與具體機(jī)器無(wú)關(guān)的C語(yǔ)言定義”,也就是C語(yǔ)言標(biāo)準(zhǔn),通常稱(chēng)為“ANSI C”。ANSI C到目前為止發(fā)布了三個(gè)重要版本,分別是C89、C99和C11。1989年發(fā)布了第一版ANSI C,這就是C89。隨后,C語(yǔ)言在C99和C11中又引入了一些新的功能和語(yǔ)言特性。目前最新的ANSI C是2018年發(fā)布的C17,不過(guò)并沒(méi)有加入新的功能和語(yǔ)言特性,只是對(duì)C11進(jìn)行補(bǔ)充完善。C2x是下一個(gè)ANSIC,又會(huì)給C語(yǔ)言帶來(lái)一些新的特性,社區(qū)都特別期待,有消息說(shuō)C2x可能就在2022年年內(nèi)發(fā)布。

          D. M.Ritchie老爺子已經(jīng)在2011年去世了,但C語(yǔ)言并沒(méi)有放慢進(jìn)化的腳步,正不斷通過(guò)更新ANSI C來(lái)變得更為現(xiàn)代化。前面提到說(shuō)C++是C語(yǔ)言的plus升級(jí)版,這個(gè)說(shuō)法流傳很廣,但其實(shí)并不十分準(zhǔn)確。C++誕生于1979年,在那個(gè)時(shí)間節(jié)點(diǎn)上C++確實(shí)是C語(yǔ)言的plus升級(jí)版。但隨著C語(yǔ)言自身也在不斷演化,現(xiàn)代的C語(yǔ)言和C++的關(guān)系其實(shí)更像是一個(gè)藤上結(jié)出來(lái)的兩個(gè)不同的瓜。ANSI C是前向兼容的,不過(guò),想要享受C語(yǔ)言不斷進(jìn)化帶來(lái)的便利,就要不斷學(xué)習(xí)新的語(yǔ)法。

          最后再次推薦學(xué)習(xí)C語(yǔ)言的書(shū)。K&R那本經(jīng)典著作《C程序設(shè)計(jì)語(yǔ)言》是學(xué)習(xí)C語(yǔ)言的必讀書(shū),這本書(shū)和C語(yǔ)言的設(shè)計(jì)思路是一樣的,用不太多的篇幅把重點(diǎn)都介紹了。很多人看完都說(shuō)相見(jiàn)恨晚,早知道就應(yīng)該先看《C程序設(shè)計(jì)語(yǔ)言》。
           
          關(guān)于作者:
          莫凡  ,網(wǎng)名木羊同學(xué)。娛樂(lè)向機(jī)器學(xué)習(xí)解說(shuō)選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長(zhǎng)高冷技術(shù)的“白菜化”解說(shuō),微信公眾號(hào)“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號(hào)“木羊”。
          招募解讀官

          機(jī)械工業(yè)出版社華章分社招募解讀官

          解讀C語(yǔ)言領(lǐng)域經(jīng)典名著

          享受C語(yǔ)言的獨(dú)特魅力,分享收獲

          實(shí)現(xiàn)知識(shí)變現(xiàn),打造個(gè)人IP



          最后
          如何送書(shū)



          朋友圈點(diǎn)贊送書(shū),2022 年 7 月 19 號(hào)晚 8 點(diǎn)朋友圈點(diǎn)贊的讀者中抽取 6 位中獎(jiǎng),中獎(jiǎng)讀者送《C程序設(shè)計(jì)語(yǔ)言》。參加抽獎(jiǎng)的小伙伴加我微信,公眾號(hào)后臺(tái)回復(fù)“加群”。

          瀏覽 27
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  射黄网站 | 大香蕉大香蕉最新视频97 | 日韩无码一二三 | 影音先锋久久资源 | 久久精品视频观看 |