- Boost程序库完全开发指南:深入C++”准”标准库(第5版)
- 罗剑锋
- 2442字
- 2020-08-27 16:45:15
第1版前言
屈指算来,接触C++语言至今已经有十余个年头了。回首往事,不禁感慨良多。
缘起
1996年,我上大学最开始学的是Pascal,不得不说,Pascal的程序风格严谨,确实很适合作为一门教学语言,然而用于实际开发它就不那么合适了(直到出现Delphi)。由于当时学校并未开设C语言课程,所以在Pascal课程结束后,我就买书自学C/C++语言,并在次年报名计算机软件专业的技术资格和水平考试,靠着一点点编程和考试的“天分”获得了高级程序员资质(当年很热衷考级考证,后来就“淡定”多了)。虽然有了资格证,但我仍然是个C++的初学者,对于C++的认识还处于C的面向过程和简单的基于对象层次上。
新千年伊始,我考入了北京理工大学就读研究生,因为跟导师做项目开始接触STL与C++标准库,大概是2005年从1.33版开始接触Boost,这才真正领略了C++的精髓。那段时期,Java和C#正在国内大行其道,C++则势单力薄,有关STL和C++标准的技术书籍寥寥无几,更没有讲解Boost的书,故对Boost的学习基本只能靠自己的摸索与实践。好在Boost自带的文档的内容相当丰富(尽管看全英文的资料十分辛苦),而且其源码也比较清晰规范,在熟悉了STL的基础上学习Boost倒也不算太难。
但Boost的一个最大的特点就是“庞大”,其功能组件众多,要想把它全部装进脑子里融会贯通基本上是不可能的,使用Boost时需要经常查阅英文文档,相当麻烦。因此,在学习的过程中,我逐渐产生了编写学习笔记的想法。一开始的学习笔记只是简单的纯文本文件,记录了一些使用经验,随着不断累积,纯文本形式已经不能够满足我整理知识的需求了,于是我又把这些文字迁移到了Word文档里,并把这些使用经验分类编目,进行较系统的归纳梳理。慢慢地,这份学习笔记居然有了上万字的规模,成了一份很好的Boost备忘参考,它在日常的开发工作中给了我很大的帮助。就像《设计模式》一书中所说的那样,我捕获了很多使用Boost解决问题的实践经验,避免了重复发现。不过,这份资料一直仅限于我个人使用,属于“自娱自乐”的作品,从未示人。
时间一晃,到了2010年1月份的某天夜里,不知道是什么原因,我忽然失眠了,躺在床上翻来覆去怎么也睡不着。突然,一个念头闯入了我的脑海:把Boost开发经验整理出版吧,让更多人能够分享这些知识,正所谓“独乐乐,与众乐乐,孰乐”。这个大胆的想法的出现让我那天的失眠又延长了几个小时——关于书的各种构想在我的头脑中“肆虐横行”。
随后的几天里,我就把这个想法付诸行动了,虽然以前写过并发表过很多文章,也在网上印刷了几本个人文集,但出版正式的书还是第一次。在把学习笔记进一步整理完善,编写出较完整的结构和一个样章后,我就开始联系出版社了。当初并没有多大的信心,毕竟我这个作者名不见经传,也没有什么资历、背景和名气(而且还是个“网盲”,从未跟随潮流开个人博客)。很幸运,我发出的第一个E-mail就是给电子工业出版社发的,而且编辑也在第一时间回复了我,这才给了我持续写作完成全书的动力。
在写作过程中,我也进一步加深了对Boost的认识,弄清了许多原来未曾注意到的细节。原本我只打算写20万字左右、三百多页,但写到中途,我发现Boost库的博大精深远非我当初的理解,也意识到了自己当初的学习比较肤浅。我历经了近半年近乎不眠不休的努力,最终呈现给读者的是这本厚达500多页的图书,本书的文字量是最初的学习笔记的数十倍,其内容也翔实丰满了很多——达成这个结果,我个人可以说是问心无愧了。
C++与Boost
与Java和C#等语言相比,C++最大的不同之处在于它并非由某个公司或个人把持的,它真正的发展动力来自广大的程序员。Boost就是这样的一个典范,它成功地填补了从C++98到C++0X这“失落的十年”间的空白,在竞争对手Java和C#不断更新版本、新增特性的时候以库的形式极大地增强了C++的能力,使C++不至于因为标准规范的滞后而落后于时代,而且Boost还深层次地挖掘了C++的潜力,开创了泛型编程、模板元编程、函数式编程等崭新的境界。
就个人来说,我比较喜欢的Boost版本有两个,分别是1.35版和1.39版。1.35版增加了asio、bimap、circular_buffer等许多重要组件,而1.39版则增加了signals2库,这两个版本都在我的工作用机上停留了相当长的时间。落笔之时,Boost已经更新到了1.43版,成长为一个相当完善、全面、强大的C++程序库。可以毫不夸张地说,现在的C++程序员,如果不熟悉Boost,那么他至少会丧失一半使用C++的好处,同时会多耗费数倍的开发精力和时间。
随着C++0X标准即将来临,Boost程序库的发展也出现了加速的趋势,由原来间隔数月不定期更新版本,改为定期(每3个月左右)发布新版本,而且每个新版本都会包含大量极有价值的更新内容。因此,希望读者在阅读本书时及时访问Boost的官网(http://www.boost.org),以便获取最新的版本。
感谢读者选择本书,再说一句真心的“套话”(笑):限于作者水平有限,书中错漏在所难免,敬请读者原谅、指正。
致谢
首先,我要感谢整个C++群体,特别是C++语言的发明者Bjarne Stroustrup博士——他给我们带来了美妙的C++;然后是Alexander Stepanov和C++标准委员会——他们把STL引入了C++,开创了C++的现代编程风格;以及Beman G.Dawes、Boost程序库的所有作者和Boost社区——他们为我们奉献了如此高水准的程序库。
其次,我要感谢电子工业出版社博文视点公司,他们给了我这个把自己的开发经验出版成书的机会,在把潦草的个人学习笔记变成正式图书的过程中,他们付出了艰辛的努力。还要感谢陈硕先生,他审阅了本书的部分手稿,提出了很多有价值的参考意见,并慨然为本书撰写序言。
再次,我要感谢我的家人:感谢我的父母和弟弟,他们永远是我生命中最重要的人;感谢我的妻子,她自始至终都支持我写作,并担负了大部分照顾孩子的家务(虽然偶有怨言);我还要对已满一岁半的女儿说声抱歉,为了写作本书,我牺牲了很多陪她玩耍的时间。
再次,我还要感谢黄美华、冯薇、戚天龙、罗玉震、颜静、陈刚、张秋香、缪泽波等同事,长期的共事令我们建立了深厚的友谊。在此,我要对后两位同事致以特别的感谢,他们对完成本书的写作提供了大力的支持和帮助。
最后,感谢多年以来的好友岳大海、时吉斌、王峰,感谢我的中学老师邓英、杜爱芹、练鑫云、陈静,感谢我的研究生导师贾云得,以及所有在我成长过程中曾经给予我关心和帮助的朋友们!
罗剑锋
2010年6月7日于 北京 王府井