精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

有關C語言模塊化實現的探討

開發 架構 后端
怎樣才是好的設計?模塊化是我們經常談論的一個方向,它將復雜的問題分解成小問題,實現高內聚,低耦合。不過,模塊之間的聯系需要遵循的原則,堅持起來是很難的。本文探討了C語言實現模塊化的一些問題。

本文節選自云風的博客上近日的兩篇文章:《好的設計》和《C 語言對模塊化支持的欠缺》。

由于最近幾年用的主要開發語言是 C 和 lua 。那么也打算以此為基礎寫。假定讀者至少有不錯的 C 語言基礎了。我真正想談的是,如何把一個軟件很好的構建起來。到底需要做些什么。(從實現層面看)怎樣才是好的軟件。

那么有一個重點問題,也是老問題,怎樣才是好的設計。

好的設計,必然是容易實現的。它可以很精巧,但不能難以理解。

太陽底下無新鮮事。軟件行業已經發展了這么多年,你想到的東西,肯定有人都想到過了。

每個軟件也都有它的生命期,我們只要在它的生命期內完成它的使命就行了。軟件往往需要盡快的投入使用,然后在使用中演化。這個演化最大可能并不依靠你一個人的力量去推動。隨著參與的人增加,人和人(指開發人員)的共性就會減少。每個人都看得懂可以充分接受,軟件才不容易向壞的方面演化。

我們常常談模塊化,談高內聚,低耦合。

本質上,就是如何管理復雜度。如何把一件很難的事情(開發一個軟件),分解成小問題,分而治之。

這些小問題之間的千絲萬縷的聯系,是設計人員面臨的最大難題。

有些原則聽起來不錯,但是堅持起來很難。

比如,讓模塊的輸入輸出沒有副作用。你能讓你的模塊每個輸入對對應著唯一輸出嗎?

又比如,讓模塊層次化。如果 A 模塊依賴 B 模塊,B 模塊依賴 C 模塊。一旦出現這個狀態,你能保證 A 模塊絕對和 C 模塊隔絕嗎?更有甚者,讓三個模塊循環依賴這種更糟糕的事情也并不鮮見。

抽象是個好東西。但借助不斷的抽象,問題不斷的包起來,演化成新的巨無霸,顯然會讓事情更糟。雖然最終可能真的能像搭積木一樣去組裝軟件了。或是雇傭更多的程序員填表單一樣的工作,相互不需要對方在做什么。但是,軟件性能卻下降到了不可以忍受的地步。bug 也隱藏的更久,更不可收拾。

好的設計,必須對問題有足夠清晰的理解。有如庖丁解牛一般,把整個問題劃開,在最薄弱的地方分離。其實,做到這點,也就夠了。

解決這些問題,其實跟語言無關。語言之爭是沒有多大意義的。如開頭所說,把設計做好,模塊之間的關系,用足夠簡單的方式就能描述清楚了,大部分流行的開發語言都能做到。

用 C 來實作,而沒有用它的近親 C++ ,也是為了避免狹隘的爭議:我們該用這個特性嗎?該用那個特性嗎?這個形式做是不是好點?那樣會不會有更好的性能?

所謂開發效率,對于個人來說,語言之不同,是會有很大差異。但是那是實現層面的差異。對于完成設計,這個過程,效率和所用語言無關。

實現的階段,程序員可不可以開心的放心的去完成那些接口,這就是衡量設計好不好的指標了。這個時候,一個高開發效率的語言有優勢(更少的代碼量),一個容易掌握的語言也有優勢(可以讓更多的人參于而少犯錯誤)。

#t#對于我的團隊,我會更樂于采用一種讓實現人員更輕松的方式。不用理會太多的語言細節,不用在投入開發前學習更多的概念(尤其是這個項目獨有的),不用特別嚴格的 code review 也可以允許大家提交新的代碼,切不至于輕易的引入 bug 。

我相信,軟件做到后面,設計人員不需要親自寫太多代碼。雖然我現在每天還是大量的寫,也并不覺得枯燥。

事必恭親是不好,但并不是說,你給實現人員足夠信任就可以放手的。真正讓你放手的只能是,你做出了好的設計,無論是誰,他也寫不壞它。這時,是你樂意自己寫,還是多找幾個同學幫忙寫,已經不重要了。

#p#

那么我們來討論一下怎樣構建一個(稍具規模的)軟件。我選擇用 C 為實現工具來做這件事情。就不得不談語言還沒有提供給我們的東西。

模塊化是最高原則之一(在 《Unix 編程藝術》一書中, Unix 哲學第一條即:模塊原則),我們就當考慮如何簡潔明快的使用 C 語言實現模塊化。

除開 C/C++ ,在其它現在流行的開發語言中,缺少標準化的模塊管理機制是很難想象的。但這也是 C 語言本身的設計哲學決定的:把盡可能多的可能性留給程序員。根據實際的系統,實際的需要去定制自己需要的東西。

對于巨型的系統(比如 Windows 這樣的操作系統),一般會考慮使用一種二進制級的模塊化方案。由模塊自己提供元信息,或是使用統一的管理方案(比如注冊表)。稍小一點的系統(我們通常開發接觸到的),則會考慮輕量一些的源碼級方案。

首先要考慮的往往是模塊的依賴關系和初始化過程。

依賴關系可以放由鏈接器或加載器來解決。尤其在使用 C 語言時,簡單的靜態庫或動態庫,都不太會引起大的麻煩。

C++ 則不然,C++ 的某些特性(比如模板類靜態成員的構造)必須對早期只供 C 語言使用的鏈接器做一些增強。即使是精心編寫的 C++ 庫,也有可能出現一些意外的 bug 。這些 bug 往往需要對編譯,鏈接,加載過程很深刻的理解,才能查出來。注:我并不想以此來反對使用 C++ 做開發。

我們需要著重管理的,是模塊的初始化過程。

對于打包在一起的一個庫(例如 glibc ,或是 msvcrt ),會在加載時有初始化入口,以及卸載時有結束代碼。我想說的不是這個,而是我們自己內部拆分的更小的模塊的相互依賴關系。

誰先初始化,誰后初始化,這是一個問題。

在 C++ 的語言級解決方案中,使用的是單件模塊。要么由鏈接器決定以怎樣的次序來生成初始化代碼,這,通常會因為依賴關系和實際構造次序不同而導致 bug (注:我在某幾本 C++ 書中都見過,待核實。自己好久不寫 C++ 也沒有實際的錯誤例子);要么使用惰性初始化方案。這個惰性初始化也不是萬能的,并且有些額外的開銷。(多線程環境中尤其需要注意)

我使用 C 語言做初期設計的時候,采用的是一種足夠簡單的方法。就是,以編碼規范來規定,每個模塊必須存在一個初始化函數,有規范的名字。比如 foo 模塊的初始化入口叫

  1. int foo_init()  
  2.  

#t#規定:凡使用特定模塊,必須調用模塊初始化函數。

為了避免模塊重復初始化,初始化函數并不直接調用,而是間接的。類似這樣: mod_using(foo_init);

mod_using 負責調用初始化函數,并保證不重復調用,也可以檢查循環依賴。

在這里,我們還約定了初始化成功于否的返回值。(在我們的系統中,返回 0 表示正確,1 表示失?。┤缓蠖x了一個宏來做這個使用。

  1. #define USING(m) if (mod_using(m##_init,#m)) { return 1; }  
  2.  

注:我個人反對濫用宏。也盡可能的避免它。這里使用宏,經過了慎重的考慮。我希望可以有一個代碼掃描器去判斷我是否漏掉了模塊初始化(可能我使用了一個模塊,但忘記初始化它)。宏可以幫助代碼掃描分析器更容易實現。而且,使用宏更像是對語言做的輕微且必要的擴展。

這樣,我的系統中模塊模塊的實現代碼最后,都有一個 init 函數,里面只是簡單的調用了 USING 來引用別的模塊。例如:

  1. #include "module.h"  
  2.  
  3. /*  
  4.   我個人偏愛把 module.h 的引入放在源文件最后,初始化入口之前。  
  5.   它里面之定義了 USING 宏,以及相關管理函數。  
  6.   這樣做是為了避免在代碼的其它地方去引入別的模塊。  
  7. */ 
  8.  
  9. int 
  10. foo_init()  
  11. {  
  12.   USING(memory);  // 引用內存管理模塊  
  13.   USING(log);  // 引用 log 模塊  
  14.  
  15.   return 0;  
  16. }  
  17.  

至于模塊的卸載,大部分需求下是不需要的。今天在這里就不論證這一點了。

責任編輯:yangsai 來源: 云風的Blog
相關推薦

2011-05-13 15:54:50

C模塊化

2011-05-13 15:46:49

C模塊化

2024-07-01 12:48:00

C++內部類開發

2022-09-21 11:51:26

模塊化應用

2016-12-14 14:50:26

CSS預處理語言模塊化實踐

2019-08-28 16:18:39

JavaScriptJS前端

2020-09-17 10:30:21

前端模塊化組件

2020-09-18 09:02:32

前端模塊化

2010-01-21 09:27:30

模塊化的優點NetBeans

2009-08-17 10:11:12

C# Windows

2021-04-06 10:19:36

Go語言基礎技術

2010-03-11 17:24:27

Python編程語言

2022-09-05 09:01:13

前端模塊化

2016-10-09 11:03:41

Javascript模塊化Web

2023-12-25 22:24:36

C++模塊Module

2017-05-18 10:23:55

模塊化開發RequireJsJavascript

2013-08-20 15:31:18

前端模塊化

2022-03-11 13:01:27

前端模塊

2015-10-10 11:29:45

Java模塊化系統初探

2021-07-14 09:26:51

UPS電源模塊化
點贊
收藏

51CTO技術棧公眾號

国产精品一国产精品k频道56| 678在线观看视频| 久久aⅴ国产欧美74aaa| 九九久久久久99精品| 日本一区二区免费视频| 美女国产在线| 成人国产精品免费观看视频| 欧美精品午夜视频| 国产偷人妻精品一区| 黄在线观看免费网站ktv| 国产片一区二区| 95av在线视频| 探花视频在线观看| 国产尤物久久久| 色一情一伦一子一伦一区| 亚洲va久久久噜噜噜久久狠狠 | 亚洲澳门在线| 日韩国产在线播放| 亚洲五月激情网| 快播电影网址老女人久久| 亚洲午夜电影在线| 中文字幕精品一区日韩| 欧美一区二区三区少妇| 国产电影一区在线| 97精品国产91久久久久久| 久久久99999| 欧美人与物videos另类xxxxx| 欧美综合色免费| 精品无码一区二区三区爱欲| 毛片免费不卡| 国产精品系列在线| 欧美另类网站| 天堂中文资源在线| 国产一区不卡视频| 国产综合福利在线| 草莓视频18免费观看| 亚洲国产一区二区三区高清| 九九精品在线视频| 男的操女的网站| 欧美xxxxx视频| 中国人与牲禽动交精品| 97超碰在线资源| 黄色成人小视频| 在线观看成人小视频| 国产免费成人在线| 国产成人午夜| 中文字幕日韩精品一区| 亚洲国产一区二区三区在线播 | 翔田千里88av中文字幕| 成人综合日日夜夜| 欧美日本视频在线| 日本免费色视频| 偷拍自拍亚洲| 91精品欧美综合在线观看最新| 久在线观看视频| 91超碰在线| 精品久久久中文| 激情综合在线观看| 奇米777日韩| 欧美在线视频不卡| 91丨九色丨蝌蚪| 成人国产精品久久| 日韩视频国产视频| 黄色激情在线观看| 人人香蕉久久| 亚洲性视频网站| 亚洲色图27p| 亚洲精品播放| 伊人伊人伊人久久| 久久国产高清视频| 欧美成人精品| 91av在线精品| www.久久视频| 国产在线不卡一卡二卡三卡四卡| 国产精品久久久久久久久久| 亚洲一区精品在线观看| 国产精品1区2区3区| 国产伦精品一区二区| 欧美日韩影视| 中文字幕色av一区二区三区| 久久av综合网| 性欧美freehd18| 欧美一级高清片| 毛片毛片毛片毛| jizz性欧美2| 亚洲欧美另类中文字幕| 亚洲永久无码7777kkk| 丁香5月婷婷久久| 亚洲欧美日韩成人| 成人免费视频国产免费观看| 精品999日本| 国产精品久久久久久影视| 国产偷拍一区二区| 91在线高清观看| 超碰成人在线免费观看| 日韩成人影视| 亚洲成人精品一区| 簧片在线免费看| av日韩在线播放| 中文字幕亚洲国产| 久久久久久久久久久网| 日韩在线一区二区| 国产精品国色综合久久| 亚洲国产剧情在线观看| 国产日韩欧美麻豆| 女人帮男人橹视频播放| 免费高清视频在线一区| 亚洲精品一区二区三区精华液| 国产一精品一aⅴ一免费| 国产一区二区三区电影在线观看| 亚洲三级av在线| 日韩a级片在线观看| 欧美视频二区| 国产精品亚洲第一区| 欧性猛交ⅹxxx乱大交| 中文字幕一区二区三| 国产精品一区二区免费在线观看| 卡通欧美亚洲| 精品久久久久99| 99久久人妻无码中文字幕系列| 日韩高清一级| 久久男人的天堂| 国产精品欧美激情在线| 国产亚洲欧美日韩日本| 九九九九九精品| 欧美xxxx黑人又粗又长| 欧美精品色综合| www..com.cn蕾丝视频在线观看免费版| 精品国产一区二区三区噜噜噜| 中文字幕视频一区二区在线有码| 久草视频手机在线| 蜜桃av一区二区| 日本黄网免费一区二区精品| 欧美激情网站| 亚洲精品久久久久久久久久久久久| 97伦伦午夜电影理伦片| 亚洲国产网站| 好看的日韩精品| 欧美xxxx免费虐| 日韩精品一区二区三区四区 | 日本不卡电影| 午夜精品福利视频| 东京干手机福利视频| 亚洲色图.com| 美女被艹视频网站| 综合一区在线| 亚洲a成v人在线观看| 免费高清在线观看| 欧美精品自拍偷拍动漫精品| 国产精品麻豆免费版现看视频| 亚洲小说欧美另类社区| 91久久大香伊蕉在人线| 国产乱子伦三级在线播放| 欧美性猛交xxxx富婆弯腰| 欧洲一级黄色片| 亚洲欧美视频| 欧美精品中文字幕一区二区| 欧美日韩国产v| 国产亚洲一区二区在线| 欧美 亚洲 另类 激情 另类 | 中文字幕国产综合| 日韩中文字幕亚洲一区二区va在线| 成人av播放| 黑人精品视频| 亚洲激情自拍图| 国产免费一区二区三区四区五区 | 欧美体内she精视频| 欧美福利第一页| 久久99久久精品| 日本亚洲导航| 国产福利亚洲| 精品一区二区三区电影| www.色小姐com| 成人黄色小视频在线观看| 91猫先生在线| 区一区二视频| 97中文在线观看| 天堂电影一区| 亚洲一区www| 国产精品爽爽久久| 国产精品日产欧美久久久久| 中文字幕av一区二区三区人妻少妇| 日韩大片在线| 97在线电影| 日韩欧美另类一区二区| 日韩视频欧美视频| 四虎永久在线观看| 亚洲一二三区不卡| 中文字幕第3页| 亚洲国产婷婷| 亚洲午夜精品一区二区| 97精品久久| 国产精品老牛影院在线观看| 国产精品实拍| 日韩精品在线免费观看| 91一区二区视频| 精品久久久视频| 男女性高潮免费网站| 91麻豆免费观看| 久久精品无码一区二区三区毛片| 91精品国产乱码久久久久久| 成人网在线免费观看| 超碰激情在线| 久久艳片www.17c.com| 你懂的在线看| 欧美视频在线观看一区| 国产性70yerg老太| 中文字幕va一区二区三区| 国产精品igao| 欧美午夜a级限制福利片| 特级西西444www大精品视频| 东京久久高清| 亚洲精品日韩激情在线电影| 五月婷婷视频在线观看| 中日韩美女免费视频网站在线观看| 一级片免费观看视频| 偷拍一区二区三区| 三级影片在线看| 国产精品你懂的在线| 欲求不满的岳中文字幕| 亚洲一区中文| 久久久久久www| 亚洲成人日韩| 曰韩不卡视频| 北条麻妃国产九九九精品小说| 成人av在线亚洲| 日韩欧美精品电影| 欧美怡红院视频一区二区三区 | 欧美不卡视频一区发布| 亚洲精品免费在线观看视频| 精品视频1区2区3区| 依依成人综合网| 天涯成人国产亚洲精品一区av| 亚洲欧洲一二三| 国产精品欧美三级在线观看| 成人看片人aa| sm久久捆绑调教精品一区| 成年无码av片在线| 国产精品一区二区三区视频网站| 亚洲韩国欧洲国产日产av| 国产超碰人人模人人爽人人添| 香蕉久久一区二区不卡无毒影院| 国产女主播喷水高潮网红在线| 久久精品国产一区二区三| 蜜臀精品一区二区| 韩日在线一区| 国产 日韩 欧美在线| 亚洲东热激情| 免费无码不卡视频在线观看| 99精品视频免费观看| 一区二区视频在线观看| 成人激情免费视频| 亚洲春色综合另类校园电影| 色天天久久综合婷婷女18| 一本一道久久a久久精品综合| 日韩精品欧美大片| 就去色蜜桃综合| 精品国产一级毛片| 中文字幕一区二区中文字幕 | 日韩黄色在线观看| 成人亚洲视频在线观看| 亚洲经典在线| 免费在线观看亚洲视频| 欧美一区二区| 亚洲一区二区三区涩| 日韩影视高清在线观看| 欧美韩国日本精品一区二区三区| 中文字幕区一区二区三| 国产一区二区三区四区五区在线| 精品91福利视频| 国产精品普通话| 一区二区三区无毛| 国产精品三区www17con| 在线一级成人| 色中文字幕在线观看| 成人一区二区| 亚洲一区 在线播放| 亚洲久色影视| 一本岛在线视频| 国产v日产∨综合v精品视频| 99久久人妻精品免费二区| 高清在线不卡av| a毛片毛片av永久免费| av在线综合网| 欧美日韩中文字幕视频| 亚洲黄一区二区三区| 少妇一级淫片免费放中国| 欧美视频一区二区三区在线观看 | 亚洲精品一区二区三区四区高清| 99热这里只有精品66| 亚洲国产成人精品女人久久久 | 桃花色综合影院| 色999日韩欧美国产| 欧美激情办公室videoshd| 欧美俄罗斯性视频| 日韩福利一区| 99久热re在线精品视频| 精品国产乱码久久久| 国产 欧美 日韩 一区| 日韩国产精品久久久久久亚洲| 九九视频精品在线观看| 国产成人99久久亚洲综合精品| 少妇伦子伦精品无吗| eeuss国产一区二区三区| 国产wwwwxxxx| 欧美午夜精品在线| 精品国产九九九| 欧美va日韩va| 91在线导航| 欧美一级高清免费播放| 激情开心成人网| 国产精品一区二区三区四区五区| 欧美丝袜足交| 警花观音坐莲激情销魂小说 | 欧美高清激情视频| 九九九伊在线综合永久| 韩日午夜在线资源一区二区 | 青草影院在线观看| 亚洲图片欧美综合| 国产精品亚洲欧美在线播放| 精品国产伦一区二区三区观看方式| 少妇av一区二区| 欧美成年人视频网站欧美| 岛国一区二区| 欧美一级二级三级| 亚洲欧美视频| 粉嫩av蜜桃av蜜臀av| 欧美日韩国产精品一区二区三区四区 | 国产精品久久久久久久app| 成人精品动漫一区二区三区| 日本特级黄色大片| 美女性感视频久久| 欧美激情亚洲色图| 色婷婷av一区二区三区软件 | 亚洲精品国产综合区久久久久久久| 国产黄色片在线观看| 国产91精品黑色丝袜高跟鞋| 粉嫩久久久久久久极品| 成人在线免费高清视频| 国产精品中文有码| 懂色av懂色av粉嫩av| 欧美一卡二卡三卡四卡| bestiality新另类大全| 亚洲在线观看视频| 亚洲一区在线| 香蕉视频1024| 亚洲国产成人精品视频| 国产字幕在线观看| 欧美哺乳videos| 成人福利网站| 超碰97人人人人人蜜桃| 欧美日韩亚洲一区| 国产精品一区二区羞羞答答| 国产欧美一区二区精品性色超碰| 国产精品19乱码一区二区三区| 欧美性一二三区| 色的视频在线免费看| 91av网站在线播放| 自拍欧美一区| 香蕉视频禁止18| 亚洲日本在线视频观看| 性一交一乱一色一视频麻豆| 久久久久久中文| 秋霞综合在线视频| 91色国产在线| 综合久久综合久久| 欧美 日韩 人妻 高清 中文| 91国产美女在线观看| 欧美精选一区二区三区| www.五月天色| 五月天婷婷综合| 国产精品99999| 91丝袜脚交足在线播放| 久久影视一区| 精人妻一区二区三区| 亚洲精品视频一区二区| 欧美自拍偷拍第一页| 国产精品久久久久久久7电影 | 一道本无吗dⅴd在线播放一区| 麻豆国产在线| 天天好比中文综合网| 国产乱码一区二区三区| 国产美女久久久久久| 日韩精品一区二区三区四区 | 影音先锋黄色网址| 草民午夜欧美限制a级福利片| av成人在线网站| 日韩精品―中文字幕| 国产精品污www在线观看| 精品区在线观看| 欧美另类高清videos| 欧美日韩中出| 久久久久狠狠高潮亚洲精品| 亚洲欧美综合在线精品| 四虎在线观看| 国产精品96久久久久久又黄又硬| 尤物tv在线精品| 国产精品无码专区av在线播放| 久久精品亚洲乱码伦伦中文 | 日韩精品一级中文字幕精品视频免费观看 |