2009年4月25日

Learning Qt or Gtk+, The Good-Practice of Framework

大型框架实践

去年暑假看了一把传说中的 SICP, Structure and Interpretation of Computer Programs, 一开始看得比较艰难, 对于 Scheme 函数式编程的思维模式, 也感觉不太容易接受. 但是渐渐的, 就逐步进入了状态, 越看越兴奋, 几乎将整本书都阅读了一遍. 可惜的是, 现在大脑里残留的, 貌似已经所剩无几了. -_-
究其原因, 还是构建大型程序的实践过于缺乏, 加之整本书看的太快, 很多东西没有真正的固化到大脑里, 所以这样的空中楼阁自然容易倾覆.

今天看到一段话, Beijing OpenParty 聚会上, 孟岩总结了云风等若干老大成为牛人的契机之所在, 几乎都有一个共同点, 就是在某个阶段, 做了一件非常有意义的事情 --- 阅读了高质量的架构性质的源码. 如果我没有记错, 似乎曾经看到云风的个人主页上有他大三的时候翻译的 Allegro, 一款游戏程序库, 的源代码分析. 豆瓣的技术总监flyconder也将大二期间反汇编「街头霸王2」的源码并还原成C代码看成是令其「茅塞顿开」之事. 还有那位先是做流氓插件3721转而做反流氓软件360安全卫士的周鸿㭏董事长, 据说也是从大学期间反汇编 DOS 起家, 工作后赶上互联网浪潮, 又与众不同的研究底层协议, 最终能够生产出流氓插件3721 囧. 当然周鸿㭏这事情并不值得称道, 但是作为个人技术发展历程, 其还是有可借鉴之处的.

这一次做毕设, 选择做 μC/OS-II 的调度改进就算是一次靠近了, 尽管说实话还离核心部分还很远, 而且个人习惯上还是有N多毛病, 譬如拖拉譬如晚睡晚起等等. 路漫漫啊.
前不久提到的项目问题直接就搁浅了, 老师和公司里的人前期沟通不够, 原本以为去做 CAN 控制局域网络的开发, 没想到他们是要找一个在 Windows 上做 MFC 的人, 真是汗啊, 囧, 这需求差别太大了, 何况 MFC 我只是在大二的 cpp 课堂上被迫接触了一些皮毛, 着实不喜欢 MFC 的开发风格.
不过尽管项目搁浅了, 回来后也查阅了一些做界面的框架, 啥 wxWidget Qt Gtk+ Tcl/Tk, 貌似都是可拓展性很强的框架, 而且开发语言的绑定, bindings of programming languages, 也很丰富. 但是个人感觉 QtGtk+ 可能更加值得研究一些. 如果稍微做对比, 这条邮件列表里的回复挺到位的, 有些东西可能已经改变, 但是总体上来看, 貌似还是蛮值得一看的.

我在这里也粗浅的列举一下其主要的差异点 ---
#1 Qt是非纯粹的cpp, 这一点从其编译的时候使用的是qmake而非make也可以看出. 从一个QObject 出发定义了其他的类结构, 彼此之间可以直接进行 inter-object communication.
Gtk+是用C语言写就的. 不过也是采用了面向对象的思想. 但是个人感觉似乎框架上没有Qt那么豪迈和气魄, 而是更加符合linux所提倡的简约.
据称大型程序的代码量Qt要少于Gtk+而且结构会更加清晰. 这可能和前者是专业公司维护有关, 更何况Qt已经被诺基亚收购, 发展前景貌似也更好.

#2 Gtk+和Qt都不仅仅是图形界面编程的框架, 其内涵其实非常丰富, 所以不管哪一个都比较适合作为学习的素材. 但是据称Qt的API更加稳定, 这一点从Qt对于object的命名, 以及其无比规范的文档也可以窥见端倪(不过只是网上找到的传言罢了, 真实性不保证).

#3 Qt的可移植性比Gtk+要好, 但是从Gtk+构建的Maemo来看, 未来Gtk+可能也会迎头赶上吧. 但是无论如何, Qt现在绝对走在前面.

#4 文档方面, Qt做的太到位了. http://doc.trolltech.com/4.0/index.html
我下载了一个Windows版本的Qt SDK套装, 其中的Creator和Demo+Documentation的完整展示真是让人怦然心动. 囧

#5 如果想要使用Qt做闭源的商业软件, 那么需要交纳一定的版权费, 但是似乎并不是很贵. 如果你选择将软件按照GPL开源, 就毋需交纳版权费. 使用Gtk+就可以「真正的」免费使用.
还是先接触 Qt 再接触 Gtk+ 吧, 尽管我着实不愿意走cpp路线, 但是既然主要是关注架构层面, 也就不要顾虑语言方面的问题了. 出来混, 迟早都是要尝到的.

- EOF -

没有评论:

发表评论

不要使用过激的暴力或者色情词汇.
不要充当勇猛小飞侠 --- 飘过 飞过 扑扑翅膀飞走 被雷得外焦里嫩地飞走.
万万不可充当小乌龟 --- 爬过.
构建河蟹社会 责任你有 我有 大家有 -_-

Creative Commons License 转载请指明出处. 谢谢合作.
/***********************
author: jtuki
http://jtuki.blogspot.com/
***********************/