GObject Introspection 的简单示例

这段时间以来,一直在跟 GObject 死磕。除了有点枯燥与乏味之外,也没什么不适,就是一堆繁琐但还算是直观的 C 代码罢了。现在,我想让 GObject 单调的学习过程略微轻松一下。毕竟春天正在到来,窗外的迎春花已经怒放了。记得前段时间为自己开始学习 GObject 写了一篇序言“要相信 GObject 是有用并且简单的”,其中引用了 Thinker 的一篇文章“GObject Introspection 带来一些希望”。本文通过一个很小的实例,演示一下 GObject 程序如何通过 GObject Introspection 与 JavaScript 脚本进行结合。

继续阅读

GObject 信号机制——信号 Accumulator

在文档 [1] 中,从外围对 GObject 信号注册的过程进行了初步分析。生命不息,折腾不止,我们应当以  Adrian Hands 大叔为榜样。所以,本文继续解决文档 [1] 中遗留的问题,即 g_signal_new 函数的第 5 个与第 6 个参数的含义。

继续阅读

GObject 信号机制——信号注册

上一篇文档“GObject 的信号机制”只是挖了一个坑便结束了,本篇尝试填坑,不过也不敢有所保证。因为我也不确定会不会因为被 GObject 的信号内幕再次搞晕。

我们先老老实实的阅读 GObject 参考手册的“Concepts / Signal”部分,尽量多获得一些面上的认识。手册中最关键的一句话是:每一个信号在注册的时候都要与某种数据类型(包括 GObject 库中的内建类型或 GObject 子类类型)存在关联,这种数据类型的使用者需要实现信号与闭包的连接,这样在信号被发射时,闭包会被调用。这句话,意味着我们要使用 GObject 信号机制,那么就必须要完成两个步骤:第一个步骤是信号注册,主要解决信号与数据类型的关联问题;第二个步骤是信号连接,主要处理信号与闭包的连接问题。本文主要考察信号注册的大致过程。

继续阅读

GObject 子类对象的析构过程

在“GObject 的信号机制”文中,谈到 GObject 子类对象的析构过程分为两个阶段,第一阶段是 dispose,第二阶段是 finalize。之所以划分成两个阶段而不是一步到位的内存释放,一切皆因尴尬现实之所迫。

继续阅读

GObject 的信号机制——概览

手册所述,GObject 信号(Gignal)主要用于特定事件与响应者之间的连接,它与操作系统级中的信号没有什么关系。例如,当我向一个文件中写入数据的时候,我期望能够有一个或多个函数响应这个“向文件写入数据”的事件,这一期望便可基于 GObject 信号予以实现。

继续阅读

函数指针、回调函数与 GObject 闭包

本文首先复习一下基于 C 语言函数指针和回调函数的概念,进而学习 GObject 闭包的用法。这些知识都与面向对象程序设计基本上没有什么关系。

继续阅读

GObject 对接口的模拟

在文档 [1] 中谈到接口古已有之,但是类的继承赋予了它一些新的概念。本文结合实例,学习如何使用 GObject 库所提供的接口类型来表达这些概念。

继续阅读

继承与接口

本文仅仅表达了我对面向对象程序设计方法中继承和接口用法的理解。

继续阅读

从折腾 Gentoo 中的 gnome 3 所想到的……

近日,忙中偷闲,在 gentoo 中折腾了与 gnome 3 相关的几件事情。因为解决过程颇费心机,用 gentoo 一直都意味着折腾,当然用 LFS 则意味着折腾的折腾。

既然如此折腾,许多人,包括我,为何乐此不疲?

这是因为 Linux 赋予了人类折腾的自由。只要折腾的人足够多,就可以产生涌现(Emergence)。我不禁佩服起来那个将操作 gentoo portage 的工具命名为 emerge 的开发者了,看来此名还真是有深意啊!

所谓涌现,就是指系统中的个体遵循简单的规则,通过局部的相互作用构成一个整体的时候,一些新的属性或者规律就会突然一下子在系统的层面诞生。

就像是市场经济那样,这个经济体制中,每个个体所遵循的最简单的规则就是满足个人贪欲。无数的个体在这个简单规则的作用下,相互影响,从而产生了亚当.斯密看不见的手。

Unix、Windows、Mac OS X 等系统都是工程化的结果,ESR 将其称为“大教堂”,而 Linux 则被 ESR 称为“集市”,我认为说它是涌现的结果更准确。这种涌现之所以产生,GNU 教主的自由旗帜并不是主要原因,也许 Linus 的“just for fun”才是,因为只有这个规则最简单,也最适合为个体所遵循,而且这也是我们乐此不疲的原因。

折腾才是 Linux 发展的原动力,当然,如果有商业公司的支持,可以更好的催化。

GObject 的子类继承

在文档 [1] 中,我们构造了一个 KbBibtex 类,其构造过程看似挺复杂,但实际上只需要动手尝试一下,即可明白 GObject 子类化的各项步骤的意义与作用。许多事物之所以被认为复杂,是因为大家在观望。

本文沿用文档 [1] 中的那个 KbBibtex 示例,学习如何对其进行子类化,构造新类,即面向对象程序设计方法中类的继承。

继续阅读