enforcee
2023-08-11 07:32 deepin
我过去的文章合集:https://bbs.deepin.org/post/259765
Reply Like 2 View the author
我过去的文章合集:https://bbs.deepin.org/post/259765
虽然不喜欢GObject那坨东西,但还是给你点个赞
很不错,收藏下来慢慢看
感谢enforcee大佬深入浅出的文章。五篇找来一一读过,收获不小。
原来GObject和GLIB,结合NameSpace重构后,已华丽转身,变成了简约易用的Vala/Genie。
关键是它们还能还原成C语言搭配Glib库,奠定了基础又灵活的Abi业界地位。
Popular Ranking
ChangePopular Events
More
这将是这次写作的最后一章了。不知道大家有没有从头看过来,也不知道大家能得到多少收获?在结束之前,还有最后的一点内容要和大家说。
GObject虽然设计巧妙,理念先进,但是晦涩、麻烦、难学一直都是他挥之不去的阴影。在我们努力学过之后,似乎这种印象反而加深了呢。GObject已经用尽全力为开发者降低使用难度,但是我们也清楚,既然选择了C语言,就没办法让语法更简洁。有没有一种可能,我们能做到语法像Java、C#那样简洁直观,而又能保证运行效率,不舍弃C语言的基础设施吗?
答案是,有的。那就是Vala语言。我花费几分钟,就把之前的那个案例重写了一遍,请看:
manage-student.vala
内容:manage-usa-student.vala
内容:main.vala
内容:甚至连编译的命令都那么简洁:
什么,这当真不是C#吗?我读的书少不要骗我。虽然观感很像,但是Vala其实还是GObject的心。Vala用GLib作为标准库,把源代码编译成C语言或GObject,然后再用C编译器编译成程序文件。甚至,他还给喜欢python的开发者带来了另一种选择:Genie语言,有着和python类似的语法,也用valac命令来编译。
那么除了Vala之外,我们还能在其他地方用上GObject吗?答案也是肯定的,而且你也完全不用再学习一门新的语言。还记得我在第一章中提到的GObject Introspection吗?他能为相当多的语言打开GObject的大门。如果你用js写过GNOME Shell的插件(imports.gi),如果用python写GTK应用(import gi),以及perl,java,ruby,lua,rust等,GObject变得无处不在,而GLib也为许多缺乏基础设施的语言提供了强力支持。曾经,GObject只是GTK的一小部分,而GTK还只是Gimp的图形组件,也许他的原作者也没能想到,一个小小的异想天开居然能如此地改变开源软件世界的面貌。为生活所迫的我们总是思考各种技术的意义和价值,但是我相信,技术的趣味更是吸引人们不断探索的动力。希望大家都能带着第一次Hello World的热情,来创造更美好的未来吧。
资源:
Vala主页:https://vala.dev/
Vala文档:https://wiki.gnome.org/Projects/Vala/Documentation
Genie文档:https://wiki.gnome.org/Projects/Genie
Vala API:https://valadoc.org/
GObject Introspection文档:https://gi.readthedocs.io/en/latest/
GNOME开发主页:https://developer.gnome.org/index.html
GTK主页:https://gtk.org/