阿尼樱奈奈
2023-08-10 06:20 Moderator
Reply Like 0 View the author
只能说,c 里面的宏太强大了。
喜欢 c 的简洁,然而对"强大"的宏没有半点兴趣。
点赞!!
优秀!👍
只能说,c 里面的宏太强大了。
喜欢 c 的简洁,然而对"强大"的宏没有半点兴趣。
没啥强大的,就是个复制粘贴删除,连个类型安全检查都没有
要说强大我觉得Rust的宏才叫强大(没错我是Rust吹
没啥强大的,就是个复制粘贴删除,连个类型安全检查都没有
要说强大我觉得Rust的宏才叫强大(没错我是Rust吹
都很“强”很“大”,然而我更倾向于支持编译期执行函数的方案,简洁易用。
Popular Ranking
ChangePopular Events
More
如果有人问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/