• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            huaxiazhihuo

             

            試論C++類庫開發之難

                     很久很久以前,世界上曾經存在著這么一種語言,用它寫出來的代碼,既能保證高效的運行效率,又兼具優雅十足的美感,并且,所有語言存在著的不足,都可以通過添加新的自定義的類型來實現出來,并且,新的類型,只要做得好,可以與原有的類型無縫交互。在它的世界里面,那是一切皆有可能。并且,它還承諾,雖然它的功能非常豐富,但各個功能特性都可以和睦相處,而且,你代碼中不必要用到某項功能時,你完全不必為這項功能付出那怕一丁點的代價,如果這個語言愿意作一點點妥協,可能它就不是現在的這個樣子,至少將更加容易使用。所有它承諾的一切,乍聽起來美妙無比,而且,它也似乎做到了,真的做到了馬兒既能跑,又能吃盡量少的草,前提是開發人員要小心翼翼地用好這門語言的一切特性。只可惜事與愿違,這門語言確實看起來,真的可以創造出完美的東西,但事實上,沒有人能用它寫出過一個好東西,那怕是簡簡單單的字符串,要做得大多數人拍手叫好,也是千難萬難,完美的字符串,從來就沒有出現過。各位同學,自然知道在下說的是什么語言,等千呼萬喚的C++1X始出來之后, 真不知道還有什么東西,是C++沒法做的,要在C++中增加幾種新的編程模式,也不會有太多的困難。起碼,函數式的編程,使函數好像成為一等公民,絕不是什么難事。
                      C++本身自然不會有什么問題,說它復雜吧,它確實復雜,但是完全可以無視,異常不好,禁用就是;多繼承很壞,不用就是;模板過于復雜,忘了它吧;……,起碼它做到了,你不喜歡的特性,你可以不必付出任何代價。但是,成千上萬的C++高手大牛巨俠,這么多年下來,卻沒有搞出幾個似模似樣的類庫出來,除了STL(其實STL也有一些問題),難道是程序員錯了,難道是他們全錯了嗎?可是,C、JAVA、PYTHON它們,怎么就不存在這些問題呢,里頭的好東西還真不少,起碼在它們的圈子里面,碼農們都覺得類庫沒問題,很好,用起來很放心,可以放心的使用。又或者是,C++碼農對自家的類庫要求過高了,他們的眼光太挑剔了,大家人人都有多疑癥,但是,一旦他們使用其他的語言,又很樂意使用其他語言所提供的類庫或者是框架,怎么就不會那樣疑神疑鬼,沒有各種并發癥,起碼在下是這樣的,你要說C++沒問題,那鬼才愿意相信呢?那么,假如C++有問題,問題又是那里呢?
                      我以為,C++的問題,就在于它似乎很鼓勵碼農制造輪子,撰寫類庫,然后對所寫的類庫貌似沒有過多的要求,但實際上,C++對類庫的要求,是所有語言中最高的。好比,要你寫的軟件,需求很不明確,貌似用戶說,你隨便寫,然后它能完成任務就可以了,但實際上這樣的軟件最難開發了。知道嗎?C++的類庫,有什么樣的要求:1、運行的效率要高,處理一切細節,高效源于對細節的特定處理;2、表現出來的接口和語義要無限接近原始內嵌的類型,值語義,吖的,這要求也太高了。3、要有足夠的通用性,滿足抽象的需要。這三條的任何一條都不是什么省油的燈,直接可以K死秒殺多少C++高手的幾千萬只脆弱的腦細胞。這三條下來,本身就差不多是一個難以完成的事情,但是,這還不是最要命。最能搞死人的,是C++又提供了太多的豐富特性,什么模板、操作符重載、異常、多繼承、內聯、……,心理學的一項研究表明,當選擇太多之時,當事人就會分散精力,不知道如何選擇。用C++開發類庫,眼前存在著無限種選擇,貌似條條大路通羅馬,但實際上,卻是條條大路是死路。但這也沒什么,最后一擊,如果沒有必要,鬼才愿意費心費神寫類庫,關鍵在于C++只是提供實現高標準類庫的基本平臺而已,語言本身就沒有一點點能用的實在的東西,那怕一個簡單的字符串類,一切都必須通過類庫來完成,它一開始一直都在鼓勵碼農寫類庫,試問普天之下,有那個C++碼迷,能夠抑制造輪子的誘惑,于是,悲劇就誕生了。
                      反觀其他的語言,為什么就不存在這些問題呢?
                      在C里面,是絕對不會出現C++的類庫困境,首先,它只有一種選擇讓你開發類庫,那就是函數和函數指針,外加結構體、數組,或者,必要的時候,使用上點宏,嗯,就只有這么多。你要用就用,不用就拉倒,在這么有限的條件,你只能做出最簡單但卻又是最精妙的設計,都能直達問題的本質。基本上,C的設計,不會存在一點點多余的抽象層次,一拳一拳,都打在要害上,針針見血。更何況,C的要求也不高,除了效率之外,就是要保持函數接口語義的清晰,而這并不難做到。
                      那么,在高級語言中,又是另一番天地了。當然,它們也提供了多數C++的豐富特性,你自然有很多選擇,但是,這些語義卻屏蔽了很多底層的細節,并且提供了豐富的語言平臺特性,什么反射啊、豐富的API框架,單是垃圾回收和單繼承,就功德無量,足以拯救多少弱小脆弱的靈魂。是的,人家效率確實不太高,也沒有要求值語義,但這不要緊,因為人家語言一開始就沒有這樣的效率標榜要求,它們一上來就讓碼農直面慘淡的應用,進入問題領域,不需要撰寫什么高通用性的類,因為平臺本身就提供了,你要寫的類,都是問題領域中的東西。這實在能解救多少腦細胞啊,減少多少不必要的工作量啊呢。
                      沒有必要的類庫來支持,C++做開發,工作量相當浩大,并且還容易生產出一堆不成熟的通用類;但是,必要的成熟的類庫,市面上又沒有多少個,目前的所謂的高級的C++類庫,大多數都在為了C++而C++,你們知道我在說的是那一個的。當然,俺是沒能力寫出什么類庫的,所謂的眼高手低,大概就是這樣吧。
             或者,痛并快樂著,是C++碼迷的持久不退的熱情所在。只是,人生何其寶貴,將它們浪費在C++上,實在有點不值得。當然,活著只要快樂就好,C++也確實能給人帶來很多快樂。

            posted on 2012-05-30 16:53 華夏之火 閱讀(4519) 評論(31)  編輯 收藏 引用

            評論

            # re: 試論C++類庫開發之難 2012-05-30 18:19 Richard Wei

            的確,C++ STL提供的都是最基本的功能,上層應用的庫還是要自己封裝  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-30 22:13 鐘謝偉

            工具拿來用就成,什么合適就用什么,這是很簡單的道理,沒有任何一種語言是萬能的。庫的存在還是提高了很大的開發效率
            適合則用,不適合就丟棄,用別的,樹挪死,人挪活嘛!  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 01:52 華夏之火

            @鐘謝偉
            確實,如果沒有那么多要求,庫能提高開發效率,就算是再差的框架類庫,好比MFC,也都能夠起到很大的作用。只是,用糟糕的類庫,做出來的,也都是糟糕的產品。我們在使用一個類庫,類庫也同時在要求我們的設計,必須符合它的使用條件。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 08:44 marvin

            關于語言,可以看看我的博
            http://cnblogs.com/chrome  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 09:59 溪流

            哈哈,說得好  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 10:28 guilin

            難道這就是前幾天有篇文章寫得C程序員的優越感?觀點簡直不值得一駁,c++的高質量庫多到你不可想像,僅舉幾個有代表性的庫

            boost (全面的庫, 網絡 單元測試 序列化 文件操作等等都有了)
            補充幾個:
            thrift, protobuf (序列化)
            google-perfertools (內存分配器,性能分析)
            google test, google mock(單元測試)
            google log (log 庫)
            google flags(命令行參數庫)

              回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 11:33 華夏之火

            @guilin
            BOOST這種將大部分精力用在語法糖上的玩意,不提也罷。當然,BOOST里面也有好幾個能做實事的好東西。至于GOOGLE的開源庫,確實不錯,只是數量也太少了,遠遠沒法滿足日常開發的需要  回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2012-05-31 13:18 qq

            @華夏之火
            地球已經容不下你了,快去火星吧  回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2012-05-31 13:29

            mfc不錯
            atl也不錯,就是比較復雜。
            還是商業庫靠譜啊。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 13:45 YzL

            完全看不出跟C++有什么直接的關系,說的問題基本都是自身對C++不熟而產生的問題,根本不足以說明C++就怎么怎么樣。

            說C、Java好東西多就是很好,而說C++特性多就是分散精力,如果特性多也能算缺點,那只能說明你對每項特性都不夠了解,才會出現所謂的“選擇太多,分散精力”。

            其他語言內置類庫多這就意味著不用經常寫可通用/復用的類?而C++因為要經常寫就“產出一堆不成熟的通用類”,其他語言不經常寫反而產出的都是高質量類庫?太扯了吧,類庫質量完全取決于程序員水平,跟語言本身有半毛關系?

            優秀高質量的開源C++庫多不勝數,涉及的領域眾多,有哪個語言的內置類庫能涵蓋/比得上這些更專業的類庫?更別提其他收費的類庫了,估計你做的開發太少,沒用到罷了。
            Boost、ACE、Xerces-C++、Crypto++、gSOAP、POCO、wxWidgets、Qt、OpenCV、Intel TBB、IBM ICU、Google Skia、Google V8……
            說Boost“大部分精力用在語法糖上”,你讀過幾個Boost庫的源碼?說BOOST_FOREACH之類的是語法糖可以,但asio、regex、pool、shared_ptr等好多都是很常規的C++類設計,十分復雜的模版技巧也不是特別多,何來大部分之說?  回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2012-05-31 13:46 春秋十二月

            基本認同作者的看法,對c++恰到好處的運用,兼顧設計和性能,依賴于程序員高超的設計水平和駕馭能力。通過學習這門學術性強的復雜語言,鍛煉了思維能力。至于實際開發用不用它,一看個人興趣和能力,二看軟件需求目標。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 14:30 華夏之火

            慚愧,你提到的那些,確實有好幾個沒仔細用過。我考察了一些知名類庫之后,基本上都是那個模樣,抽象過多,使用又甚是不便,這些類庫原本可以采用更加簡單的設計方案,真正能讓我稍微心服也只有STL,不免得出了以偏概全的結論。而反觀C的庫,總是那么簡潔,直接反映了其所要解決的問題的核心,至于JAVA、C#等語言,因為語言本身已經統一了很多細節問題,它們的類庫用起來反而省事多了,就算它們要寫通用性的類,起碼也不用像C++那么多數量,而且就算要寫,也無須考慮太多細節問題,都是直接問題領域的@YzL
              回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 14:35 華夏之火

            @春秋十二月
            現在寫C++代碼,非常小心謹慎的使用里面的特性。就算是定義一個新的類,也要權衡再三,并且盡量保持這個類的成員函數的數量要盡可能的少  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 23:02 春秋十二月

            @華夏之火
            該用就用,有時并不完全是語言的問題,而是設計,好的設計勝過語言的特性,面向對象的設計一般要遵循以下原則 1)SRP:單一職責 2)OCP:開放封閉 3)DIP:依賴倒置 4)ISP:接口隔離等等。寫一個類僅完成功能并不難,難的是怎么合理方便使用它,怎么保證安全高效,對象內存怎么管理,怎么與其它類交互協作等等,而這些都更多是設計的問題。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-05-31 23:57 華夏之火

            兄臺的面向對象思想還是停留在這個幾大原則的初級階段。在下現在寫代碼,才不管什么原則,大多數類都能嚴格地保持自身的獨立,然后再用頂層代碼將這些類組織起來@春秋十二月
              回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-01 00:08 春秋十二月

            @華夏之火
            呵呵,我倒想看看你的代碼  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-01 00:15 華夏之火

            以后有機會的,我會將一些不涉及版權問題的代碼發上去。之前一時技癢,也在博客上寫了一點玩具代碼,唉,那些代碼,現在看來,自己都覺得難受@春秋十二月
              回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-01 00:34 春秋十二月

            好的 我期待 相互學習 共同提高  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-03 00:42 10年碼農

            "只是,人生何其寶貴,將它們浪費在C++上,實在有點不值得。", 對于一個日復一日,年復一年,打算寫到老的碼農來說,用C++是最能積累經驗的語言。

            C++已經深入骨髓,沒辦法改了。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-04 00:03 華夏之火

            我也深受C++毒害,咱倆算是同病相憐@10年碼農
              回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2012-06-04 15:59 chen

            test www.baidu.com  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-05 09:36 nullpointer

            缺少好用的,高質量的類庫確實是C++開發者心中永久的痛。。。  回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2012-06-06 13:08 bluesea

            @YzL
            同意,尤其C++能做到“特性”之間的“松耦合”,基本讓你可以做到一定程度上的“隨心而欲”:)  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-16 17:04 jrry7

            不是語言問題,類庫需要一個大公司推廣投入。c++不屬于某個公司,同樣 c 也沒有一個通用大類庫。

            另一個原因,大類庫,通常包含很多操作系統相關的東西。如果要做到跨平臺,肯定不如原生來得快,特性也不如原生的豐富。java這種不在意性能的語言,人們不太計較。如果是c++,肯定就頗有微詞. 人們用c++的目的,就是要全面控制系統。如果跨平臺抽象,某些細節就無法控制,結果還是自己開發基于原生平臺的庫去了。所以像 qt 這樣優秀的庫,還是無法廣泛使用。  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-06-18 09:21 華夏之火

            @jrry7
            也許C++本身就不容許一統天下的東西存在。它喜歡自由、多樣化的世界。就算沒有性能的要求,開發人員都有自己喜歡的風格口味,眾口難調  回復  更多評論   

            # re: 試論C++類庫開發之難 2012-07-09 16:37 哥沒注冊

            @YzL
            BOOST這些東西,不是說不好,而是因為他沒標準化。
            其實對大多數非高端的程序員來說,關心的不是有沒有菜,有多少種菜,而是面前是否有盤菜。
            C++程序真的很尷尬,面前只有一盤STL算盤大菜。其他實用性強點的庫,多,多得眼花繚亂,多得沒有3,5年經驗根本無從選擇
              回復  更多評論   

            # re: 試論C++類庫開發之難 2012-07-09 17:09 華夏之火

            說得好,關鍵是這盤菜是否標準化,能否到處通吃。@哥沒注冊
              回復  更多評論   

            # re: 試論C++類庫開發之難[未登錄] 2013-01-10 17:43 xxxx

            不同領域有不同領域的應用。不會用java去寫操作系統和數據庫,也不會用c++去寫應用領域的快速開發程序。
            這樣評判c++實在是比較好笑的事情。  回復  更多評論   

            # re: 試論C++類庫開發之難 2013-11-02 02:52 vipcxj

            有一點還是很贊同LZ的,有時太靈活也不是好事。選擇太多往往使人瞻前顧后,影響開發效率。我寫代碼最頭痛的就是變量,函數的命名,總是在考慮標不標準,是否具有代表性,有時一個大小寫都要猶豫幾下,要是我能毫不猶豫的命名,肯定開發效率提高一倍。事實上有太多選擇時,瞻前顧后是必然的,并不是靠意志力就能克服的。所以如果給C++IDE加個功能,限制C++語法,去掉絕大多數不常用的功能,只有當找不到替代時才暫時放開限制,估計能大大提高開發效率。  回復  更多評論   

            # re: 試論C++類庫開發之難 2014-05-03 12:06 無雪

            樓主只做過碼農,沒有真正做過一次真正的程序員,所以才有此說,這在中國太普遍了,因為在中國還真的沒有幾個公司需要寫系統級的軟件,當你需要寫系統級軟件(既要軟件的高性能又要軟件的高可維護性,還涉及很多底層的處理)時,才會真正用到C++(含C),假若只是寫一點應用軟件,你還是用其他的吧。

            你所說的所有問題,不是C++的問題,而是你的寫軟件的水平問題,至于所謂的選擇太多,正所謂條條大路通羅馬,你自己選擇一條路就是,沒必要既想東嫁又想西宿。  回復  更多評論   

            # re: 試論C++類庫開發之難 2014-05-03 12:09 無雪

            @vipcxj

            函數、變量的命名有明確的規范,只要按規范做即可,你難道沒有讀過規范嗎?
              回復  更多評論   

            導航

            統計

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品成人久久久久久久| 亚洲精品午夜国产va久久| 久久99国产乱子伦精品免费| 国产精品久久久久影院色| 精品久久久久国产免费| 精品久久久中文字幕人妻| 国产精品久久免费| 久久香蕉国产线看观看99| 一本色综合网久久| 欧美色综合久久久久久| 久久久精品免费国产四虎| 久久久久久国产a免费观看不卡| 久久久www免费人成精品| 亚洲精品无码专区久久久| 久久精品青青草原伊人| 国产精品视频久久久| 亚洲а∨天堂久久精品| 粉嫩小泬无遮挡久久久久久| 99久久精品国产综合一区 | 久久大香香蕉国产| 奇米影视7777久久精品人人爽| 久久精品国产精品亜洲毛片| 久久久亚洲欧洲日产国码是AV | 伊人久久大香线蕉综合网站| 亚洲一区二区三区日本久久九| 亚洲国产成人久久综合一区77| 99精品国产在热久久 | 久久男人Av资源网站无码软件| 99久久精品免费| 久久99国产综合精品女同| 亚洲欧美日韩久久精品第一区| 久久久久久一区国产精品| 久久精品国产精品亚洲毛片| 中文字幕无码久久久| 久久精品免费网站网| a级毛片无码兔费真人久久| 久久精品亚洲中文字幕无码麻豆| 欧美伊人久久大香线蕉综合| 久久人妻少妇嫩草AV蜜桃| 中文字幕无码久久人妻| 欧美亚洲国产精品久久蜜芽|