无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢(xún)熱線(xiàn):0371-60135900 注冊(cè)有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁(yè) > 幫助中心>文章內(nèi)容

    再駁Linus:思科工程師對(duì)C++不得不說(shuō)的事

    發(fā)布時(shí)間:  2012/8/25 18:38:22

    薩丕爾—沃爾夫假說(shuō)曾經(jīng)在語(yǔ)言學(xué)研究領(lǐng)域風(fēng)靡一時(shí)。我粗略總結(jié)了一下,這個(gè)假說(shuō)的核心思想是:你使用的語(yǔ)言影響和制約了你的想法。例如,如果你的語(yǔ)言只有一個(gè)單詞來(lái)描述雪,你將很難說(shuō)出粉狀雪和易碎的冰雹之間的差別。

    當(dāng)我了解后,我徹底不相信薩丕爾—沃爾夫假說(shuō)。雖然語(yǔ)言相對(duì)論帶著一套假說(shuō)卷土重來(lái),但幾乎可以肯定的是,人類(lèi)思想絕不受制于詞匯和語(yǔ)法的牢籠。

    E.W. Dijkstra是編程語(yǔ)言領(lǐng)域的薩丕爾,他曾說(shuō)過(guò):

    “給以前接觸過(guò)BASIC學(xué)生教良好的編程幾乎是不可能的。作為潛在的程序員,他們精神上已經(jīng)殘廢,無(wú)再生的希望。使用COBOL更是摧殘了他們的心靈,因此,教他們應(yīng)該被視為刑事犯罪”。

    今天,我們有Linus Torvalds對(duì)C++的炮轟,他認(rèn)為使用C++的程序員會(huì)破壞他或她接觸到任何項(xiàng)目。Linus是這樣說(shuō)的:

    “我得出的結(jié)論是,任何希望在項(xiàng)目中使用C++而不是C的程序員都是很可能讓我生氣的程序員,因此我不會(huì)給他們機(jī)會(huì)來(lái)搞砸我的項(xiàng)目。C++導(dǎo)致真正糟糕的設(shè)計(jì)選擇。”

    Torvalds太過(guò)武斷

    在我所在的大型企業(yè)中,我們的名片背面有一句口號(hào):不迷信科技。做到這一點(diǎn)可能不容易,但是的,我們?cè)敢鈬L試。

    對(duì)我來(lái)說(shuō),這個(gè)訓(xùn)誡意味著兩件事:

    1、嘗試客觀(guān)地為工作選擇最佳的工具

    2、不要讓你對(duì)工具的偏好指揮完成工作的方法

    Linus在他的炮轟中已經(jīng)說(shuō)得很清楚,任何使用C++編程的人都很心虛,拿這些規(guī)則做借口。

    但我有不同的想法,我認(rèn)為C++顯然也有可能成為完成工作最合適的工具。得出這樣的結(jié)論是相當(dāng)客觀(guān)的,我認(rèn)為L(zhǎng)inus顯然是被他特殊的技術(shù)流派迷惑了。

    一個(gè)簡(jiǎn)單的例子

    作為我上學(xué)期C/C++編程班的期末作業(yè),我要求學(xué)生用C實(shí)現(xiàn)一個(gè)簡(jiǎn)單的令牌計(jì)數(shù)程序,目標(biāo)是要重現(xiàn)下面這段C++代碼的行為:

    map counts;
    string s;
    while ( cin >> s )
    counts[s]++;
    for ( auto ii = counts.begin() ; ii != counts.end() ; ii++ )
    cout << ii->second << " : " << ii->first << endl;

    這個(gè)特殊的程序突出了一些C中沒(méi)有的C++功能,如:

    ●C數(shù)組,向量多功能替換

    ● 字符串類(lèi)

    ● 使用iostreams安全輸入

    ●關(guān)聯(lián)數(shù)組作為標(biāo)準(zhǔn)庫(kù)的一部分

    這個(gè)程序用C++來(lái)寫(xiě)是相當(dāng)容易的,只需要處理一下輸入流中的錯(cuò)誤——有時(shí)候甚至這一步都沒(méi)有必要。

    用C實(shí)現(xiàn)

    用C重寫(xiě)是一個(gè)稍微復(fù)雜點(diǎn)的任務(wù),因?yàn)镃的庫(kù)中沒(méi)有任何類(lèi)型的關(guān)聯(lián)數(shù)組。解決這個(gè)問(wèn)題的辦法很多,我選擇了下面的辦法:

    ● 將所有令牌讀入一個(gè)數(shù)組

    ● 完成后,對(duì)數(shù)組排序

    ●完成數(shù)組排序后,通過(guò)遍歷每個(gè)令牌獲得計(jì)數(shù)

    雖然這個(gè)算法占用的空間比C++程序更多。假設(shè)你沒(méi)有碰到gsort()之類(lèi)病態(tài)的問(wèn)題,花的時(shí)間可能都差不多。

    我堅(jiān)信用C++比用C寫(xiě)這個(gè)程序更容易,理由如下:

    ●C I/O缺陷。在C中讀字符串有相當(dāng)多的困難,由于C I/O庫(kù)沒(méi)有標(biāo)準(zhǔn)的方法讀取長(zhǎng)度無(wú)限制的字符串(可以使用編譯器特定的擴(kuò)展,但那會(huì)引起其它問(wèn)題),你的輸入代碼必須檢查多種錯(cuò)誤情況,或者構(gòu)建你自己的字符串輸入函數(shù)。

    ● C數(shù)組的內(nèi)存管理基本上是一項(xiàng)手工任務(wù),我必須為數(shù)組分配原始空間,如果超出了它的長(zhǎng)度,我還得小心重新分配,做完后,我還得釋放空間。

    ● C字符串的內(nèi)存管理有同樣的問(wèn)題。

    ● 字符串?dāng)?shù)組的排序使用gsort()只是有一點(diǎn)不方便,gsort()不能提供C++庫(kù)中sort()函數(shù)的性能保證。

    這個(gè)函數(shù)的C版本代碼行數(shù)要多一些,需要手工完成的任務(wù)也要多一些,因此犯錯(cuò)的幾率也要大一些。

    我喜歡C++版本的最后一個(gè)原因是,它同樣適合其它類(lèi)型,如插入和提取運(yùn)算符類(lèi)型、比較運(yùn)算符,都可以使用同樣的代碼,只需要變一個(gè)聲明。將實(shí)現(xiàn)同樣的事情的代碼轉(zhuǎn)換成一個(gè)函數(shù)模板,這樣就可以在以后直接拿來(lái)使用了。

    我一些最好的朋友是C程序員

    那么我偏愛(ài)C++版本就能說(shuō)明我是一個(gè)語(yǔ)言偏執(zhí)的人嗎?

    我認(rèn)為不能如此下結(jié)論,首先,我認(rèn)為這個(gè)程序的C版本也有一些不錯(cuò)的優(yōu)點(diǎn):

    ● 你可以使用POSIX系統(tǒng)調(diào)用編寫(xiě)這個(gè)程序,除了內(nèi)存分配和排序。

    ●這個(gè)程序的C版本因?yàn)槭褂昧说讓覫/O,速度將會(huì)更快,C++ iostreams在任何時(shí)候都表現(xiàn)良好,但它們的分層方法在談到效率時(shí)總是處于不利地位。

    因此,對(duì)于這樣一個(gè)程序,語(yǔ)言的選擇最終歸結(jié)為背景,如果你相信80/20規(guī)則,并且它不是程序的核心部分,你可能認(rèn)為這個(gè)代碼應(yīng)該用C++編寫(xiě)。代碼行數(shù)越少,犯錯(cuò)的幾率就越低,效率可能不是最大的問(wèn)題。

    如果這是一段很關(guān)鍵的經(jīng)常執(zhí)行的代碼,你可能會(huì)認(rèn)為C是最佳選擇。如果選擇C,請(qǐng)一定要花點(diǎn)額外的時(shí)間進(jìn)行代碼評(píng)審,確保沒(méi)有內(nèi)存泄露和指針錯(cuò)誤,只有那樣,你才上路了。

    撫平Linus的情緒

    那么Linus看到上面的代碼是如何炮轟的呢?我斗膽猜一下,任何像樣的C++程序員都會(huì)寫(xiě)出類(lèi)似的代碼。Linus說(shuō):

    “你一定使用了這種語(yǔ)言“好的”庫(kù)功能,如STL和Boost,它們對(duì)你的程序可能有幫助,但當(dāng)它們不工作時(shí),會(huì)引起無(wú)盡的痛苦”。

    在這個(gè)程序中,我好好利用了曾是STL一部分的標(biāo)準(zhǔn)庫(kù)組件,它們作為標(biāo)準(zhǔn)的一部分已經(jīng)有十多年的歷史。它們的表現(xiàn)真的很好,在我所知道的任何編譯器中,也沒(méi)有可移植性或正確性問(wèn)題。

    “你會(huì)發(fā)現(xiàn)某些抽象編程模型不是很有效,但現(xiàn)在你所有的代碼都依賴(lài)于所有圍繞它的好對(duì)象模型。如果不重寫(xiě)你的應(yīng)用程序,那么你是無(wú)法修復(fù)它的。”

    的確,盡管C++不能為我做這些事,我只有設(shè)法自己編寫(xiě)程序,不使用任何抽象——沒(méi)有新的類(lèi),沒(méi)有接口,基本上完全是靠C代碼完成許多有用的類(lèi)的。

    但我認(rèn)為這是規(guī)則而不是例外。

    “換句話(huà)說(shuō),只有這樣才能做得好,效率高,系統(tǒng)級(jí)和可移植的C++最終會(huì)限制自己,但這一切在C中都是可行的。”

    除非C有容器類(lèi),字符串類(lèi),類(lèi)型安全I(xiàn)/O,以及RAII這樣的技術(shù),這句話(huà)才會(huì)變成真的,F(xiàn)在來(lái)看,它完全是胡說(shuō)。

    在現(xiàn)代C++可用之前,我可能會(huì)堅(jiān)持使用一個(gè)簡(jiǎn)單的管道來(lái)完成這個(gè)任務(wù):

    tr [:blank:] '\n' | grep -v "^$" | sort | uniq -c

    事實(shí)上,我可以在編譯語(yǔ)言中做同樣的事。只要它們能給我一些靈活性,我想我不用成為一個(gè)偏執(zhí)狂就能明白這個(gè)事實(shí)。你對(duì)此又是怎樣看的?

    作者簡(jiǎn)介:Mark Nelson,現(xiàn)任思科公司工程師,《The Data Compression Book》的作者,《Developing Cisco IP Phone Services: A Cisco AVVID Solution》的協(xié)作者。


    本文出自:億恩科技【mszdt.com】

    服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營(yíng)性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營(yíng)性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營(yíng)性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話(huà):0371-60135900
  • 專(zhuān)注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問(wèn):河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      1
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線(xiàn)