了解可用于通過語言綁定加速 GTK+ 開發的各個選項。在本文中,您將了解可用于更快進行高質量應用程序創建的語言和工具。
C 編程語言是一種很不錯的編程語言,受到我們很多人的青睞。但這種語言并不一定是所有情況下都適用的解決方案,當然也不是創建以下這種當今最常見的應用程序類型的方法:面向最終用戶的圖形用戶界面(graphical user interface,GUI)應用程序。當不關心數字運算功能或直接接觸計算機的底層細節方面的功能時,這些功能突然就變成了障礙,會浪費掉您的開發人員的很多寶貴的時間。
由于這個原因,人們創建了很多不同的工具來幫助開發人員將精力集中在編寫重要的代碼上,而不需要受不必要的細節和煩人的語言底層的困擾。這些工具包括高級語言、集成開發環境(integrated development environment,IDE)和各種用于簡化和自動化常見任務的實用工具。本文并不會嘗試深入探討所有這些主題;本文只提供使用基于 GTK+ 的工具集時可用的各種不同選項的概述。
綁定
GTK+ 團隊認識到使用不同工具的需求,開始著手創建可方便而快速地綁定到其他語言的庫。我所說的語言綁定 是一種特定類型的粘附構件,允許編程語言向編程人員提供本機接口,而實際將所有工作委托給采用另一種語言編寫的基礎庫。此處,導致麻煩的 C
的底層本性使其成為那些高級綁定基礎的理想之選,因為幾乎所有此類語言都能與 C
進行通信。
![]() ![]() |
![]()
|
“更親密的”接觸
可以與 GTK+ 交互的語言非常多——每個綁定集都是獨立的項目,具有自身的支持級別和完整性(有關詳細信息,請參閱參考資料)——但其中的一些語言值得進行更為深入的討論,這其中的原因可能是因為其出眾的質量和受歡迎程度,也可能僅是為了說明如何使用差異很大的語言來進行 GTK+ 編程。
Python
最受歡迎的綁定是 Python 集,由 PyGTK 項目開發。得益于其作品的卓越質量和使用 Python 語言總體上給人帶來的愉悅的感覺,PyGTK 成為了知名度最高的綁定,同時也是到目前為止唯一正式包含到核心 GNOME 桌面版本中的綁定。這意味著 Python 已被認為是非常不錯,非常受歡迎,可以允許將采用 PyGTK 編寫的應用程序(以及 PyGTK 本身)加入 GNOME 資產范圍內,而不用將其作為第三方組件對待。當然,這并不意味著其他綁定不好,但如果喜歡使用 Python,您也一定會喜歡使用 PyGTK。
除了 GTK+ 庫的基本集之外,Python 還全面覆蓋了 GNOME 開發平臺的各個方面。因此,在編寫應用程序時,可以使用 GNOME 平臺的所有共享工具,從而進一步提高您的開發效率。
C# 和 Microsoft NET
雷蒙德巨人 Microsoft® 的開發部門提供的最新產品 .NET 在 Microsoft Windows® 之外的平臺上也很受歡迎(這得益于 Mono 項目提供的免費實現)。不過,您可能驚奇地發現,這項技術具有非常強的適應能力。事實上,.NET 方面最受歡迎的 GUI 工具集很大程度上不能算是 Microsoft 自己的 WinForms,而是 GTK+。由于 Gtk# 綁定集隨缺省 Mono 分發版本一起提供,而且 GTK+ 本身的質量出眾,因此 GTK+ 快速成為希望使用新 .NET 平臺開發桌面的程序員的新寵。另外,由于 .NET 的效率非常高,因此很多新應用程序都采用 C#
和 GTK+ 進行編寫,包括一些影響很大的應用程序,如 Beagle 項目(該項目允許快速有效地對計算機上存儲的所有信息進行搜索)。
請注意,盡管其名稱是 Gtk#,其中也包含了很多用于 GNOME 庫的相應粘附構件,允許在必要時使用 GNOME 平臺(如果您的操作系統上存在 GNOME 庫)。Gtk# 也可以移植到 Windows,因此不必花太多的時間進行移植工作。
Haskell
現在我們討論另一個完全不同的部分。懶功能語言 Haskell 與目前已討論的任何語言都不相同,后者都使用命令型語法。正是由于完全不同的方法,Haskell 才能在很多應用程序中提供無以匹敵的簡潔性和表達力,在那些要求進行數學推理的應用程序中,這一點更是表現突出。由于這個原因,它是您的工具庫中一個非常有用的工具,通過使用 Gtk2Hs 項目的成果,您能夠將精干的數學運算過程打包為同樣精干的用戶界面(user interface,UI)。
功能語言當然很有趣,但卻不是表述用戶交互的好方法,因此 Gtk2Hs 支持各種綁定(支持的最高版本為 GTK+ V2.8),包括很多重要工具,如 libglade、相應文檔和一個與很多傳統語言類似的友好單體應用程序編程接口(application programming interface,API)。此外,由于 GTK+ 采用了引用計數模式,因此可采用類似于 Haskell 的方式使用 Gtk2Hs,而不用顯式地管理內存,這一點與其他一些 Haskell 的 GUI 庫(如 wxHaskell)不同。
Java 語言
回到命令型語言,Java™ 編程語言方面(最受歡迎的環境之一)也表現非常出色。Java-GNOME 項目提供了一個穩健的綁定集,該綁定集涵蓋了最新版本的 GTK+ 和 GNOME 庫。具體來說,Java 語言方面添加了通過 Eclipse Standard Widget Toolkit (SWT) 使用 GTK+ 的選項。如果您使用 Java 語言創建桌面應用程序,這無疑是個好消息,因為您也能方便地使用 GTK+ 了。
有關語言綁定的一般性說明
使用綁定編寫 GTK+ 代碼時,請記住,雖然提供了庫的所有常見功能,在某些特定區域可能并沒有提供對采用 C
能進行的所有操作的全面支持(具體取決于所使用的語言的成熟度和具體特性)。特別要注意,腳本語言的新類派生存在一定的問題,對使用其可完成的具體任務進行了一定的限制。不過,各個語言組正在努力解決這些問題,您應當參考相應語言綁定的文檔,以了解有哪些限制(如果有)。
為了幫助跟蹤和使用恰當的綁定版本,已專門啟動了 GNOME Language Bindings 項目。目前有四種語言(Python、Java 語言、C++
和 Perl)在該項目中有綁定,這可確保這些語言編寫的程序將始終以可預測的方式運行,且會包含最新的 GNOME 開發平臺版本(包括 GTK+ 的最新版本)。顯然,其他語言也可以涵蓋這些版本,但對于項目中的這些語言,其完整性和及時性方面有更強的保證。
![]() ![]() |
![]()
|
工具
除了使用相應語言來滿足您的需求外,同樣重要的是,要使用最適合您的代碼編寫工作的工具。此類工具能以更智能的方式直接支持目標語言,或可以自動化或簡化重復的任務,從而可以大幅度縮減開發時間和成本。
UI 設計
在所有可用工具當中,GTX+ 編程中最重要的工具可能就是 libglade 了。通過使用 libglade(請參閱“GTK+ fundamentals, Part 2:How to use GTK+”),您可以大大增強代碼的易讀性、易維護性、模塊性和簡潔性——所有這些好處都是通過將指定 UI 的外觀的視覺任務和編寫代碼(即應用程序邏輯)的過程分離來實現的。
由于該工具極其明顯的重要性,語言綁定開發人員正在進行相關的工作,以在其語言中支持 libglade(雖然目前尚未將其包含在基礎 GTK+ 庫中)。因此,只要可以選擇使用 GTK+,您就可以確定所選擇的語言將支持 libglade。
要使用 libglade,必須為其創建接口描述文件??梢允褂萌舾蓱贸绦騺硗瓿纱巳蝿?,第一個此類程序就是原來的 Glade2(該庫的名稱就是源于此)。不過,由于當前穩定版本 Glade2 的一些限制和 Glade3 開發工作方面的延遲,促成了一些替代 UI 編輯器的創建。目前,這其中最為成熟的是 Gazpacho(請參閱參考資料),該程序是作為 Glade3 設計理念的 Python 實現編寫的。Gazpacho 也支持 libglade 的純 Python 重實現版本,該版本針對 PyGTK+ 應用程序的需求進行了重新定制。
IDE
另一種支持工具類別是各種類型的 IDE,專門設計用于在開發的所有階段提供全面的幫助。各種 IDE 均針對特定語言定制,通??梢詾槌绦騿T提供極大的幫助。在這方面,Mono/.NET 具有良好的支持,這其中既包括 .NET 的原始創建者 (Microsoft) 提供的支持,也包括以 Mono 項目為核心的社區提供的支持,后者開發了一個相關的 IDE,稱為 MonoDevelop。由于 Gtk# is 是 Mono 和 MonoDevelop 的創建者選擇的 GUI 工具集,因此為其提供了良好的現成支持;不過,對于使用 Microsoft 系列工具的程序員,可以通過在 Microsoft Visual Studio® IDE 中進行相應的定義來方便地安裝自定義程序包。
類似地,Java 程序員則可以使用 Eclipse 項目提供的異常出色的免費 IDE。要獲得 GTK+ 代碼的支持,除了將庫導入到項目中外,還需要進行其他一些工作??梢栽?Java-GNOME 項目頁面(請參閱參考資料)上找到有關如何設置的詳細說明。
不再簡單地進行替換
除了簡單地切換各種語言外,還可以采取各種方法來提高工作效率。最有用的技術之一來自選擇合適的工具做合適的事情 這一古老規則的實際應用,采用嵌入 技術。
在此設置中,核心應用程序——通常具有非常嚴格的性能要求——采用低級語言編寫(如 C 語言),以盡可能地利用硬件。不過,該應用程序隨后會在不同的高級語言中公開擴展接口,以便方便簡單地對該接口的行為進行增強和自定義。
通過使用嵌入腳本,通??梢酝瑫r最好地利用這兩方面,獲得精干且性能上佳的核心和方便的可擴展性。非常適合采用嵌入技術的語言是 Python,該語言的最初編寫目的就在于此。有關此類組合如何工作的最好示例,請參閱 Nautilus 和 Epiphany(都是 GNOME 項目)如何向 Python 程序公開其擴展 API 的說明。由于 Python 的簡潔性特征,您可以成功創建雖寥寥數行卻非常有用的擴展。