自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Forlan的专栏

习惯反思过去和自我否定才会变的越来越完美

  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 陈硕的这个文章分析的相当精彩,相信Cpper体会的刻骨铭心!

<br />C++ 工程实践(5):避免使用虚函数作为库的接口<br />http://blog.csdn.net/Solstice/archive/2011/03/12/6244905.aspx<br /> <br />Cpp的三大法宝,封装、继承和多态,现在越来越发现,封装是根本,继承和多态倒不是必要的。

2011-03-13 13:42:00 1610

原创 C++语言99个常见编程错误57:对参数的直接初始化

首先,本书的翻译看起来挺别扭的,远没有effective系列朗朗上口。但书中作者贵为贝尔实验室最早使用C++语言的人之一,相信不少观点还是值得翻看的。关于常见错误57,有兴趣并且能解析清楚的人,相信对编译器和运行效率方面还是比较关心的。事实上,标准是标准,实现是实现,所以编译器实现和标准有出入就不足为奇了。所以当看到f(1337)这样貌似简单的调用,理论上居然会生成两个临时对象,相信不少人还是比较惊讶的。因为正如书中所说,C++标准明明白白的:参数传递是以复制初始化实现的。由于1337不是yFormalAr

2011-02-28 16:51:00 1102 1

原创 TTCN3新执行器系列-端口操作的接口简单化重构

<br />08年做ttcn3转换器的时候,最烦人的工作就是做端口操作的模块。<br />其实端口操作也就send、receive、trigger和check语义,其他过程调用的操作我们已经不打算做的了。<br /> <br />下面是send语法:<br />Port "." send "(" TemplateInstance ")"<br />[ to ( AddressRef | AddressRefList | all component ) ]<br /> <br />下面是receive语法:<

2011-01-26 18:22:00 1302 2

原创 对《如何加快C++代码的编译速度的几种技巧》文中提到的方法进行思考

<br />原文见<br />http://www.cnblogs.com/vacuum/archive/2010/03/08/1681085.html<br /> <br />首先应该肯定的是,这是一篇很好的文章,尤其对C++编译速度关系的更应该值得一读。<br />针对文中提到的各种各样的方法,结合ttcn3新执行器项目面对的问题进行一次深刻思考,是有必要的。<br />文章开头首先对C++编译模式进行了介绍,并分析出为什么会比较慢的原因,相信很多人都是有共鸣的。<br />编译慢的问题在大工程中尤其明

2010-12-20 17:56:00 1094

原创 最近在学习Posix Thread

<br />网上找了两本电子版的,都是全英,学习之余锻炼en文也是不错的选择。<br />《Pthreads Primer.pdf》《Pthreads Programming.chm》

2010-12-09 16:37:00 479

转载 【转贴】风雨20年:我所积累的20条编程经验

http://news.csdn.net/a/20101113/281933.html20年后,蓦然回首,你又会积累了什么呢?

2010-11-14 20:39:00 435

原创 有些东西从看的明到看的有感觉了,层次可能就不一样了。

<br />http://blog.csdn.net/myan/archive/2010/10/09/5928531.aspx<br /> <br />虽然我很喜欢C++,但作为一个程序员,应该用open mind的心态去拥抱其他语言,<br />很多东西没有最好,只有适合不适合而已,语言也是一样的。<br /> 

2010-11-12 22:49:00 727

原创 TTCN3新执行器系列-说说基于TTCN3代码行的调试器实现

关于调试器,基于内存对象的TTCN3执行器是支持的。但对于新执行器,也就是基于语言转换的版本,我们需要重头实现,工作量和难度不小。首先,TTCN3转换成C++语言来跑,那调试是基于TTCN3还是C++?从用户角度来说,当然是TTCN3了,用户根本就不会理会你转

2010-11-07 16:21:00 1186 3

原创 冗余包含卫哨如何加快编译速度?

<br />最近读了两本书,一本是《大规模C++程序设计》,另一本是《C++必知必会》。<br />里面都有提到卫哨这个概念,譬如包含卫哨(内部卫哨)和冗余包含卫哨(外部卫哨)。<br />其实包含卫哨大家平时编程过程中是用的特别特别多的,<br />#ifndef HDR1_H<br />#define HDR1_H<br />//头文件的实际内容<br />#endif<br /> <br />如果面试过程中问到这个有什么作用,相信很多童鞋都能应答自如的了。<br />但其实真正让我感兴趣的是冗余包含卫

2010-10-26 11:41:00 1224

原创 TTCN3新执行器系列-说说C++的编译速度

<br />无意在博客园milo的blog中看到,<br />http://www.cnblogs.com/miloyip/archive/2010/09/17/behind_cplusplus.html<br />最开始的C++编译器,是将C++代码转换成C代码,使用C编译器来实现的。<br />这个没有具体考究,但听起来是很可信的。<br />因为,C++是从C发展起来的,也就是所谓的c with class,<br />当时C++的语言特性还是很简单的,基于语言翻译来做完全是可行且不会特复杂的。<br

2010-10-24 23:12:00 1226

原创 TTCN3新执行器系列-尽量远离template

<br />TO DO

2010-10-16 10:04:00 624

原创 TTCN3新执行器系列-实现简单的反射机制

<br />听到反射机制,大家第一时间想到java语言。<br />我不是写java的,但问过相关的同事,大家都说反射机制在java中使用的非常广泛。<br />java的反射机制是语言级别的,得益于字节码,编译过程中生成额外的信息能保留下来,<br />也就是牺牲了部分空间来换取可扩展性,这是很值得去做的。<br />反过来看C++,虽然网上也有很多反射机制实现的方法,但毕竟不是语言级别的,<br />所以顶多算模拟,还用的非常不爽。<br /><br />有人说,C++的RTTI(Runtime Typ

2010-10-09 14:33:00 688

原创 TTCN3新执行器系列-合理映射runson语义

<br />TTCN3是一个比较怪的语言,<br />大部分语法语义都是面向过程的,但有几个概念又很面向对象,如组件。<br />说到组件,不得不说runson关键字。<br />runson关键字可以使用于function和altstep中。<br /> <br />type component MTC<br />{<br /> ......<br />}<br />function Hello() runs on MTC<br />{<br /> ......<br />}<br /> <br />ru

2010-10-08 22:51:00 1226

原创 简析function/bind如何实现类成员函数指针绑定调用

<br />在一次项目开发中,需要将类内的一些非static成员方法作为线程函数启动,<br />大家都知道了,线程函数是有要求的,包括返回值、参数类型和个数,而且要求是全局函数或类内的static函数。<br />当然,使用做多的是,在外面封装一下函数,然后把类实体,如this作为参数传递进去,然后在函数内通过this调用成员方法。<br />但这样做比较别扭,额外写不少不少代码,而boost的function和bind恰恰解决了这个问题。<br />可能不少人有疑惑,类的非static成员函数为啥就比较

2010-10-08 21:33:00 3324

原创 简评一下看过的C++书籍

<br /> <br />看过的书不多,但还是有几本的,下面随心而发一下。<br />《The Design and Evolution of C++》<br />《C++语言的设计和演化》<br />C++作者写的书,第一次看的时候已经入迷了,平时有空也会翻看一下。<br /><br />《Inside the C++ Object Model》<br />《深度探索C++对象模型》<br />这是一本看完之后自我感觉上了一个档次的书,如果你不是新手,都建议认真看上几次。<br /><br />《Effe

2010-10-07 15:43:00 2344 1

原创 TTCN3新执行器系列-实现类型兼容问题

<br />ttcn3语言有类型兼容这样一个概念,主要用于赋值情况。<br />最简单就是简单类型兼容,如integer类型,<br />由于ttcn3的integer属于内建类型,但同时你可以在asn文件中重定义并加上范围限制。<br />于是,一般的asn文件定义的integer类型是非常多的,可以有数十种之多。<br />如果我们把ttcn3内建的integer看做是基类,则asn重定义的应该就是派生类了。<br /> <br />因为我们的新执行器是基于C++实现的,所以也看看C++的情况。<br

2010-10-06 15:17:00 729

原创 对头文件依赖的新理解

今晚随手翻看了一下《Effective C++》,突然对条款34: 将文件间的编译依赖性降至最低,比较感兴趣,于是又重看了一次。对类型前向声明代替头文件引入适用的情景有了一个新的理解,以前用的最多的是,适用指针或者引用,但文中还说到了返回值和参数都可以利用这一规则(以前觉得是不行的)。于是网上google了一下,结果找到了《Google C++风格指南》里面关于头文件依赖的章节。当一个头文件被包含的同时也引入了新的依赖, 一旦该头文件被修改, 代码就会被重新编译. 如果这个头文件又包含了其他头文件, 这些头

2010-10-04 22:53:00 3518 1

原创 TTCN3新执行器系列-谈谈几次伤筋动骨的重构工作

<br />我们做新执行器的时候,已经有一个很稳定的执行器在公司内广泛使用的了,<br />但我们认为,新旧执行器的实现是差之千里的,从一开始我们就没有重视旧执行器的实现,也没有最大限度的重用其模块,<br />恰恰,后来经历的几次重大重构工作,殊途同归,转了一大个圈,最后还是回到了旧执行器的基础上。<br />这样的教训值得深思,或许这就是成长代价。<br /> <br />旧执行器<br />基于内存对象模型实现,使用了ANTLR的词法语法功能,然后构造出一个完备语义的内存对象集合,具有分析、编译、链接

2010-10-03 10:32:00 757

原创 360 开始叫板腾讯的时候

<br />最近360和腾讯打的火热,可以预见后续还会火热下去,<br />在这个强者恒强的世界里,你有实力,要吸引舆论的目光,你就有必要高调。<br /> <br /> <br />《周鸿祎:360需要的,不是打工者》<br />http://news.csdn.net/a/20100926/279863.html<br /> 

2010-10-02 11:08:00 371

原创 TTCN3新执行器系列-如何最小化类的成员函数(对拷贝构造和赋值操作函数的反思)

<br />2009年4月份,我们的TTCN3新执行器大体功能已经完成了,于是找了几个项目来试点应用。<br />应用效果不太理想,特别是对于5万行以上的脚本工程,且包括大asn文件的情况。<br />新执行器转换出来的C++代码量很大,特别是由于asn类型很多,导致hpp文件代码量大的编译速度下降严重问题。<br /> <br />当时的数据大概是这样的,大asn文件存在5千多个不同的类型(约5万行),包括简单和复杂类型,<br />平均每个类型转换后的hpp代码量,约20行,合计超过1万行的hpp文件,

2010-09-30 16:03:00 668

原创 TTCN3新执行器系列-对线程组件PTC的理解

TTCN3语言中组件(component)概念是很重要的,组件可以作为用例(testcase)执行的主线程,也可以作为函数(function)执行的子线程。作为子线程执行时,使用组件的start方法调用。start可以调用runson该组件上的所有function,包括不同参数个数和参数类型。我们使用C++的线程函数都知道,对函数是有要求的,不能随便一个函数都可以作为线程函数调用。当然,解决方法有很多,比较简单的是,对成员函数进行二次封装,把this作为参数传递,这样就可以很容易调用this的成员函数了。但

2010-09-29 12:34:00 835

原创 threadpool源码分析

threadpool是基于boost库实现的一个线程池子库,并没有纳入到boost库中,所以目前是在sourceforce开源的一个项目。至于为什么boost有pool库有thread库而没有threadpool,这个不太了解。但线程池实现起来不是很难,我看muduo也就花了100行代码就实现了,当然这是比较简单的,够用。那我们从threadpool中又能学到什么东西呢?首先,它是基于boost库实现的,如果大家对boost库有兴趣,看看一个简单的实现还是可以学到点东西的。其次,它的代码量不多,大概2k左右

2010-09-21 17:04:00 4318 1

原创 volatile和LockingPtr

muduo里面有一个简单的threadpool实现,但还是不过瘾,于是看看boost有没有更复杂的,才发现居然没有纳入,后来google到sorceforge里面有一个开源的,也是基于boost实现的,于是下载看看。代码不多,但看不习惯泛型代码还是非常痛苦的。浏览过程中发现了一个比较怪的用法(locking_ptr.hpp),一个ptr和一个mutex封装成一个wrapper来使用,第一时间就觉得有点效率不高,作者是这些解析的:* The class is a wrapper for a volatile

2010-09-18 22:53:00 1224

原创 对enable_shared_from_this、weak_ptr、shared_ptr的理解

关于这两个smart_ptr,网上search一把都能够找到一大堆使用介绍,但欠缺的是对源码的分析,的确,boost的代码不好看懂,scoped_ptr还好,比较简单,依赖也少,但如果看shared_ptr和weak_ptr就麻烦了,里面的东西本来就多,还依赖的很(weak_ptr本来就依赖shared_ptr)。重要的是,我对weak_ptr非常感兴趣,《超越C++标准库:Boost库导引》对他的应用总结如下:对于以下情形使用 weak_ptr :要打破递归的依赖关系使用一个共享的资源而不需要共享所有权避

2010-09-15 22:41:00 1067

原创 后面的时间要好好学习网络编程方面的咚咚了

平时工作不涉及这方面的内容,打算空闲时间自学,做C++开发快5年了,只做过GUI和编译器,后面希望在网络编程方面重点投入,毕竟这方面的东西还是挺多的。手上的资料包括:1、ace 文档不多,把那几本书看完然后好好理解一下。2、asio,泛型编程的代码不好看,但文档资料还是挺全的,理解第一。3、libevent,这个是linux下网络编程库的不错选择,基于c语言的,重点是理解框架。4、spserver,人家基于libevent基础上封装的二次框架,看看人家都做了些什么还是很不错的。5、Sockets,一个开源的

2010-09-08 22:26:00 990

原创 TTCN3新执行器系列-对component的理解

说说TTCN3语言的component实现以前实现TTCN3执行器的时候,老实说对标准的理解是很不透彻的,最明显的一个例子就是关于组件的使用方面。组件在TTCN3语言中是一个很重要的概念,除了runson的用例和方法外,由于端口也常常作为组件的成员属性,所以使用上是非常非常广泛的。简单来说,组件的操作包括create、start、stop、running,新标准还包括alive、kill等。同时,组件支持比较和复制实现,这对一个复杂类型来说,是一个难点。type component MTC{}testcas

2010-08-16 15:04:00 1398 1

原创 TTCN3新执行器系列-序

为什么说是TTCN3新执行器?因为来公司时,项目组已经有一个基于内存对象模型的TTCN3执行器,就是大名鼎鼎的GTR。为什么要做个新的?因为业界都是基于语言转换模型的,为了向业界看齐,也为了后续执行器的长期演进,所以投入了几个人来预研,当然我作为一个刚来报道的新员工很幸运的加入了其中。反思这近三年的开发,总的来说项目不算成功,甚至可以说是半失败的,当然这里面有太多的原因,例如:1、技术没有得到很好的积累传承。第一代执行器的开发骨干基本没有参与进来,按照albert的说法,刚开始做的时候连执行器是如何跑的都是

2010-08-06 22:03:00 1155 1

转载 【转贴】没有吃够苦头的C++程序员称不上了解C++

个人非常认同这个学习曲线图,C++确实是一门非常复杂的语言,没有多年开发经验,写上多少万行代码,根本就很难领悟到个中的感受。近日,国外技术博客lbrady.com 发表了一篇非常有意思的博文。文章认为C++语言庞大而复杂,只有那些在c++开发之旅上吃过许多苦头的程序员才能真正的了解C++。显然作者受到一些刺激,他的博文名称为“永远不要相信那些自称懂C++的程序员(Never trust a programmer who says he knows C++)”。原文如下:   经过一段长时间的面试工作后,我意

2010-08-03 21:40:00 637

原创 来H公司两年多时间都干了些什么了?

来H公司这2年多的时间,就做了一个项目,而且还没做完,呵呵。。。这好像就是我的风格,以前在佛山公司的时候也是这样,一个项目能拖你几年时间,把你的所有激情都耗尽。。。 回顾这两年多时间,其实做的面非常窄,基本专注于一个语言转换的编译执行器的工作,从语言抽象映射来说,对C++的理解是加深了很多的,但除此之外,好像也找不出别的值得炫耀的东西了。 做的东西在业界来说,也是TOPN水

2010-04-08 21:46:00 753 2

原创 Boost库里面有很多子库都很值得一试

 RT

2009-06-28 21:40:00 639

原创 VC的Bug?

Debug模式下面,居然给我跑出一个constructor两个deconstructor?这个和NRV没有关系,Debug模式下面是不做任何优化的啊!  class CNRV{public: CNRV() {cout  virtual ~CNRV() {cout }; CNRV GetNRV(){ CNRV a; return a;} int main(array

2009-06-15 22:02:00 1405

Effective Java中文书签版.pdf

潘爱民翻译的扫描版本,我自己加了书签,看起来还可以的。

2011-01-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除