`
jinghuainfo
  • 浏览: 1524257 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

glib: 恶梦终结者

 
阅读更多

gnome是基于gtk+开发的一套桌面环境,gnomeKDE作为两大最流行的桌面环境,在全世界广泛使用。只要是在Linux下工作的开发人员,对于gtk+一定不陌生。而对于glib,这个gtk+下的无名英雄,其功能强大却鲜为人知。今天,在这里简要介绍一下,如果你是开发人员,看完本文,相信你会爱上它的。

glib不是gllibc,尽管两者都是基于(L)GPL的开源软件。但这一字之差却误之千里,glibcGNU实现的一套标准C的库函数,而glibgtk+的一套函数库。在linux平台上,像其它任何软件一样,glib依赖于glibc

glib不是一个学院派的东西,也不是凭空想出来的,完全是在开发gtk+的过程中,慢慢总结和完善的结果。如果你是一个工作3年以上的C语言程序员,现在让你讲讲写程序的苦恼,你可能有很多话要说,但如果你有时间研究一下glib,你会发现,很多苦恼已不再成其为苦恼,glib里很多东西正是你期望已经久的。

gobjectglib的精粹,glib是用C实现的,但在很大程序是基于面向对象思想设计的,gobject是所有类的基类。signal在其中也是一大特色,signal与操作系统中的signal并不一样,它是类似消息一样的东西,让消息在各个对象间传递,但尽量降低对象间的耦合。仔细读一下它的代码,唯一想说的话就是“绝!”。

动态数组、链表、哈希表等通用容器,在不同的公司,在不同的时期,在不同的情况下,我们每个人对每一种容器,可能都实现过N次以上。甚至在同一个项目里,出现几份链表的实现,也并非罕见。一直在抱怨,标准C中为什么没有类似于STL的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运,有了glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器,完全是面向对象设计的,实现得非常精致。不用白不用,别客气了。

你开发过跨硬件平台的软件吗?是不是常常为硬件平台的差异而苦恼呢?字节顺序是常见的问题之一,大端格式,小端格式,还是PDP格式的?这样差异造成的BUG会浪费不少时间,同时让代码晦涩难读。glib提供了一套完整的宏,利用这些宏编写程序,问题大大简化了。

你开发过跨操作系统的软件吗?在不同的平台下,很多函数有相同的功能,但函数原型,返回值差异巨大,也有的貌合神离,相同的名称有着不同的意义,请看下面这张清单:

动态库加载函数

线程函数

信号量函数

互斥锁函数

事件函数

字符集转换函数

原子操作函数

创建进程函数

时间格式

IO函数

为完成相同的功能,你却要为此写出不同的代码。那怕只是一个简单的封装,这么多,你烦不烦?用glib吧,它的作者们都是高手中的高手,对不同的平台的理解程度,远远超出你和我,而且这些程序经过大量的应用程序测试,已经非常的稳定了,放心的用吧。

你写过读取配置文件的模块吧,像读取ini这样简单格式的文件,当然不在话下,要读markup语言格式的配置文件,难度可能大了点,虽然不是不可能,但除非是为了学习,何必自己找麻烦呢。glib里提供了词法分析、markup语言解析、ini文件存取等功能,你完全不用为此担忧。

不管是命令行程序,还是GUI程序,或者后台服务进程,通过命令参数来控制程序的行为,都是开发人员惯用的手法。从命令行参数取到有用的信息,不难,遍历一遍不就行了吗?但在每个程序中都来遍一次,你不觉得很单调吗?我们的时间很宝贵,浪费时间做这种事情,不值得吧。glib的作者们早考虑到了,它提供了这样的功能,你调用的它的函数,可能轻松的取得所要的命令行参数。

对于正则表达式,Win32下的开发人员可能用得少一点,而在Linux下的Shell里,它却是不可或缺之物。有没有想到在自己的程序中使用的它呢,在有的情况下,使用正则表达式,可能会大大降低开发的难度,提高易用性。glib也想到了这一点,它提供了简单的正则表达式功能,当然,用与不用完全取决于你自己。

在程序里,如果程序出错了,特别是调了不该调用的函数,你是不是很想知道是谁调了它?大多数时候用debuger是最好的选择,在某些情况下,没有debuger可用,或者在debuger里重现不了这个问题,你会不会觉得很无助?别怕,glib提供了一套跨平台的backtrace函数,有了它,你可以很容易找到元凶了。

如果读过一些大型的开源项目,你会发现,差不多每个项目都有一套自己的log函数,用于记录程序运行的调试或者审计信息。也有可能,你自己都曾在不同的项目里实现过好几次这个功能,第一次实现会觉得很好玩,会学到了一些东西,后来就会发现自己在做无用功。重复就是浪费,重复就是犯罪,glib想到了这一点,它实现了一套完整的log机制,供大家在不同的项目中使用。

产生质数的算法不难,在我们的程序里也像是星外来客,很少使用,常常忽略了它。所谓书到用时方恨少,有这样的东东,说不定就有用得到它的时候。glib提供了这样的功能,同时还提供了一个较好的随机数算法。

Linux Shell里的自动补完功能很好用吧,从Linux转移到Win32下工作的开发人员,常常抱怨Win32Shell里没有这个功能,其实Win32下也是有的,把注册表里的一个选项打开就行了。不管怎么样,总之这个功能太有用了,没有它,你都会觉得少了点什么,全身不自在,glib里连这个功能都提供了,是不是很人性化呢?

内存问题!还是内存问题!如果你没有为内存问题而苦恼过,我都怀疑你是不是一个真正的C语言程序员。内存泄露、访问越界、空指针、野指针和内存优化等问题,是不是都曾让你夜不能昧?有些工具可以帮助你,但这不是万能的良药,好好写你的程序才是第一要义。glib提供了一些的手段,也可以在一定程度上减轻你的痛苦。

呵,怎么样?还快不去下载一个来玩玩?ftp://ftp.gtk.org/pub/gtk/v2.8/

分享到:
评论
1 楼 ray_linn 2013-08-27  
glib就是为GTK这个怪物设计的东西,GTK则是C偏执狂下的产物,如果和QT/KDE比,GTK/Gnome简直是噩梦。

相关推荐

    u8glib:u8glib 的镜像

    u8glib:8 位嵌入式系统的通用图形库 这个托管在上的存储库是的镜像。 适用于 8 位嵌入式系统的通用图形库是一个图形库,专门用于向微控制器平台中常用的 LCD 输出文本和图形。 git clone 的存在主要是为了简化在...

    libdbusmenu-glib:用于通过DBus传递菜单的库

    libdbusmenu-glib 用于通过DBus传递菜单的库

    gLib:一个非常简单的独立图书馆管理应用程序。-开源

    gLib 可帮助您管理有关图书馆图书和成员的信息。 该程序具有多个过滤选项,可让您快速轻松地找到所需的信息。 创建列表后,您可以通过单击按钮将其导出为电子表格友好格式。

    u8glib:用于LCD和OLED的Arduino Monochrom图形库

    U8glib 注意:U8glib将不再进行任何开发。 请使用 。 一个图形库,支持许多不同的单色显示。 左:NHD-2.7-12864 OLED(SSD1325),右:EA DOGS102 LCD(UC1701) 库管理器中提供了适用于Arduino的U8glib的最新...

    glib:已弃用,请使用https

    格里布 用于Rust的GLib绑定。 除了GLib绑定之外,此板条箱还包括用于GObject的基础结构,以扩展GTK +等库。 可以在subclass模块的此包装箱的文档中找到一个代码示例。在我们的执照麻省理工学院

    glib:https:gitlab.gnome.orgGNOMEglib的只读镜像

    GLib GLib是低级核心库,是GTK和GNOME等项目的基础。 它提供了C语言的数据结构处理,可移植性包装程序以及用于事件循环,线程,动态加载和对象系统等运行时功能的接口。 官方下载位置为: : 官方网站是: : ...

    glib:去GLib类型系统的绑定

    去GLib类型系统的绑定。 该软件包旨在基于GLib类型系统(例如GTK,GStreamer等)构建与C库的绑定。 有关示例代码,请参见示例绑定或绑定。 有关信号/事件处理模型,请参见 。依存关系您需要带有C标头的glib 2.0库来...

    VS2017-X64-GST-1.16.2.7z

    glib: YES gst-devtools: YES gst-editing-services: NO gst-integration-testsuites: YES gst-libav: YES gst-plugins-bad: YES gst-plugins-base: YES gst-plugins-good: YES gst-plugins-ugly: YES gst...

    gLib:一个非常简单的独立库管理应用程序。-开源

    gLib可帮助您管理图书馆书籍和会员的信息。 该程序具有多个过滤器选项,可让您快速轻松地找到所需的信息。 列出列表后,只需单击一下按钮,就可以将其导出为电子表格友好的格式。

    libhdate-glib:LibHdate Gobject 绑定

    libhdate-glib LibHdate Gobject 绑定 配置和构建 cd libhdate-glib 自动重新配置 -vfi ./configure --prefix=/usr 制作 安装 进行安装 测试 光盘示例 Python测试.py 构建 Debian 软件包 解构 -i -us -uc -b

    i3ipc-glib:到 i3wm 的 AC 接口库

    i3ipc-GLib AC接口库到 。 关于 i3 的进程间通信(或 )是 i3wm 用来从客户端应用程序(例如i3-msg接收的接口。 它还具有发布/订阅机制,用于将窗口管理器事件通知相关方。 i3ipc-GLib 是一个用于控制窗口管理器的...

    vector-tile-glib:使用 MapCSS 渲染 Mapbox 矢量瓦片

    ##vector-tile-glib Vector-tile-glib 是一个 C 库,可用于使用渲染。 它是使用和编写的,因此可以在所有具有 GObject 内省绑定的语言中使用。依赖关系为了构建和使用 vector-tile-glib,您需要安装以下内容: 吉奥...

    glib-2.58.0-win64-vs2017-v141-sdk10.0.17134.12

    glib-2.58.0-win64-vs2017-v141-sdk10.0.17134.12 csdn-tags: glib-2.58.0 x64 vs2017v141 sdk17134 glib-2.58.0及其依赖包: bzip2-1.0.6-win64-vc141.zip glib-2.58.0-win64-vc141.zip libiconv-1.15-win64-vc...

    message_pump_glib.rar_On Message

    A brief refresher on GLib: Source Code for Linux.

    GLib 中文参考手册

    GLib中文参考手册,学习GLib库的好帮手,提高自己的C语言开发水平。

    GLib Reference Manual for GLib 2.16.1

    GLib Reference Manual for GLib 2.16.1 GLib 参考手册

    glib-2.63.3.tar.xz

    glib-2.63.3源码包,需要的可以下载编译,可以使用。 glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows...

    glib:https

    GLib GLib是低级核心库,它构成了GTK和GNOME等项目的基础。 它提供了C语言的数据结构处理,可移植性包装程序以及用于诸如事件循环,线程,动态加载和对象系统之类的运行时功能的接口。 官方下载位置为: : 官方...

    glib2-devel

    这个是glib2-devel,它和glib.2..不一样。 我是在编译heartbeat时,遇到缺少glib2-devel包的时候,下载的。 包含64位系统的和32位系统的

    glib的windows版本

    glib的Windows版本开发库,包含头文件及lib,运行时的动态库

Global site tag (gtag.js) - Google Analytics