2006年12月19日

C++ library 的發展困境, part 2

jeffhung 在 HEMiDEMi 中回應:應該是因為不懂 template 的奧妙,才會覺得「C++ 中有一層厚厚的濃霧將 template 包圍起來」吧?(HEMiDEMi - 共享書籤 - C++ library 的發展困境)。我其實很欣賞 template 的概念,卻也因此我才說 template 是「C++發展困境」的原因。


如迷霧般奧妙的 Template

C++ 的發展困境在於 library 的發展速度慢 (Bjarne Stroustrup 說的) ,所以需要更多人投入這份工作。而我覺得「奧妙的 template 」很難搞,所以很多人心有餘而力不足。算算資歷,我在 1996-2002 年這段期間,用 C/C++ 在 Linux/FreeBSD 下寫系統程式,那時候 template 與 STL 還在討論及推廣階段,可是我依然用 C++ 用的很開心,還把很多 C library 封裝成 C++ class (沒用 template)。後來興趣轉到 web application ,玩起 Perl/PHP/JavaScript 等各種動態程式語言。隔了幾年沒用 C++ ,暮然回首發現 template/STL 突然長大了,感覺非常陌生。

Steve Donovan 在《Overdoing C++ templates》中描述的情形,正是我所謂「C++ 中有一層厚厚的濃霧將 template 包圍起來。或者反過來說,是 template 用一層厚厚的濃霧將 programmer 包圍起來」的感覺。有時候我可以很抽象的操作一個 object ,但有時候又必須關注到具體的細節,這種忽隱忽現,若即若離的感覺,真的很不好。無獨有偶,我也同 Steve Donovan 一般,喜歡用自定的 string class 取代 std::string ,顯然我們都不喜歡這種感覺。我這種佔程序人員多數比例的中階 programmer 都會被排擠在 template class 的大門外了,不正表示 template class libaray 是少數人才有能力開發的嗎?

其他程式語言不需要 Template

很多動態程式語言,包括比 C++ 早出現的 Smalltalk ,沒有奧妙的 template 一樣漂亮地完成同樣的工作。 Armin Roehrl 整理了一張比較表:Ruby versus Smalltalk versus Objective-C versus C++ versus Java versus Python versus CLOS versus Perl5 versus XOTcl 。從中可以發現 Template 是 C++ 獨有的特性,Ruby, Smalltalk, Python 等則是 Not Needed

那些動態程式語言讓 programmer 覺得寫 library 和 application 是一樣的事,自然 library 甚至是 framework 都能快速發展出來。代表性例子就是 Ruby 和 Ruby on Rails 。反觀 template 曲高和寡, C++ 如何冀望更多人參與 libaray 的開發工作?


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

引用URL

http://cgi.blog.roodo.com/trackback/2583288
回應文章

Hi :
你好,不知道直接叫你石頭成,可以嗎?
有一問題想請教您,關於撰寫C++ Library 的書籍是否可以推薦較好上手的,以及該如何去學習撰寫,謝謝!!
對於C++ Library 搞不定的菜鳥 Simon
Posted by Simon at 2007年12月18日 01:02