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 的開發工作?
樂多舊回應