2008年10月16日 星期四

我看STL跟BOOST

這兩者無疑都是非常有力的工具,使得C++的programmer好像短時間內瞬間增加了一甲子的功力,老實說剛剛看到的時候是驚豔,後來小心對待,下一步希望可以擴充這個Lib(雖然說感覺離這目標還很遠)

驚豔:你可以想像的到,以前資料結構寫的要死要活,還得東修補西修補,才能完成你合用的東西,短時間內就可用STL完成,還可以套用多種演算法,愛用哪一種型態就是用哪一種型態,不必開發多個版本,全部人家都幫你用好了;BOOST看似一個補完計畫,以前啥atoi、printf之類的東西,好像一下子都解決的,程式的可讀性大幅提昇,以前一些平台相依性的東西,也都被加入了,好像一下子對齊了不少窗口,程式設計師不用再面對一堆不一樣的狀況

小心使用:STL跟BOOST在不瞭解他的原理的狀況下,可能會讓程式當的莫名其妙,再得到好處的時候,也犧牲了一些東西。如果你不知道在刪除了某些container裡面的內容之後,你的iterator會不能用,你大概也很難trace你的程式是如何運作,如果你不知道map其實是一個tree,你會期待他有O(1)的表現,有太多要注意的,天下沒有白吃的午餐;再者以STL來說,因為有些人很懶惰,直接引用,使得程式可讀性下降,明明就是簡單define可以解決的事情,就會看到程式裡充滿map< int,int>::iterator,這是啥鬼東西阿?是一個怎樣的map?

擴充: 人心不足蛇吞象,大家會有一些特殊的應用,在STL跟BOOST有所跟不上的地方,這時候就需要擴充他,可是說來簡單,在沒有通盤考量過STL的結構下,我們可以確定可以完全套入STL的架構中而不出錯嗎?我想很少人有這個自信,可以在STL裡面添加一個hash而套用所有的演算法跟運算子吧!?開發一個面面俱到的hash可能難度遠超乎專案的範圍

沒有留言: