- Boost程序库完全开发指南:深入C++”准”标准库(第5版)
- 罗剑锋
- 1621字
- 2020-08-27 16:45:14
十周年纪念·前言
我们的十年
每日埋头忙于工作和生活,等到写下这些文字时才蓦然发现,十年的光阴已经悄悄从身边溜走,不由得发出“逝者如斯夫,不舍昼夜”的感慨。
十年前大多数人还在用电话线“小水管”拨号上网,而十年后光纤宽带100M/200M已是常态。十年前IE浏览器还是上网主流,而十年后Chrome成了绝对霸主……
十年前功能手机正处巅峰,iPhone是刚崭露头角的“贵族”,而十年后智能手机已经普惠大众。十年前3G甫出,手机只能打电话发短信,而十年后5G已经“登场亮相”,各类App争奇斗艳,移动互联网渗透到了生活的方方面面……
十年前电影《阿凡达》刚刚上映,掀起了3D/IMAX的热潮,而十年后3D/IMAX已经比比皆是,但《阿凡达2》依旧遥遥无期……
十年前我的大女儿只有一岁半,而十年后二女儿都已经三岁了……
时间过得好快呀。
C++的十年
十年里的变化实在是太多太多,C++和Boost程序库也是这样。
在这十年里,C++推出了具有里程碑意义的C++11,开启了快速迭代的进化历程。从C++14、C++17一路走来,最新的携带诸多重磅新特性的C++20即将正式发布,令人十分期待。
在这十年里,C++也受到了诸多其他语言的挑战,D、Rust、Go、C#、Java等新老对手轮番上场,在C++的各个应用领域都发起了“猛攻”。但C++作为昔日的“龙头老大”,依然坚守住了一些“阵地”,维持着名声不坠。从TIOBE等编程语言排行榜来看,C++虽然已经不复当年的“王者荣耀”,但还是稳稳地占据着前五名之内的位置,这对一个有着三十多年历史的“老”语言来说算得上是相当难得了。
可以预见,在下一个十年里,C++依然会在底层、系统编程等领域具有优势,它的生命周期还很长,学习、使用C++还是有价值的。
Boost的十年
Boost作为C++的“‘准’标准库”,从十年前本书第1版时的1.42版本,发展到如今的1.72版本,中间经历了30个版本,基本保持着三四个月更新一次的频率。
作为一个“程序库”,它的改变没有语言标准那么“激进”,总体上保持着稳定的态势,仅移除了很少的几个旧组件(coroutine、minmal test、signal、tr1),同时其内部不断重构、优化、提升性能,还增加了数十个新组件。
通过这种严谨务实的做法,Boost一方面继续兼容不同的C++标准,另一方面又持续地扩充着C++的能力,为广大程序员提供了一个庞杂而可靠的“编程武器库”。无论你使用什么操作系统、编译器、语言标准,总能在Boost里找到称心如意的好东西。
十年的时间再次充分证明,“‘准’标准库”的名头绝非浪得虚名,而是实至名归。
不过随着C++标准和vc、gcc、clang等编译器的发展,越来越多的Boost组件都开始要求启用C++11了,这也算是件好事,毕竟C++98太“古老”了,适当地推动一下语言标准升级,对于你我来说,今后敲键盘的工作也能轻松一点。
本书的十年
本书第1版主要的开发环境是Windows和VC。到了第2版开发环境变成了Windows与Linux并重。随后的第3版和第4版,因为我的工作逐渐转移到了Linux,所以就放弃了Windows,全面采用了Linux和gcc。这些变化也反映了C++应用场景的变迁:由客户端转向服务器端开发。
关于本书的内容,因为编写本书第1版时C++11还未发布,只能使用C++98,所以第1版中重点介绍了Boost库里模拟C++11各种新特性、能够简化代码的组件,如typeof、foreach、result_of。编写本书第2版的时候C++11刚发布不久,编译器的支持还比较弱,只适当加入了少量C++11的内容。而在编写本书第3版和第4版的时候,各大编译器对C++11的支持已经很完善了,就完全采用了C++11,删去了旧版里许多过时的内容。
随着时代的前进,C++变得越来越“大”,Boost也变得越来越“大”,想在一本书(即使它很厚)里囊括所有内容已经成为一个“不可能的任务”。所以这次的修订我放弃了全面翻新的想法,而是尽量让这本书保持稳定,不引入过于复杂、高深的组件,只介绍Boost里最基本、最有用、最常用的知识。
希望本书能够成为Boost世界的“新手村”,无论是谁,都可以在这里磨炼、休息,在积累足够的经验后,再迈向外面的广阔天地。
十年感言
“十年之前,我不认识你,你不属于我。十年之后,我们是朋友,还可以问候。”
无论是新读者还是老朋友,我都衷心地感谢您对这本书的支持,祝愿我们都能在下一个十年里取得更大的进步,赢得更多的成功!
2020年2月20日于 北京 798园区