平时工作,很好有时间拿来自己安排学习,所以接触的东西比较杂乱。偶尔做个列表,列出最近完成的以及计划安排。
网络编程,摆弄各种API,其实弄明白了写点实验代码觉得什么都不是。当初想买TCP那三本龙书,想对底层探个究竟,可是终究还没能抽出时间。
网络库,网络库不是把socket不是把IOCP封装起来就可以的。再经历过各种架构,写过一些库代码后,自己对开发库的要求是越来越高。琢磨了良久,我心目中的网络库,即使是用来讨好自己的迷你型的,起码也该进行软件分层,从发送接收层到加解密层到数据校验层到消息层,这么多层次,要做好不容易。心里面其实有想法,无论如何,我应该秉持当初开发edge2d的态度,在真正动手之前先取万家之长。
MMO服务器分布式架构,不了解之前觉得宏大不可及,接触后其实也觉得没什么。凡事不要害怕,想想看,再深奥的东西,也是人想出来的。一个东西之所以复杂,是因为它经历了长久的变化。如果让我来想,如何通过服务器的分布式架构减轻单个服务器的负载,那我想出来的,最多是几年前的老东西。无论如何,分布式架构的模式在那里。关键是让自己去学着改善学着思考出自己的方案。本来安排了几个网络游戏代码让自己去读。可是竟然如此郁闷地找不到时间。
模板编程,想来做技术都秉持一个观点,一步一步来,不求多只求精。自己学C++分了好几个阶段,理论,实践,理论,实践。这样磨蹭着过来,一年时间竟也写了10万行代码。之前有过深入接触C++模板编程的想法,看了一阵子书,觉得基本上没获得一种模板实践编程的思想,果然是可学不可用的东西么?后来听说dophi说他们公司有个人被封为‘模板达人’,自己觉得有点意思。于是08年又把模板拿出来。看了<STL源码剖析>,翻了下STL源码,确实有时候觉得精妙不可言,大有拍案叫绝的感觉。不过从本质上来说,也不过如此。最近又开始看<C++设计新思维>,之前看过英文电子版第一章,对于满世界的policy混沌不已。现在看纸质的书,觉得感觉还行,没有原先想像的那么神圣不可及。现在很高兴有了模板编程的思想,时髦点说是泛型思维。当初很善于玩弄面向对象架构,老喜欢给别人炫耀一个系统的架构(例如我的edge2d),谈论各种设计模式。现在对于模板,也喜欢满世界地塞template,仿佛全世界都可以泛化一样。凡事有个度,不过自己允许自己在初期过于泛化吧。
自己模仿着loki写了个functor,觉得很美妙。打算将operator ==和copy constructor整理下就可以用于实践。
看了下stl的binary_function, unary_function, bind1st, bing2nd之类的functor, functor adapter,觉得真是粗糙不堪。不过我想,这种粗糙也情有可原,毕竟像loki这种挑战编译器极限的玩意,也只能算作程序员的炫耀品了吧?
准备看boost的bind,现在学技术老爱一杆子全部打下。学了网络编程就想多看几个网络库,自己写了线程池就想看看别人写的线程池,学了模板就四处找template看。so how about boost::bind ?
瞎摆弄了下asio,实在很想找个东西用来实践下,不想leader不允许。这世界,可学不可用的东西太多太多。
准备接触linux下的epoll,幻想着它也许就是一个轮询的查询方式,似乎还没IOCP来得优美。也许真正开始linux编程的时候,我也就真正不会使用exception。但是起码现在的观点是,鄙视那些因为C++的高级特性(多态异常所有你能想到的)而带来的C++的所谓低效率的人。如果你认为那么一点点语言机制会拖慢你系统的运行速度,那么你为什么不去看看你那些蜗牛一样的算法?如果你在用C++,那么专业点,努力不要写C风格的class(很别扭,是吧),努力进入C++的世界。我不是C++牛人,因此我不能告诉你C++标准库,C++准标准库,C++那么多那么多优秀的库,为什么要那样做,为什么要使用多态将整个系统抽象起来,为什么要用异常将整个系统throw起来,为什么那么多稀奇古怪的template typename。我只知道,我在写C++程序,所以我跟随这些库的作者。
内存池,不单单是内存池吧?总之关于自己管理内存的东西,STL里面有allocator(限于SGI的STL),loki里有SmallObject,这些都是不错的东西。如果可以,我会去实现一个allocator,内存分配器。但是如果折中,我会剥离STL的allocator,记住,policy设计方法学告诉我们,组装这些组件!
线程池,其实原理就那么简单。分配一堆取着用先,不够了再分配,积极回收吧。但是出于对自己多线程编程经验的不自信,我最终不敢炫耀我自己实现的线程池。我想,先培养我和多线程的感情先吧。
凌乱杂散了这么多,接下来换换重心,集中攻克一方面吧。