摘要:永远活在同步的流程里,无疑是我等码工最大的奢望之一。为了不阻塞UI,为了读写一陀陀数据,为了含辛茹苦的演算复杂的逻辑,为了大家和睦相处共同劳动,总是需要异步处理,你一下我一下共同完成任务。在Symbian中,做了一套机制来做这件事情,这就是Active Objects。Active ObjectsActive Object是一套事件驱动的多任务模型。在Symbian的标准线程中(除掉一些Java构...
阅读全文
摘要:【四】 Symbian的容器Symbian在设计之初,没有拥抱STL,这就要求,它需要重新制作一些轮子,容器便是其中的一个。CArray系列容器Symbian的设计者,非常喜欢复杂的继承结构和保罗万象的类,CArray系列的容器,就是在这种理念下的产物。CArray是顺序容器,相当于STL的vector + list,以及更多。CArray系列容器,在继承的最底端,也就是可实例化使用的类,都采用C...
阅读全文
摘要:【三】 Symbian的描述符所谓描述符,一定程度上等同于字符串。只不过与C++的字符串不一样,Symbian中的描述符都是用一个附加的整数描述其长度,而不是以'\0'做终结符。因此,描述符可以表达任意数据,字符串或者二进制串。描述符体系打开任何一本关于Symbian介绍的书,都可以看到Symbian描述符那复杂的继承体系。它的基类是TDesC,顾名思义,T是代表它是T类,后缀C表示它是一个常量,...
阅读全文
摘要:【二】 Symbian对象构造C++的纯手工内存管理,确实是一个万恶之源。在对象构造时,有一个著名的内存泄漏隐患问题。比如一个类如下:class A{public: A() { a1 = new T1(); a2 = new T2(); ... an = new Tn(); }private: T1 * a1; T2 * a2; ... Tn * an;}当你调用 new A() 进行分配的...
阅读全文
摘要:【一】 Symbian命名法每个美感尚存的C++ coder,第一次看到Symbian C++的程序,第一反应是:这鬼代码怎么缩进的?接下来,所有人会有疑问应该是:函数和类上的乱七八糟的前后缀是啥意思?娃再丑也是爸妈生的,生成这模样虽然很无奈,但确实也是事出有因。在我看来,Symbian命名法的核心出发点,就是为了更好的内存资源管理。C++的人肉内存管理模式,在给人以控制到字节的快感的同时,也带了...
阅读全文
摘要:分布式基础学习所谓分布式,在这里,很狭义的指代以Google的三驾马车,GFS、Map/Reduce、BigTable为框架核心的分布式存储和计算系统。通常如我一样初学的人,会以Google这几份经典的论文作为开端的。它们勾勒出了分布式存储和计算的一个基本蓝图,已可窥见其几分风韵,但终究还是由于缺少一些实现的代码和示例,色彩有些斑驳,缺少了点感性。幸好我们还有Open Source,还有Hadoo...
阅读全文
摘要:【五】 Chrome的插件模型1. NPAPI为了紧密的与各个开源浏览器团结起来,共同抗击IE的垄断,Chrome的插件,也遵循了NPAPI(Netscape Plugin Application Programming Interface)标准,支持这个标准的浏览器需要实现一组规定的API供插件调用,这组API形如NPN_XXX,比如NPN_GetURL,插件可以利用这些API进行二次开发。而N...
阅读全文
摘要:【四】Chrome的UI绘制1. Chrome的窗口控件Chrome提供了自己的一个UI控件库,相关文档可以参见这里。用Chrome自己的话来说,我觉得市面上的七荤八素的图形控件库都不好用,于是自己倒腾倒腾实现了一套。。。广告虽如此说,不过,Chrome的图形控件结构,我还未发现有啥非常非常特别的地方。Chrome的窗口、按钮、菜单之类的控件,都直接或间接派生自View,这个是控件基类。Chrom...
阅读全文
摘要:【三】 Chrome的进程模型1. 基本的进程结构Chrome是一个多进程的架构,不过所有的进程都会由老大,Browser进程来管理,走的是集中化管理的路子。在Browser进程中,有xxxProcessHost,每一个host,都对应着一个Process,比如RenderProcessHost对应着RenderProcess,PluginProcessHost对应着PluginProcess,有...
阅读全文
摘要:【二】Chrome的进程间通信1. Chrome进程通信的基本模式进程间通信,叫做IPC(Inter-Process Communication),在Chrome不多的文档中,有一篇就是介绍这个的,在这里。Chrome最主要有三类进程,一类是Browser主进程,我们一直尊称它老人家为老大;还有一类是各个Render进程,前面也提过了;另外还有一类一直没说过,是Plugin进程,每一个插件,在Ch...
阅读全文
摘要:Doxygen,大名鼎鼎的文档生成工具,被Boost、OpenCasCade等诸多项目作为文档生成的不二人选。人说,才华横溢往往是高深莫测,这句话放在Doxygen这里显然是不适用的。十八般武艺样样精通的Doxygen,却十分的简单易用,从头到尾看一下它随机的文档,想不会用都难。。。嫌看英文麻烦的,这里有一篇中文的入门介绍。简单的说,如果你准备在项目中采用Doxygen作为文档生成的工具,首先,你...
阅读全文
摘要:最近在把一个Fortran的程序封成模块整合进一个C++的平台中。平生第一次做fortran,也算是第一次正二八经的做二进制的混合开发。简单写一些,算为前一段工作做个总结。。。Fortran90与C++的整合,可以基于静态链接。就是都生成obj,然后link在一起。当然也可以是动态链接的,把Fortran打成dll,然后在C++中调用(windows下...)。当然,这都不会是本质性的问题,你可以...
阅读全文
摘要:前段时间陆陆续续读完了pangba老大力荐的Why Programs Fail,一本关于程序调试的大作。给人最大的启发就是调试是一门科学而不是艺术。我从来不知道,原来调试还有那么多的千奇百怪的工具,可以写那么多的数学推导。从小学开始我们就开始了解,作文没写好你可以说老师欣赏不了,而数学题算错了只能怪自己混的不够到位。于是我们总是很主观的把调试当成艺术来看待,调试能力的高低不仅取决大量经验的积累也是...
阅读全文
摘要:前段时间看了一些关于GC的论文、书和源码。源码指的是Boehm的保守GC ,论文也主要是围绕这个GC相关的算法,另外还包括一些survey和性能分析的论文。而其他关于GC的一些东西主要是从其他两本书上看来,一本是谢之易老大翻译的垃圾收集 ,目前唯一一本关于GC算法的书,还有就是仔细阅读了C# via CLR 中关于.net GC的部分。原本想做个GC算法上的总结,但前几天在实验室做了个关于GC i...
阅读全文