[software development] GObject简介和入门指引(一)引言
Tofloor
poster avatar
enforcee
deepin
2023-08-10 05:55
Author

如果有人问GTK是用什么语言写的,很多人会回答是C语言。但是对C语言非常熟悉的玩家来说,第一次阅读各种GTK应用程序的源代码,都难免感到手足无措。对编译器来说,这些语言确实是无懈可击的C源代码,但是对于阅读源代码的人们来说,想要弄明白他们,还至少要知道GObject。

GObject,即GLib object system,是GLib的一个重要组成部分。而由于他如此独特,常常被人单独拿出来作为一个独立模块来讲解。对使用C语言的应用程序开发者来说,操作系统提供的API过于基础,而总是使用零碎的小模块也会让代码难以阅读。而从GTK分离出来的GLib和GObject作为一种通用和统一的基础设施,被GNU/Linux的各级系统组件和软件项目所使用。(不过不开源的项目似乎很少使用。)

GObject是用C语言实现的「面向对象」系统。熟悉Java、C++、C#等语言的开发者对这个词不陌生,但是GObject最有趣的地方是他选择了一种并非「面向对象」的语言实现了「面向对象」的能力,这突破了很多人的想像。而如果大家曾经在别的地方接触过GObject,一定能听到这句豪言壮语:面向对象是一种思想,不是编程语言!事实上,尽管这种做法看上去异想天开,但是在实际应用中,各种项目也或多或少使用了一些面向对象的要素。比如说,把各种有关联的变量、函数单独区分开来,赋予他们相关的名字;抑或是把一个结构体看作一个「物体」,用各种函数与其互动,这些做法对于规整项目结构、减少学习成本都是非常有帮助的。而GObject就是这种做法的极致,真正实现了类继承、对象转换、接口和属性等面向对象的高级操作。为了实现这一理念,GObject把C语言的各种特性发挥到极致,用各种预处理宏命令和函数以及许多与使用者的「约定」,构造了这一套系统。GObject没有超出C语言的框架,因此C语言的包括编译器等的所有设施,无需修改和增加部件即可适用。但是GObject也同时创造了相当复杂和不同寻常的「语法」,如果不加学习的话是难以理解的。

如果把GObject看作一种独立的编程语言,GLib就是他的「标准库」。GLib提供了相当多经常使用的数据结构、便利函数等组件,减少了开发者的工作量。另外虽然GObject和GLib是使用C语言写的,但是通过GObject Introspection(简称gi),可以让其他语言使用GObject的设施,甚至可以让各种语言相互调用。(这也是GTK支持那么多语言的原因。)

在下一篇文章中,我要讲一些面向对象的基本概念。


资源:
GTK主页:https://docs.gtk.org/
GLib文档:https://docs.gtk.org/glib/
GObject文档:https://docs.gtk.org/gobject/
GObject Introspection文档:https://gi.readthedocs.io/

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-08-10 06:20
#1

ok

Reply View the author
xiao80
deepin
2023-08-10 07:47
#2

只能说,c 里面的宏太强大了。
喜欢 c 的简洁,然而对"强大"的宏没有半点兴趣。

Reply View the author
sammy-621
deepin
2023-08-10 16:31
#3

点赞!!

Reply View the author
yanjuner
Super Moderator
2023-08-10 17:57
#4

优秀!👍

Reply View the author
fuuko
deepin
2023-08-10 18:36
#5
xiao80

只能说,c 里面的宏太强大了。
喜欢 c 的简洁,然而对"强大"的宏没有半点兴趣。

没啥强大的,就是个复制粘贴删除,连个类型安全检查都没有shamed

要说强大我觉得Rust的宏才叫强大(没错我是Rust吹joy

Reply View the author
xiao80
deepin
2023-08-10 19:02
#6
fuuko

没啥强大的,就是个复制粘贴删除,连个类型安全检查都没有shamed

要说强大我觉得Rust的宏才叫强大(没错我是Rust吹joy

都很“强”很“大”,然而我更倾向于支持编译期执行函数的方案,简洁易用。

Reply View the author