前言
站长最近无聊又“复习”了动画版《犬夜叉》,接着又有点兴趣,便准备下漫画看后面的发展。结果搜了半天,居然没个可下之处,只好冒着被学校7毛一小时的网费宰,在线看。戈薇果然是驯狗的专家啊(对狗施加暴力...),其声优--雪野五月配音的另一个角色--《全金属狂潮》的千鸟最近被某些论坛选为动漫10大暴力女......一个没有常识的男人背后总有个暴力的女友(可怜的叉叉和宗介兄...)
简介
回归正题,介绍一下本文主角--Glib。这是一套跨平台的开源的比较高层的函数库,也就是说对程序员非常友好且有用的库。首先,不要和Glibc库混淆了,Glibc库是标准C函数库,是最底层的,C程序在开源平台下运行所必须的(开源的C++语言还需要编译器的GCC的libstdc++)。Glibc主要是对操作系统的系统调用作封装,是程序和操作系统打交道的中介。Glib则是对Glibc的再次封装和扩充功能,主要的目的是方便程序员使用。Glib库分成了两个主要部分,一部是常用的数据结构,对编译器选项的封装,文件操作的封装,系统调试日志的封装...,另一部分被称为GObject,也即使C语言拥有面对对象的特性(具有限定有效范围属性,一般的属性,方法,消息(被称为信号),引用...)。不过如果熟悉C++,GObject大概可以令你抓狂,面对对象的元素似乎和C++下的一样但是又有分化,初看下基本会如同初号机暴走而大叫(模仿林原女王的配音...):比如怎么会有这么多个构造器...
Glib的第一部分实现不依赖于GObject的部分。Glib的除了面对对象的功能都是在第一部分实现的。不使用面对对象的模块并不意味其不使用面对对象的思想设计。这样做只是因为这些功能的实现不需要使用全部的面对对象的特性,部分就足够了,这就不用牵涉到第二部分来降低效率了。
Glib是GTK+图形控件的组成部分(另外三者是辅助控件也就是帮助使用电脑不便人士的ATK,处理显示文字的Pango和GTK+)和基石(当然也是GNOME平台的基石了)。如果浏览下现在FreeDesktop推销的(也就是被GNOME和KDE两个桌面平台的巨头采用)cairo和dbus,感觉就像是用glib函数库写的却竭力隐藏起来,大概是KDE平台不喜欢吧。站长猜具体可能是因为KDE的基石,C++库QT和C库GTK+竞争,如采用Glib编写便似乎对GNOME平台有所偏袒了吧。
Glib的代码非常的妙,如果坚持到底多看几次GObject,大概也会对实现的面对对象艺术表示赞叹。现在有了Anjuta,使用GObject的也不用照着格式敲键盘了。
《犬夜叉》里的柰落,到处吸收强大的妖怪,不断的按照达尔文的优胜劣汰的方式集成妖怪。Glib的开发差不多干着同样的事:吸收其他的库,为程序员提供统一的接口。程序员只要拥有Glib就相当于拥有了许多同级别的其他库了...
正在开发中的Glib-2.11系列就吸收了pcre库。去年站长在作编译课设时,总是抱怨Glib怎么没有提供正则表达式的功能呢,以至于有为glib补充相关功能的冲动(行动了,但后来发现需求分析没搞清,代码惨败...)。不知道站长怨念怎么传递给了Glib的开发人员,总之pcre被加了进去,唯一令站长遗憾的是这次是生吞的,也就是整个代码的移入。从完美主义看来,用glib的基础构架再次实现pcre这样比较native的!!! PS:正则库可以作为词法分析器(比如flex)的有效代替...
接下来
接下来看看我们还有什么怨念可以传给glib呢。glib的I/O功能有待加强,gnome的开发者认为应当把gnomeVFS移入到glib,现在在开发GVFS可能是glib的一部分。glib还缺少什么呢?恩,一个小型的数据库,吸收sqlite吧。sqlite被exaile用来管理曲库,也被Firefox3.0钦定为其智能书签的实现途径。另外,用glib实现个替代gcc的编译器吧,gcc用于编译以外的任务(比如用作智能编辑器的语法分析器)需要修改源代码,不方便相关应用。这也是相当于实现了bison的语法分析的功能...
站长更远的希望,glib比如3.0版本成为Linux Kernel的代码在用户空间的某种类似的实现。例如2.10版的glib参照了内核的slab内存管理,实现了GSlice这种非常高效的内存管理实现。
后记
gtk+库还可以考虑继承ASL库之类的,高层的界面库...