首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于使用boost:spirit后的编译时间有关问题

2014-01-03 
关于使用boost::spirit后的编译时间问题如题,我最近在研究boost的spirit库,就是解析库,很久以前我就注意到

关于使用boost::spirit后的编译时间问题
如题,我最近在研究boost的spirit库,就是解析库,很久以前我就注意到了,不过那时功能还没现在那么强大。最近我更新了boost1.55,发现spirit已经更新到2.5.2,可以说是被大改过了,而且变得更系统,所以就开始尝试了。我的目标是用它写出一个完整的xml解析工具。(例子里已经实现了最简单的xml解析)
经过好几天的摸索,遇到好多问题,最终还是大致成功了。
虽然spirit的官方帮助也蛮长了,但真正想完成复杂的功能发现这点帮助还是不够详细,期间遇到大量晦涩的编译错误(因为spirit把模板用到了极致),有些得求助stack overflow才能解决。这里说下spirit的使用体会。
优点:spirit确实相当强悍,写出的代码可读性非常好,而且短小精悍。而且运行效率也非常高
缺点:把模板用到了极致,所以一旦出编译错误,错误信息除了定位外毫无作用,所以修正错误机会都得靠自己对spirit的理解。当然,如果用熟了,这就不是问题了。另外,同样由于模板,编译时间变得特别长,长到难以忍受。我写的程序总共才几百行代码,却要编译1分多钟。这不是关键,关键是修改一处,再次编译的时间几乎和全部编译差不多~

所以我想讨论的问题就是怎么缩短编译时间。
[解决办法]
一入模板深似海,从此编译效率是路人
[解决办法]
嘿嘿,工作还没用过模板的说。
[解决办法]
用lex/yacc,别用spirit,这货更主要是装B用的。
[解决办法]
boost.spirit是展示c++的表述能力用的,不适用于实际代码中。
[解决办法]
boost是个很玩漂的东西,尽管它极大的推动了c++0x的发展,归根到底是个很玩漂的东西。没有哪个团队敢普及它。c++0x本身都是个让大多数人望而生畏的东西,但是它确实在标准模板上推动了效率。字符串解析是个永远的问题。最早是一个字符一个字符的判断,然后是lex和yacc。lex和yacc很是晦涩难懂。yacc无穷尽的冲突。lex在各种condition之间徘徊,复杂度高的难以想象,还有很多很多的宏。突然人们厌烦了,又开始一个一个字节的吃,比对篇幅后发现没啥区别。gcc3.x之前是用lex和yacc,突然改成自写lex和基于代码递归的词法解析。

热点排行