2017-02-11 93 views
0

the official website of gobject,我們可以看到:gobject以何種方式促進綁定?

GObject的,和它的較低級的類型的系統,的GType,通過GTK +和最GNOME庫用來提供:

  • 面向對象的C-基於API和
  • 自動透明API綁定到其他編譯或解釋語言

第一部分似乎很清楚,但不是第二部分。實際上,當談到gobject和綁定時,引入的概念往往是gobject-intropspection,但據我所知,gobject-introspection可以用來爲任何已記錄的C庫創建.gir和.typelib,而不僅僅是用於基於gobject的庫。

因此我想知道是什麼讓gobject特別具有綁定友好性。

回答

2

據我所知,可以使用gobject-introspection爲任何已記錄的C庫創建.gir和.typelib,而不僅僅是基於gobject的庫。

這在實踐中並不真實。你可以做一些非常基本的東西,但你必須手動編寫GIR(而不是隻運行掃描源代碼的程序)。我知道的唯一的人是those distributed with gobject-introspection(* .gir文件,* .c文件是爲了避免循環依賴),甚至那些通常只是C API的一小部分。

至於其他功能,GObject中幾乎所有的功能都可以幫助...基本的想法是綁定通常需要RTTI。有GValue(存儲值+類型信息的簡單框),GClosure(對於回調)類型,屬性和信號用GType s,來描述自己。如果使用GObjects(而不是創建新的基本類型),則會獲得有關繼承和接口的運行時數據,而GObject的奇怪構造方案甚至允許其他語言子類別中聲明的類型。

原因g-ir-scanner不能真的在非GObject庫上做的很多是缺少所有這些信息。在掃描源代碼尋找註釋之後,g-ir-scanner實際上會加載編譯後的模塊並使用GObject的API來獲取這些信息(這使得交叉編譯變得很痛苦)。換句話說,GObject-Introspection是一個比你想象的要小得多的項目......它需要的大部分數據來自GObject API。

+0

謝謝,我不知道'g-ir-scanner'是這樣使用GObject的。至於RTTI,這對非解釋性語言非常有用嗎?例如,它在PyGObject中成功使用,但它在編譯語言中有意義嗎? – eponier

+1

如果你解釋/動態輸入/,這會更有意義。但答案是肯定的。當你沒有靜態類型信息時,它肯定會更「有用」,但是在C語言中有很多情況,你可以通過使用類似GValue或者添加GType參數來避免重寫相同的代碼。 – nemequ

+0

你能舉個例子說明你最後一句話嗎? – eponier