日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C與C 語言之爭(zhēng):網(wǎng)友觀點(diǎn)爭(zhēng)論精彩語錄之一 , C,C ,編程語言,孟巖,劉江,云風(fēng),爭(zhēng)論,原創(chuàng),馬沛, ,...

 skywood 2007-09-12
1、網(wǎng)友fastest286:

C++ 的編譯速度讓我不敢使用一些大型的優(yōu)質(zhì)庫, 例如 ACE, 非常郁悶.
現(xiàn)在我開始使用 D 來寫程序了, 感覺不錯(cuò).
目前還沒有什么好的 IDE, debugger 也只有 windows 下面好點(diǎn). 平時(shí)的編程倒 也不需要?jiǎng)佑锰嗾{(diào)試器, 只是出現(xiàn)非法訪問的時(shí)候, 有一個(gè)會(huì)方便很多。平時(shí)開發(fā)的時(shí)候, 例如編譯器自帶的 unittest 和 code coverage 分析, 配合 trace/log 代碼, 基本上就夠用了. 只是特殊時(shí)候有些麻煩, 例如, 昨天出現(xiàn)一個(gè) gc 時(shí)候報(bào)非法訪問, gdb無法指對(duì)地方, 折騰得比較久, 用注釋代碼的方法找出了問題, 原來還是 C++ 習(xí)慣帶來的問題, 一個(gè)類的析構(gòu)函數(shù), 想著快些釋放掉相關(guān)資源, 對(duì)內(nèi)部子對(duì)象調(diào)用了 close. gc 是不保證對(duì)象和子對(duì)象的調(diào)用順序的.

現(xiàn)在一點(diǎn)就不想用回 C++ 了. 這個(gè)編譯器, 在 vmware 中編譯自帶的類庫(帶網(wǎng)絡(luò), container, 文件, io, 甚至還有一個(gè) cluster 系統(tǒng)), 總共不到10秒鐘, 編譯我自己的程序, 1秒鐘都不用.快速的編譯, 加上方便的 unittest, 和用 python 寫程序的快速寫, 快速調(diào)的感覺相象.

2、網(wǎng)友benjiam:

語言不是宗教。
但語音是信仰。
linus 的水平 這里沒人能比得上,他對(duì)c++ 的理解水平這里也沒人能比得上。在越來越花哨的。編程面前,我們不要忘記我們只是操作電子開關(guān) 開關(guān)一些電子管而已。

3、網(wǎng)友a(bǔ)ndy_show:

個(gè)人認(rèn)為,這個(gè)世界上最好的程序員肯定不是C++程序員。
C+ +好比一種威力強(qiáng)大的武功心法,但是太容易走火入魔,坦白的說,我寫了十多年的程序,但是在現(xiàn)實(shí)中很少見到C++寫的好的程序員,一個(gè)很重要的原因是C+ +的豐富的特性會(huì)把人引入歧途,你會(huì)不自覺的選擇復(fù)雜的設(shè)計(jì),現(xiàn)實(shí)中的很多代碼是許多人在學(xué)習(xí)過程中寫成的,而很多人在使用這些C++的特性的時(shí)候并不明 確這么使用這種武功是否合適!這樣的代碼可能遍布很多以C++作為開發(fā)工具的產(chǎn)品中。

而如果讓這些程序員從一開始就用C的方式去寫,可能就不會(huì)范他們用C++時(shí)所犯的錯(cuò)誤,從這個(gè)角度而言,C語言的簡(jiǎn)單性恰恰是一種優(yōu)勢(shì)。C++的復(fù)雜性會(huì) 使很多人誤用。而C語言的簡(jiǎn)單性,一般情況下都會(huì)迫使你使用比較簡(jiǎn)單的設(shè)計(jì),例如C語言不能在語言層次上提供類繼承的方式,那么它會(huì)迫使你更多的使用組 合,而不是繼承這樣的重用方式,即使你可以用函數(shù)指針表的方式實(shí)現(xiàn)多態(tài),也不可能象C++那樣把類層次擴(kuò)展了一層又一層。

在c語言中,函數(shù)指針表的在c語言中以更接近于定義接口的方式被使用。這些都是C語言的簡(jiǎn)單性迫使你做出的選擇。而很多C++的程序員卻在C++的豐富的特性前面忘了簡(jiǎn)單性原則的重要性。


4、網(wǎng)友middle:

C用來實(shí)現(xiàn)封裝性很簡(jiǎn)單。比較難以用C直接實(shí)現(xiàn)的是繼承和多態(tài)。不過在現(xiàn)實(shí)中繼承和多態(tài)真的是可以用的少之又少的。很多所謂的繼承和多態(tài)的“設(shè)計(jì)”完全可以用基于策略的方式來完成。基于策略的方式在C里用函數(shù)指針或者表驅(qū)動(dòng)完全可以做到。

很多不得不用C++高級(jí)特性的“設(shè)計(jì)”,其實(shí)從一開始就使用Java甚至script更容易做到。OO并不是模塊化和可維護(hù)性的唯一可行方式,甚至不是最優(yōu)的方式。而C++的OO實(shí)現(xiàn)也不是很好的實(shí)現(xiàn)。

5、網(wǎng)友junhao:

C是精煉的,C++是靈活的,但也是讓人頭疼的,自己取舍吧。

6、網(wǎng)友lioqio:

個(gè)人編程感受:
1、在操作系統(tǒng)底 層一般是不會(huì)使用C++語言的,最簡(jiǎn)單的例子是一個(gè)內(nèi)核程序在得到一個(gè)自旋鎖后調(diào)用C++語言的一些特征語句,由于封裝,其內(nèi)部存在內(nèi)存分配(假設(shè)已經(jīng)將 new/delete重載到內(nèi)核內(nèi)存分配函數(shù)上去),這可能導(dǎo)致進(jìn)入睡眠,后果可想而知,這在操作系統(tǒng)中是絕對(duì)不允許的。

2、在操作系統(tǒng)上層是可以用C++的,比如windows使用的Kernel streaming,個(gè)人感覺遠(yuǎn)比Linux的V4L2漂亮多了。以及在OS/X的IO/Kit(Object C)和window的KMDF等內(nèi)核驅(qū)動(dòng)開發(fā)框架,使得驅(qū)動(dòng)開發(fā)非常簡(jiǎn)便。(順便說一下,從這點(diǎn)來看,是linux在學(xué)windows,windows在 學(xué)apple:)

3、對(duì)于應(yīng)用開發(fā),如果規(guī)模大一些的本地軟件開發(fā),同時(shí)對(duì)性能又有較高的要求,那么請(qǐng)使用C++吧。因?yàn)镃++在語言級(jí)別和庫上邊可以較大的提高開發(fā)效率,也有很好的可擴(kuò)展性。C++比C有更多的花樣可以往。

4、但說到底,我們一般用C++的特性,C完全都可以自己做。

7、網(wǎng)友psusong:

用C 設(shè)計(jì)接口,用C++來實(shí)現(xiàn),例子就是Windows里使用的標(biāo)準(zhǔn)DLL,我們一般這樣做:DLL里提供一個(gè)NewInstance的接口,返回一個(gè)實(shí)例句 柄,其他的接口函數(shù)的第一個(gè)參數(shù)都是一個(gè)實(shí)例句柄,另外還有一個(gè)DeleteInstance的接口函數(shù),這樣接口也能支持多實(shí)例。我也是這樣做的,這樣 自己代碼寫起來爽,別人用起來也爽。

網(wǎng)友反對(duì)觀點(diǎn)論

1、網(wǎng)友pass86:

C++機(jī)制很多,強(qiáng)大在于此。
面向?qū)ο?br> 變相過程
基于對(duì)象
泛型編程

2、網(wǎng)友duyanning:

也太搞笑了吧,總拿全功能的std::string跟幾乎啥也不能干的char*作比較,誰規(guī)定你只要用C++處理字符串就得用std::string了?
拜托,如果你的需求很單純,如果你又很在意效率,你完全可以不用全能的std::string,std::string的存在并不能作為妨礙你創(chuàng)造適合你需要的your::string從而提升抽象層次的借口。

Torvalds理糙人更糙,我徹底失望了。

應(yīng)當(dāng)搞清楚,作為操作系統(tǒng)內(nèi)核級(jí)的開發(fā)者,在不清楚自己所用的std::string實(shí)現(xiàn)都在背后做了些什么的情況下就敢用,這是他自己素質(zhì)的問題,而不 是他所用std::string實(shí)現(xiàn)的問題。如果不清楚std::string是怎樣實(shí)現(xiàn)的,而std::string的行為對(duì)于你的程序又很關(guān)鍵的話, 就請(qǐng)去調(diào)查,去弄清楚,然后選擇要不要用,而不是抱怨std::string背著你如何如何。

假如他選擇的不是C++的std::string而是某個(gè)用C寫的字符串函數(shù)包,那他是不是也要因?yàn)椴磺宄@個(gè)字符串函數(shù)包的具體實(shí)現(xiàn)而要對(duì)“一切抽象及復(fù)用”進(jìn)行否定呢?

Torvalds僅僅是在敵視C++嗎?
他已經(jīng)把他自己放在一切計(jì)算最根本的“抽象”的對(duì)立面上了。Torvalds長(zhǎng)期以來對(duì)于C++和C++用戶的侮辱讓他看起來更像是個(gè)小丑。

3、網(wǎng)友1073X:

做系統(tǒng)軟件開發(fā)的時(shí)候,重要的是理解系統(tǒng)的運(yùn)作方式,那些漂亮的抽象手法和高級(jí)特性是次要的。這是怎么說的?軟件本來就是一層一層又一層的,要在何種層次上開發(fā),就應(yīng)該在何種層次上理解。因?yàn)闆]有理解下層而不放心上層是完美主義者的心理障礙。

OO又不是只有抽象,C++比C明顯的優(yōu)勢(shì)就是更合理的數(shù)據(jù)封裝。不如說Torvalds對(duì)OO還沒有入門。

4、網(wǎng)友fish6344

大家不必在意別人對(duì)C++語言的敵意!聽聽java、Delphi及C#等語言的發(fā)明者們的聲音,無一不是在大談他們的東東的好處,而C++是這也不好那也不好。但他們?cè)谧栽傋砸训恼Z言效率極佳的時(shí)候,無一不拿C++作為參照(聲稱等同甚至超過C++)!

他們總用自已偏愛的語言的優(yōu)點(diǎn)(未必是優(yōu)點(diǎn))去攻擊C ++的缺點(diǎn)(也未必就是缺點(diǎn)), 這其實(shí)說明他們?cè)跐撘庾R(shí)上已視C++為開發(fā)工具的標(biāo)準(zhǔn),這點(diǎn)很象中國古時(shí)候那個(gè)賣矛和盾的人!即使是Linus Torvalds對(duì)C++的異議,我認(rèn)為異議的實(shí)質(zhì)也是他對(duì)OOP以及使用C++而濫用繼承的人的不滿,對(duì)C++語言的攻擊反而略顯蒼白。

科學(xué)領(lǐng)域本身就是百家爭(zhēng)鳴的世界,語言激烈點(diǎn)也未嘗不可。但我覺得每一種語言都應(yīng)該被我們所尊重。各種語言的存在,自然有其存在的理由。軟件工程界至今,還沒有哪一種語言可以堪稱完美,沒有哪一種語言萬能,這是不爭(zhēng)的事實(shí)!

C++在今天,的確今非昔比,但這并不是因?yàn)镃++不夠好、不如其它語言,主要原因是今天的電算環(huán)境和C++誕生時(shí)相比,發(fā)生了巨大的變化。互聯(lián)網(wǎng)興盛, 硬件性能提升而價(jià)格下降等等因素導(dǎo)至java應(yīng)運(yùn)而生。C++作為一個(gè)80年代誕生的靜態(tài)語言,加上它賦預(yù)使用者太多的權(quán)力(權(quán)力可是雙刃劍啊!)、標(biāo)準(zhǔn) 的約束性以及C++的教育狀況,有今天的境況是完全自然的。

所以大家不必在意世人對(duì)C++的非議,我可以作這樣的比喻:如果你想作一個(gè)原始社會(huì)的部落首領(lǐng),請(qǐng)用匯編;如果你想當(dāng)一個(gè)封建君主,請(qǐng)用C;如果你想作一 個(gè)開明偉大的國家元首(當(dāng)然你必須有超凡的駕馭權(quán)力的能力!),可以使用C++,如果想當(dāng)大臣,知府什么的,那會(huì)有更多的選擇...... 

我永遠(yuǎn)愛你-C++!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多