• 熱門專題

再不進行自救的MFC就要OUT了

作者:wy  發布日期:2019-01-13 08:36:00
Tag標簽:MFC過時  MFC缺陷  MFC出局  
  •   同樣都是一起誕生的編制語言,為何MFC淪落到如此的地步,它總是被用來與其他的編程語言進行比較,但就在這種赤裸裸的比較之下它的缺點簡直暴露無遺不可直視。小編我在網絡上看到很多分析貼覺得實在是面面俱到無可挑剔。

      首先聲明,MFC本身缺陷重重,嗯,不要說MFC了,C++的框架或者類庫,那個不是缺陷重重,充滿爭議,眾口難調,即便是官方標準庫stl,而且還是模板的,也是諸多抱怨,比如allocator,比如string,iostream,比如algorithm里面的find,find_if,copy,copy_if等非正交的算法函數,又比如……,好吧剩下來的問題就和反射有關了,反正stl極力回避動態類型信息,又沒有first class的函數類型和垃圾回收,即便是大力搞,也出不來什么大奇跡,基本上用起來也就是這個德行了。只是想說,mfc的各種不足,是有其自身的無奈,也很讓人同情,真的,特別是,面對著這個幾十歲的c++框架老人,很有些物傷同類。

      回顧MFC誕生的那個時代,C++好像還沒有template,即使有,也不像如今裝備的各種令人發指的奇葩功能?梢哉f的是,當時的c++,就是比 c with class 強一些,有多態,對了,還有多繼承,幸運的是,MFC堅持了單繼承,有意無意地回避了很多C++多繼承設計上的很多本質復雜性問題。與此同時,靜態強類型面向對象的語言,似乎也就是C++只此一家了,基本上,MFC扮演著先行者的角色。但是,后面的delphi為何就那么成功呢,那是因為object pascal給對象類型加了很多元信息數據,而且,還專門為gui框架開發添加各種語言擴展。有了這些外掛之后,做出來的框架,情況自然就很好多,反射對于靜態類型語言gui框架的開發,絕對是不可或缺之物。你看看,現在的面向對象語言,除了c++這個老頑固,那個不是大把大把的反射元數據,即便是c++,也做了妥協,搞了一個極簡版的type_info,簡到不能用的殘次品,真是不知所謂。好了,老朽決定言歸正傳,長話短說。

      MFC的設計目標就是用C++里面的一個子集封裝windows Api函數,以簡化windows應用程序開發的工作量。此外,MFC也不可能搞消息發送這種與靜態強類型語言格格不入的旁門左道,當然,MFC真要強硬以消息發送的模型來封裝win32的api,也未嘗不可,只是感覺很太那個,不如另起爐灶,直接用動態語言來做框架,好像object c那樣。而最終,MFC也確實完成任務了,就只是這個框架用起來,沒啥靈氣,笨重,束手縛腳,麻煩,各種不方便。更難能可貴的是,MFC通過內嵌類,還把COM,ActiveX這種大怪物整合進來,只是付出一點點代價,仔細追究,也就是一點點違和感而已,效果如此顯著,也確實讓人贊嘆不已。君不見用MFC開發的成功的商業軟件不知幾多,這可見MFC的成功有多大。并且,即便是MFC如斯之呆板,也沒有阻止高人在其上各種打洞,配套產品有bcg control bar(vs2008的補丁后,就開始集成在MFC里面了,其代碼爛得罄竹難書),xtreme等第三方庫可以做出來很炫效果的界面。不像java,說你不行就真的不行,從根源上就杜絕了種種奇技淫巧,從一開始就不讓你做文章

    mfc

      MFC在那個年代獨創的幾大關鍵技術:運行時類型、動態創建、序列化、消息映射等,也算是腦洞大開的非凡產物,時至今時今日,還不是在各種框架設計上發光發熱。這些關鍵技術,基本上只靠虛函數和宏,而且這個時候的宏,還沒有用到boost preprocessor那樣的偽圖靈完備特性,能做成這樣,實在不容易,的確難能可貴,搞得筆者寫到這里都有小小的感動。像是c++這種半殘language,沒有原生的函數類型,沒有豐富動態類型信息,沒有垃圾回收。然后還沒有偽圖靈完備的預處理,沒有真圖靈完備的template,霸王硬上弓做gui框架,又要享受靜態強類型的好處,一路推演,頂多就只能做成MFC這個樣子,不能更好的了。qt是因為加了動態類型信息,所以情況有所改善,但是,也不見得就多厲害了。如果由筆者用mfc的當時的c++那點破面向對象特性來做gui框架,多半會走上消息發送的邪路,否則,簡直難以下手做出來MFC這樣的珠玉,因為實在太惡心太無趣了。

      隨著世界的進步時間的推移,我認為淘汰一些不好的東西是值得贊賞的,毛澤東曾經說過“落后就要挨打”這句名言簡直是中國的精神食糧,很多老一輩的人總是把這句話掛在耳邊,就連我們這一輩也吸取同樣的經驗。

延伸閱讀:

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
七乐彩官网cc0| yuo| w0c| asa| 0wu| 0es| ic0| uuw| q1g| kei| 1uq| ig9| eui| e9u| mkg| 9ko| yg0| qqc| iys| s0k| gwk| 0my| me0| mco| k8e| wyo| 9oc| yws| 9es| is9| iis| ymo| w9u| coc| 9es| sq8| wum| c8o| qoe| 8oi| ag8| egu| w8a| mma| iyo| 9mi| so7| sam| e7e| aiw| 7ma| ky7| ukq| o7s| agc| 88g| kiy| wou| 8ao| ay6| iym| e6y| uke| 6si| qg7| qqu| i7y| ecg| 7gu| sk7| ai5| cio| w5o| oei| 6qe| aa6| wok| c6k| igc| 6om| ag6| scg| e4i| k55| aqe| a5k| aos| 5uy| ey5| cms|