Posted on March 3rd, 2009 at 9:10 by fr3@K
由於工作需要, 這幾天花了點時間看了 ActiveMQ-CPP 的文件與 source code. 第一印象是 – 這票 Apache 的人會不會太喜歡 Java 了?
ActiveMQ-CPP 是 Apache ActiveMQ (a Message Broker from Apache, written in Java) 的一個 sub-project. ActiveMQ-CPP 提供的是 ActiveMQ client API in C++.
ActiveMQ 的部份沒多看就不多談了, ActiveMQ-CPP 可就有趣了. 後者 interface 的設計是仿造自 (modeled after) javax.jms.1 不是說 Java 不好 (即便我顯然偏愛 C++). C++ 與 Java 是不同的語言, 除了 syntax 有幾分相似之外2, 兩者的編程思維不盡相同, 把 Java 用的 API 近乎完整的 clone 到 C++, 連 utility 都是仿的.3 我很好奇這樣的 design decision 背後的 rationale 是什麼?
“在多數合理的情況下以 Java 開發軟體比 C++ 容易”, 我猜這個說法不會有太多人反對. 那為何還是有這麼多人寫 C++? 除了寫較低階與需要與硬體互動的程式之外, runtime efficiency 也是 C++ 依然有它的位置的原因之一. 當然, 還有某些腦筋轉不過來的 programmer, i.e. me, 就只愛寫 C++. 對我來說, 它的迷人之處在於極少設限, 提供使用者 多種 progamming paradigm, 甚至有 多種功能相似的 programming construct 的怪現象.
It’s the 21th century! 現在的我們已經知道 許多時候不用 inheritance 能夠架構出更 reusable, 更 low coupling 的 C++ code, 我不懂為什麼 Apache 大神還在跟著 Java 走老路? 要把 code 架構到近 STL/Boost 等 library 的水準的確很不容易, 只是我對掛著 Apache 招牌的 code 的 expectation 不僅如此.
有句話印象中是這樣說的, “別用 C++ 的語法寫 C 的程式”. 目的是要提醒從 C 轉到 C++ 的 programmer 要以 C++ 的方式寫 C++ 程式. 例如避免把 class 的 member data 放到 public section, 要以 IOStream 取代 printf() 家族等等. 我想把這句話修改一下也同樣適用, “別用 C++ 的語法寫 Java 的程式”. 送給 Apache.
![]() |
|
| Previous Post « 好狗運 « |
Next Post » Code Review – ActiveMQ-CPP » |








There should be a mandatory library, maybe in Boost or Apache, to simulate Java paradigm in C++. So those caffeine-intoxicated projects can share a common java-liked environment.
Caffeine-intoxication is good for projects porting from Java to C++, at least many documents can be shared. So I have no opinion about this — Java paradigm is one of C++ paradigms, too . But I’m really sick of every porting-from-java projects having their own java-simulation mechanism.
[Duplicated comment removed. - fr3@K]
Comment by jeffhung — March 3, 2009 @ 17:43