爲何選擇Glib

最近在Linux下的C,發現這東西非常好!!尤其是那個線程池技術 非常棒,如果自己寫一個的話,就不一定那麼好用和穩定,下面是網上轉的.

gnome是基於gtk+開發的一套桌面環境,gnome和KDE作爲兩大最流行的桌面環境,在全世界廣泛使用。只要是在Linux下工作的開發人員,對 於gtk+一定不陌生。而對於glib,這個gtk+下的無名英雄,其功能強大卻鮮爲人知。今天,在這裏簡要介紹一下,如果你是開發人員,看完本文,相信 你會愛上它的。

glib不是gllibc,儘管兩者都是基於(L)GPL的開源軟件。但這一字之差卻誤之千里,glibc是GNU實現的一套標準C的庫函數,而glib 是gtk+的一套函數庫。在linux平臺上,像其它任何軟件一樣,glib依賴於glibc。


glib不是一個學院派的東西,也不是憑空想出來的,完全是在開發gtk+的過程中,慢慢總結和完善的結果。如果你是一個工作3年以上的C語言程序員,現 在讓你講講寫程序的苦惱,你可能有很多話要說,但如果你有時間研究一下glib,你會發現,很多苦惱已不再成其爲苦惱,glib裏很多東西正是你期望已經 久的。


gobject是glib的精粹,glib是用C實現的,但在很大程序是基於面向對象思想設計的,gobject是所有類的基類。signal在其中也是 一大特色,signal與操作系統中的signal並不一樣,它是類似消息一樣的東西,讓消息在各個對象間傳遞,但儘量降低對象間的耦合 。仔細讀一下它的 代碼,唯一想說的話就是“絕!”。


動態數組、鏈表、哈希表等通用容器,在不同的公司,在不同的時期,在不同的情況下,我們每個人對每一種容器,可能都實現過N次以上。甚至在同一個項目裏, 出現幾份鏈表的實現,也並非罕見。一直在抱怨,標準C中爲什麼沒有類似於STL的標準容器,讓全世界的程序員在數以萬次的重複實現它們。不過,還算走運, 有了glib,惡夢在此終結了。glib提供了動態數組、單/雙向鏈表、哈希表、多叉樹、平衡二叉樹、字符串等常用容器,完全是面向對象設計的,實現得非 常精緻。不用白不用,別客氣了。


你開發過跨硬件平臺的軟件嗎?是不是常常爲硬件平臺的差異而苦惱呢?字節順序是常見的問題之一,大端格式,小端格式,還是PDP格式的?這樣差異造成的 BUG會浪費不少時間,同時讓代碼晦澀難讀。glib提供了一套完整的宏,利用這些宏編寫程序 ,問題大大簡化了。


你開發過跨操作系統的軟件嗎?在不同的平臺下,很多函數有相同的功能,但函數原型,返回值差異巨大,也有的貌合神離,相同的名稱有着不同的意義,請看下面 這張清單:

       動態庫加載函數
       線程函數
       信號量函數
       互斥鎖函數
       事件函數
       字符集轉換函數
       原子操作函數
       創建進程函數
       時間格式
       IO函數
爲完成相同的功能,你卻要爲此寫出不同的代碼。那怕只是一個簡單的封裝,這麼多,你煩不煩?用glib吧,它的作者們都是高手中的高手,對不同的平臺的理 解程度,遠遠超出你和我,而且這些程序經過大量的應用程序測試,已經非常的穩定了,放心的用吧。

你寫過讀取配置文件的模塊吧,像讀取ini這樣簡單格式的文件,當然不在話下,要讀markup語言格式的配置文件,難度可能大了點,雖然不是不可能,但 除非是爲了學習,何必自己找麻煩呢。glib裏提供了詞法分析、markup語言解析、ini文件存取等功能,你完全不用爲此擔憂。


不管是命令行程序,還是GUI程序,或者後臺服務進程,通過命令參數來控制程序的行爲,都是開發人員慣用的手法。從命令行參數取到有用的信息,不難,遍歷 一遍不就行了嗎?但在每個程序中都來遍一次,你不覺得很單調嗎?我們的時間很寶貴,浪費時間做這種事情,不值得吧。glib的作者們早考慮到了,它提供了這樣的功能,你調用的它的函數,可能輕鬆的取得所要的命令行參數。


對於正則表達式,Win32下的開發人員可能用得少一點,而在Linux下的Shell裏,它卻是不可或缺之物。有沒有想到在自己的程序中使用的它呢,在 有的情況下,使用正則表達式,可能會大大降低開發的難度,提高易用性。glib也想到了這一點,它提供了簡單的正則表達式功能 ,當然,用與不用完全取決於你自己。


在程序裏,如果程序出錯了,特別是調了不該調用的函數,你是不是很想知道是誰調了它?大多數時候用debuger是最好的選擇,在某些情況下,沒有 debuger可用,或者在debuger裏重現不了這個問題,你會不會覺得很無助?別怕,glib提供了一套跨平臺的backtrace函數 ,有了它, 你可以很容易找到元兇了。


如果讀過一些大型的開源項目,你會發現,差不多每個項目都有一套自己的log函數,用於記錄程序運行的調試或者審計信息。也有可能,你自己都曾在不同的項 目裏實現過好幾次這個功能,第一次實現會覺得很好玩,會學到了一些東西,後來就會發現自己在做無用功。重複就是浪費,重複就是犯罪,glib想到了這一 點,它實現了一套完整的log機制 ,供大家在不同的項目中使用。


產生質數 的算法不難,在我們的程序裏也像是星外來客,很少使用,常常忽略了它。所謂書到用時方恨少,有這樣的東東,說不定就有用得到它的時候。glib提供了這樣的功能,同時還提供了一個較好的隨機數算法。


Linux Shell裏的自動補完功能 很好用吧,從Linux轉移到Win32下工作的開發人員,常常抱怨Win32的Shell裏沒有這個功能,其實Win32下 也是有的,把註冊表裏的一個選項打開就行了。不管怎麼樣,總之這個功能太有用了,沒有它,你都會覺得少了點什麼,全身不自在,glib裏連這個功能都提供 了,是不是很人性化呢?


內存問題!還是內存問題!如果你沒有爲內存問題而苦惱過,我都懷疑你是不是一個真正的C語言程序員。內存泄露、訪問越界、空指針、野指針和內存優化等問題,是不是都曾讓你夜不能昧?有些工具可以幫助你,但這不是萬能的良藥,好好寫你的程序纔是第一要義。glib提供了一些的手段,也可以在一定程度上減輕你的痛苦。


呵,怎麼樣?還快不去下載一個來玩玩?ftp://ftp.gtk.org/pub/gtk/v2.8/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章