2006年12月4日

C++ library 的發展困境

晨星Workshop 提到:

C++現在最缺乏的就是 library的支援,因為相對於Java及一些script language,C++的lib相對的難以開發,需要考慮到的層面太廣了,像是記憶體管控、型別轉換,以及不同平台的實作,造成lib開發的不易

我倒不覺得這些是 C++ library 難以開發的原因。對 C 語言老手來說,那些都是家常便飯。不同平台的實作,多數 C/C++ programmer 都會依循 POSIX 規範內容,也會自定抽象型別以擺脫特定平台相依度。 C/C++ programmer 傳統上透過抽象化的程式設計介面 (programming interface) 實現跨平台的設計目標。而 Java/.Net 則是乾脆在實體作業系統之上再多架一個虛擬機器,將實作細節隱藏在作業環境之下,而不是程式設計介面之下。兩者差異在於,虛擬機器讓軟體的運行環境跨平台, Java/C# programmer 實際上是在單一平台上撰寫程式;抽象化程式設計介面則是讓 programmer 撰寫的程式碼跨平台。有點饒舌,也有點無關緊要。然而, POSIX 規範的是作業系統層級的程式設計介面,不包含使用者介面的部份,所以 C/C++ programmer 在設計 window application 時,將會面臨平台差異性問題。所幸這是個 web application 當道的時代, C/C++ programmer 專心開發 server 和 model 就行了,那才是 programming language 擅長的領域。

回到「C++ library 難以開發的原因」之議題,我以為不是晨星所例舉者,但我仍然承認 C++ library 難以開發。我個人認為 template 才是原因。要開發 C++ library 就要跟 template 打交道,但就我的經驗來看,用一般語法開發應用軟體和用 template 語法開發 library 簡直是兩碼子事,幾乎是不同的軟體設計經驗。我總覺得 C++ 中有一層厚厚的濃霧將 template 包圍起來。或者反過來說,是 template 用一層厚厚的濃霧將 programmer 包圍起來。讓 C/C++ programmer 開發 application 和 library 時的感受,像是穿梭陰陽界。

從傳統 C 到近來的 Java/C# ,乃至動態語言中的 Python, PHP, Ruby 甚至 JavaScript ,設計 application 和設計 library 的經驗沒什麼不同。在 application 開發過程中撰寫的 class ,大部份都可以直接包裝成 library 。但是 C++ 呢?搖搖頭,嘆口氣。我寧願用 C 開發 library ,要用 C++ 開發 application 時,再將 C library 中的 functions 封裝進 C++ 的一般 class 來調用,而不是直接開發一個 template class 。在 CSDN 的《程序員》雜誌 2006 年 6 月刊中有一句話這麼說「 C 語言萬壽無疆, C++ 無壽無疆」,我不得不認同這話。


Posted by shirock at 樂多Roodo! │23:43 │回應(1)引用(2)C/C++
樂多分類:網路/3C 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/2546332
引用列表:
很多程式語言,沒有奧妙的 template ,一樣漂亮地完成同樣的工作。它們讓 programmer 覺得寫 library 和 application 是一樣的事
C library 的發展困境, part 2【石頭閒語】 at 2006年12月20日 00:14
Write only one Control/Model with two or more Views
Markup language 對應用軟體設計工作的影嚮,以及微軟的 WPF/XAML 策略【石頭閒語】 at 2007年01月8日 23:58
回應文章
小弟以為 C++ library 之所以難以開發的主因是 interface, 而不是 template. 請參考 不是李白也能 C++.
Posted by fr3@K at 2008年06月15日 14:19