重新學C++
最近在重新學C++。簡短的感覺是,C++哪裡是什麼物件導向/「面向對象」的語言嘛。C++設計哲學的精采之處,似乎都表現在「沒有使用pointer」的地方。另外就是,傳統C有的程式庫功能,C++幾乎都有一套「符合自身哲學」的作法。從這點來說,等於是跟C斷裂了。
Objective-C就這一點來說,還是跟C貼近些(Objective-C是C的超集合,但C++不是;合法的C不見得是合法的C++)。
不過,兩者哲學天差地遠就是了。倒是C++因為有行內展開(inlining)這種超邪惡的機制,在處理複雜資料結構上,有著可怕的速度優勢。
最近感受到把某些老程式用C++重寫後獲得2x甚至10x速度的爽感──在完全不改動資料結構或演算法的條件下,一切全拜C++的ADT哲學與STL container之賜。
雖然有一種遲來的快適,不過也幸好是現在才改用C++重寫,而不是在它們還用其他語言寫時,就做很多敲敲打打。因為,套用那句經典名言:
未成年就這麼優,是一切邪惡的根源
Premature optimization is the root of all evil
Premature optimization is the root of all evil
*誤誤誤誤誤*
註:optimization在台灣以外的地方,通常譯作「優化」。
lukhnos :: Dec.30.2007 :: tekhnologia 技術或者藝術 :: 7 Comments »
7 Responses to “重新學C++”
真是太妙了,最後那句可以套在任何地方!
最後那句我要丟給 slzzp…
未成年就這麼優 XD
C99 也有 inline, 也有 const,
從 C++ 學了不少東西,
同時 C++09 也從 C99 那邊學了點東西 @@
雖然兩者有點分道揚鑣了,不過還是有些地方有在融合
严格来说,合法的 C 程序也不一定是和合法的 Objective-C 程序,比如 int id; 是一个合法的 C declaration, 但 Objective-C 保留了 id 关键字导致必须改掉它 :p
[...] Ruby 是個很慢的語言,但有些作法應用得當,還是會有不錯的改善。不過要知道程式碼的可讀性跟執行效率有時候是衝突的,這點還需拿捏,尤其是 software life cycle 一開始絕對是可讀性比較重要。有句經典名言一定要引一下: [...]
未熟調教是一切邪惡的根源~
並非如此,請見 /usr/include/objc/objc.h :
typedef struct objc_object {
Class isa;
} *id;
所以 int id = 5; 是沒有問題的