January 16, 2006

思索 C++

小時候,拜讀完 jjhou 前輩的大作《深入淺出 MFC》,並由書中的 MFClite 作延伸,做出類似 Borland Kylix 的 CLX framework,但是透過 Qt 來實做 GUI 的 classes。整個「移植」的工作大概從大學一年級開始,而在大二告一段落 (大約是我加入 Free Qt 的開發,不過沒多久,Trolltech 就以 GPL/QPL 釋出 Qt/X11),那個時候,我天真的以為自己懂 C++。長大後,一邊 trace g++,一邊讀 ISO C++ Standard,才知道過去是愚昧的,比井底之蛙還不如,這只能援用蘇格拉底的話:「我唯一所知的,就是我一無所知。」。

這幾天沒有體力 coding,就整理 bookmark、在床上思考。今天我又回到 C++ Programming 的議題,Mozilla 當初以 MPL (以及第三方授權) 釋出 source code 時,Mozilla.org 也整理許多相當重要的文件,其中 [C++ portability guide] 是相當經典的,很多專案都會有類似的文件,要求一定程度的可攜性,不過 Mozilla.org 這分文件很特別,因為當時 Netscape 被要求在二十種不同的平台運作,而 Mozilla 最核心的部份就是 XPCOM 與 NSPR,要跨越這麼多平台,勢必需要做出妥協,不僅需要為了 gcc 作 workaround,像是 SCO 或 HP-UX 這種系統,更是一大挑戰。

[C++ portability guide] 一文的共同維護者 Scott Collins 在 blog [ Writing Portable C++ ] 提到,他認為該文已經相當舊,多少不合時宜,引述他對於 C++ portability 的 看法:
    My only interest is in learning from the Mozilla team's experience in porting applications.

    Write standard C++, use the standard libraries, including Boost, require a modern compiler and conforming standard libraries before a platform can be considered a reasonable target (just say "No" to bad old platforms). Write less code because you use other portable libraries. If I can allow a little bias to creep in---if you really want to write portable/cross-platform apps: use Qt. Don't write your own database, use an existing one that's already portable. Don't write your own file-system interface, use an existing cross platform API as provided by Qt or Boost. Don't write your own object dispatch system. Don't create your own scripting language, insert an engine for Python, Javascript, Ruby, etc. Don't write your own XML parser, use a free portable implementation. Etc., etc.
這引來我高度的興趣,於是,我又回頭看 C++ 老爸列出的 [C++ Applications],許多知名的專案當然有羅列其中,我繼續思索 C++,從這些案例來看 guidelines。
由 jserv 發表於 January 16, 2006 06:21 PM
迴響

關於 just say "No" to bad old platforms 這句話,固然是很方便,不過現實上可能沒這麼簡單喔,某些平台就是沒這麼幸運能夠安裝最新最好的 C++ compiler,宣稱是最新最好的 compiler 也未必完全駕馭得了像 Boost 這種東東。

這一點,Jserv 應該比我更能體會。 :)

至於其他種種 Don't write your own XXX 的建議,除非很不符合需求,或是有惱人的 bug,或是 license 考量,否則應該不會有人故意自找麻煩。

william 發表於 January 16, 2006 07:46 PM

Self trackback:

Can't just say "No" to bad old programmers
http://www.jeffhung.idv.tw/blog/articles/jeffhung/424/

jeffhung 發表於 January 16, 2006 11:16 PM