2017-02-11 95 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