CPP博客首篇-兼论GUI轮子

注:原文最早发表于cppblog,现转于此处。

一直以来都是一个C++的坚定支持者和努力实践者,尽管C++面临来自传统语言和动态语言的多方压力,但我仍然坚信C++有自己适用的领域和无可替代的地位。既然是C++的追随者,选择CPPBLOG来写点儿东西也就成了顺利成章的事情了。其实很久以前就考虑过在cppblog开博写点儿啥,但是一来没有文采,二来懒惰成性,这个想法就一直搁置了。最近偶然看到cexer同学的自己写的一个GUI框架的消息机制,突然就来了兴致,而且兴致颇高,因为我也是一个GUI轮子的制造者。因为一直感觉自己的GUI轮子(暂定名KWinUI)成熟度太低,所以只是自己在用。“重复发明轮子”的论点我是不想反驳的,这个世界不可能只有一个轮子,而且我们需要更好的轮子,更性感的轮子(“性感的轮子”语出cexer,呵呵),更适合自己的轮子。

GUI Framework的确是个覆盖范围极广的领域,平台依赖性比较强。线程管理、内存管理、消息派发、callback、i18n、图形渲染、组件模型、甚至包括跨平台的考虑等等,而且现在看来一个GUI Framework没有可视化GUI设计器的话,是远不够完美的。界面和逻辑的充分解耦乃是GUI Framework的终极追求之一,用xml来描述界面也许是个不错的主意。

C++的动态特性是比较薄弱的,比如RTTI、对象动态生成、对象序列化等等,而这些对于一个GUI Framework 来讲却是至关重要的,这需要付出更多的努力。尽管如此,C++仍然是最适合开发GUI的语言。

GUI如此之庞杂以至于凭一人之力实在是有所力不从心,简直是在自虐。

太笨重、丑陋的GUI框架不是我所喜欢的,所以我选择做自己轻量级的框架,虽然简单,却可以全局把握,运用自如。

还有一个重要的关注点,那就是thread safe,特别在这个多核风行的年代,自始至终都应该高度关注,尽量不要用全局的、static的变量,时刻注意各种competition conditions。

用C++来包装GUI,thunk是一个很好的trick,甚至是必须的,下一篇就来讲一下thunk。