gobject 以何种方式促进绑定?
In what way is gobject facilitating binding?
在the official website of gobject,我们可以阅读:
GObject, and its lower-level type system, GType, are used by GTK+ and most GNOME libraries to provide:
- object-oriented C-based APIs and
- automatic transparent API bindings to other compiled or interpreted
languages
第一部分我觉得很清楚,但第二部分我不太清楚。
确实,在谈到gobject和binding时,引入的概念往往是gobject-introspection,但据我了解,gobject-introspection可以用于为任何文档化的C库创建.gir和.typelib,而不是仅适用于基于 gobject 的库。
因此我想知道是什么让 gobject 对绑定特别友好。
as far as I understand, gobject-introspection can be used to create .gir and .typelib for any documented C library, not only for gobject-based library.
实际情况并非如此。您可以做一些非常基本的事情,但是您必须手动编写 GIR(而不是 运行 一个扫描源代码的程序)。我唯一知道的是 those distributed with gobject-introspection(*.gir 文件,*.c 文件是为了避免循环依赖),甚至那些通常只是 C [=29 的一个相当小的子集=].
至于其他功能,GObject 中的几乎所有功能都有帮助……基本思想是绑定通常需要 RTTI。类型有 GValue
(用于存储值 + 类型信息的简单框)、GClosure
(用于回调)、属性和信号用 GType
s、 来描述自己等等。如果您使用 GObjects(而不是创建新的基本类型),您将获得 run-time 有关继承和接口的数据,并且 GObject 奇怪的构造方案甚至允许其他语言对 C 中声明的类型进行子类化。
g-ir-scanner
不能对 non-GObject 库做太多事情的原因是所有这些信息都丢失了。扫描源代码寻找注解后,g-ir-scanner
实际上会加载已编译的模块并使用 GObject 的 API 来抓取这些信息(这让 cross-compiling 很痛苦)。换句话说,GObject-Introspection 是一个比您想象的要小得多的项目……它需要的大部分数据都来自 GObject API。
在the official website of gobject,我们可以阅读:
GObject, and its lower-level type system, GType, are used by GTK+ and most GNOME libraries to provide:
- object-oriented C-based APIs and
- automatic transparent API bindings to other compiled or interpreted languages
第一部分我觉得很清楚,但第二部分我不太清楚。
确实,在谈到gobject和binding时,引入的概念往往是gobject-introspection,但据我了解,gobject-introspection可以用于为任何文档化的C库创建.gir和.typelib,而不是仅适用于基于 gobject 的库。
因此我想知道是什么让 gobject 对绑定特别友好。
as far as I understand, gobject-introspection can be used to create .gir and .typelib for any documented C library, not only for gobject-based library.
实际情况并非如此。您可以做一些非常基本的事情,但是您必须手动编写 GIR(而不是 运行 一个扫描源代码的程序)。我唯一知道的是 those distributed with gobject-introspection(*.gir 文件,*.c 文件是为了避免循环依赖),甚至那些通常只是 C [=29 的一个相当小的子集=].
至于其他功能,GObject 中的几乎所有功能都有帮助……基本思想是绑定通常需要 RTTI。类型有 GValue
(用于存储值 + 类型信息的简单框)、GClosure
(用于回调)、属性和信号用 GType
s、 来描述自己等等。如果您使用 GObjects(而不是创建新的基本类型),您将获得 run-time 有关继承和接口的数据,并且 GObject 奇怪的构造方案甚至允许其他语言对 C 中声明的类型进行子类化。
g-ir-scanner
不能对 non-GObject 库做太多事情的原因是所有这些信息都丢失了。扫描源代码寻找注解后,g-ir-scanner
实际上会加载已编译的模块并使用 GObject 的 API 来抓取这些信息(这让 cross-compiling 很痛苦)。换句话说,GObject-Introspection 是一个比您想象的要小得多的项目……它需要的大部分数据都来自 GObject API。