自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

無(wú)奈的C++的復(fù)雜性問(wèn)題介紹說(shuō)明

開(kāi)發(fā) 后端
C++的復(fù)雜體現(xiàn)在多處,其實(shí)它的本質(zhì)就是一個(gè)——代碼過(guò)度復(fù)雜,或有人說(shuō)C++之關(guān)鍵缺陷是沒(méi)有統(tǒng)一完整的類(lèi)庫(kù)支撐等因素。

C++更多地靠第三方的庫(kù)來(lái)實(shí)現(xiàn)這些功能,因?yàn)镃++是一個(gè)國(guó)際標(biāo)準(zhǔn),C++的復(fù)雜要在C++中加入這些語(yǔ)言之外的、面向應(yīng)用的特性還需要很長(zhǎng)一段路要走。而C#、Java的擁有者是商業(yè)化公司,各種動(dòng)作自然要敏捷得多。

然而這其實(shí)只不過(guò)是一個(gè)結(jié)果,而不是原因。正是因?yàn)檎Z(yǔ)言太復(fù)雜,才無(wú)法在有效期內(nèi)開(kāi)發(fā)出高質(zhì)量的大一統(tǒng)的類(lèi)庫(kù)。 C++的復(fù)雜,并非是其體積龐大之必然結(jié)果。復(fù)雜是對(duì)結(jié)構(gòu)混亂無(wú)序程度的描述,規(guī)模大,結(jié)構(gòu)不見(jiàn)得必然復(fù)雜。

C++的復(fù)雜,也并不是如很多人所認(rèn)為,是若干種編程范式(paradigms)的并存而至。事實(shí)上,現(xiàn)代實(shí)用編程語(yǔ)言至少有2-3種范式才能登大雅之堂。以范式數(shù)量論,Python和Ruby等新型動(dòng)態(tài)語(yǔ)言的范式甚至多于C++,然而它們卻以簡(jiǎn)單和開(kāi)發(fā)效率高著稱(chēng)。#t#

C++復(fù)雜的根源在于三大約束:與C的完全兼容、靜態(tài)類(lèi)型檢查、***性能。在三大約束下,C++未能完善對(duì)于面向?qū)ο笏枷氲闹С郑茨芙?qiáng)大的動(dòng)態(tài)能力,從而使得C++在OO這個(gè)單項(xiàng)上存在本質(zhì)缺陷。

事實(shí)上,C++的過(guò)程、OB模型相當(dāng)成熟和穩(wěn)定,而泛型模型,就單項(xiàng)來(lái)說(shuō),除了語(yǔ)法丑陋之外也沒(méi)有大的問(wèn)題。缺陷集中體現(xiàn)在OO模型的實(shí)現(xiàn),并因此干擾了其他幾個(gè)范式的完整程度。

然而,OO的缺陷絕非設(shè)計(jì)者的偏執(zhí),其原因在于三大約束。如果堅(jiān)持三大約束,則即使再重新設(shè)計(jì)一次,結(jié)果也與今日相差不遠(yuǎn)。Stroustrup在多種場(chǎng)合表示,對(duì)C++的設(shè)計(jì)沒(méi)有大的后悔之處,意思就是這個(gè)。

侯捷先生早在2001年初即對(duì)我說(shuō),C++在OO上不及Java,當(dāng)時(shí)體會(huì)不深,認(rèn)為沒(méi)有大一統(tǒng)的單根類(lèi)庫(kù)會(huì)使設(shè)計(jì)更加靈活,后來(lái)又認(rèn)為憑借GP可以抵消OO的不足甚至超越之,現(xiàn)在看來(lái)即使不是不可能,這條道路也必然是艱辛異常,成敗難以預(yù)料。

又因?yàn)樯鲜鏊幸蛩氐木C合作用,C++基礎(chǔ)類(lèi)庫(kù)的建設(shè)只能進(jìn)行到很低的高度上就停下來(lái),因?yàn)樵偻献呔兔媾R重重困境和無(wú)窮無(wú)盡的爭(zhēng)論。C++標(biāo)準(zhǔn)庫(kù)實(shí)際上是一個(gè)距離應(yīng)用相當(dāng)遙遠(yuǎn)的非?;A(chǔ)的程序庫(kù)。

其主體部分只相當(dāng)于Java中System和Util兩個(gè)package。而C++寧可停在這樣的低層次,也不愿意放棄三大約束中的任何一個(gè)。這種執(zhí)著使得高層標(biāo)準(zhǔn)庫(kù)設(shè)施的建立異常困難,使用也不容易。Boost庫(kù)中相當(dāng)部分組件的易用性不佳。

模板的復(fù)雜語(yǔ)法與三大約束也有直接的關(guān)系。另一個(gè)原因是Bjarne在發(fā)明模板時(shí)目標(biāo)單純。C#和Java加入泛型機(jī)制的時(shí)候,沒(méi)有繼承C++***的經(jīng)驗(yàn),卻不約而同地繼承了C++模板機(jī)制中最壞的部分——語(yǔ)法,短期來(lái)看,喪失了一次改革的良機(jī)。長(zhǎng)遠(yuǎn)來(lái)看,必成累贅。

不完善的異常機(jī)制則是在木已成舟的情況下迫不得已的設(shè)計(jì)。C++中的多種范式并行,是一些最復(fù)雜問(wèn)題的表面原因。以至于Doug Lea建議在一個(gè)項(xiàng)目里只堅(jiān)持一個(gè)范式。但是這仍然只是表象。歸根結(jié)底還是因?yàn)?FONT>C++的復(fù)雜的缺陷,使得與其它范式合作時(shí)困難成倍放大。故自接受Doug Lea思想以來(lái),我的C++(乃至其他現(xiàn)代語(yǔ)言,尤其是Python等多范式語(yǔ)言)的開(kāi)發(fā)設(shè)計(jì)思路是:

1. 首先選定一種思維方式(即范式),盡可能只用這一種思維方式解決問(wèn)題;

2. 如果在局部遇到其他思維方式更得力的問(wèn)題,則經(jīng)慎重考慮后,可以將另一種風(fēng)格包裝在局部,解決局部問(wèn)題。但整個(gè)系統(tǒng)在某一層次之上看來(lái),應(yīng)當(dāng)是統(tǒng)一一致的。一般C++的開(kāi)發(fā),應(yīng)以O(shè)B為基本風(fēng)格。除非有類(lèi)似MFC那樣龐大而成熟的OO庫(kù)支持,不應(yīng)貿(mào)然在整體上使用OO風(fēng)格。

3. 多種風(fēng)格混用,除非有已被充分討論并驗(yàn)證的方案(即成熟模式),可提供單一風(fēng)格不能提供的較大優(yōu)勢(shì),否則應(yīng)極力避免。當(dāng)然鼓勵(lì)在研究中探索,但實(shí)踐是另一回事。

責(zé)任編輯:chenqingxiang 來(lái)源: IT168
相關(guān)推薦

2010-01-13 18:49:54

C++的復(fù)雜性

2010-01-27 15:50:23

C++復(fù)雜性

2010-01-21 17:30:12

C++復(fù)雜

2010-01-12 10:28:58

C++復(fù)雜性

2010-01-12 10:57:16

C++的復(fù)雜性

2010-01-13 15:51:44

C++編程語(yǔ)言

2010-01-19 17:54:47

C++程序

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-01-19 18:35:12

靜態(tài)成員

2010-01-14 13:39:45

Visual C++優(yōu)

2010-01-11 09:56:07

C++編程實(shí)例

2010-01-28 16:05:09

C++風(fēng)格與技巧

2010-01-21 14:07:14

CC++聲明

2010-01-15 19:34:25

C++設(shè)計(jì)

2010-01-13 11:27:06

C++安全性

2010-01-26 10:42:26

C++函數(shù)

2010-01-13 13:58:49

C++編譯模式

2010-01-12 15:56:25

C++軟件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)