直播回顾丨现代C++的文艺复兴—暨《现代C++白皮书》发布

01 现代C++
作为一门应用广泛的系统级编程语言,C++已经诞生36年了,其不断演化迭代,经受了时代的考验和锤炼,C++编写的庞大系统软件体系是当今数字世界基础设施的主要构建者。
“现代C++”是指国际C++标准委员会在2006之后发布的4个版本,包括C++11/14/17/20。《现代C++白皮书》由“C++之父”Bjarne Stroustrup和全球C++及系统软件技术大会联合发布,作为公益书籍在中国C++社区发行。本书对现代C++从2006年到2020年间做了百科全书式的回顾,是现代C++发展历史上最重要的文献。
此次直播由Boolan首席软件专家李建忠老师主讲,从现代C++的技术演进、精进路线图以及现代C++的应用生态与发展这三个方面为大家解读《现代C++白皮书》。
02 现代C++的技术演进
抽象思维+机器思维
李建忠老师强调任何编程语言都需要具备两种思维—面向机器底层的机器思维和面向领域和业务的抽象思维。

抽象思维
抽象是计算机科学中最重要的一种思维方式,抽象思维是人类管理复杂性的技术。程序员通常需要具备强大的抽象思维能力来处理复杂的业务逻辑,完成大型软件的构建。抽象思维包括:设计范式、组件封装、设计模式、构架模式等。李建忠老师对现代C++在抽象思维方面的改进做了系统的梳理。
设计范式
概念提升后的泛型编程将进入和OO并驾齐驱的应用开发领域。现代C++设计范式的主要特性有:
• 面向过程
• 面向对象
• enum class
• 泛型编程
• 概念
• 变参模板
• 函数式编程
• lambda表达式
• 模板元编程
易用性改进
直接表达做什么?而非描述具体怎么做。易用性改进主要包括:
• auto 和decltype
• 范围for
• 类型别名
• 统一初始化
• 默认成员初始化器
• override与final
• nullptr
• 用户定义字面量
• 构造函数模板参数推导
• 结构化绑定
• 条件中的显式测试
机器思维
机器思维是指该语言对机器底层的微观构造,机器思维包括:语言构造、编译转换、内存模型、运行时机制等。
内存管理
内存复杂性和自由度是C++的主要心智负担(90%)。现代C++对内存管理进行了大幅度的改进,极大地提升了内存安全和性能:
• 智能指针
• unique_ptr
• shared_ptr
• weak_ptr
• 右值引用
• 移动语义
• 去除不必要的拷贝(NVO)
编译特性
编译期计算可能是C++又一个极致性能追求的优势领地。现代C++的编译特性包括:
• 模块
• constexpr函数
• 编译期循环
• 可确保的编译期求值
• 属性(Attributes)
• 常量表达式if
• static_assert编译器断
并发和异构计算
李建忠老师指出:硬件的发展始终是推动C++语言发展的源动力。随着摩尔定律(Moore's Law)和登纳德缩放定律(Dennard Scaling)的失效,并发和异构计算将是C++的下一个巨大应用领域。


现代C++在这方面的特性改进包括:
• 并发
• 内存模型
• 线程和锁
• future/promise
• 并行算法
• 协程
03 精进路线图
李建忠老师指出”精通没有标准,但研习有路径“,研究掌握C++的路径,从低到高可以分成1~9级:
1级:掌握常见C++语法和语言构造
2级:掌握4-5种常用的编程范式
3级:清楚编译器在后面干了什么( under the hood)
4级:清楚运行时内存模型( under the hood)
5级:熟悉常用OS 内核和应用API机制,调试工具和方法
6级:对经典库应用熟练,熟悉设计模式
7级:熟悉机器模型:CPU, Memery, Cache, GPU, Disk, I/O, Process, TCP/IP...
8级:大型类库设计经验,驾驭松耦合、灵活性的设计问题
9级:大型系统设计经验,驾驭性能、内存、规模等系统问题
04 现代C++的应用生态与发展
C++已经经历了36年的发展,依然拥有着旺盛的生命力。自2003年以来,在TIOBE编程语言流行榜上常年位于第四位。
C++之父对C++语言的最终目标
使用和学习上都要比C或当前的C++容易得多
完全类型安全—没有隐式类型违规,没有悬空指针
完全资源安全 —没有泄漏,不需要垃圾收集器
为其构建工具要相对简单—不要有宏
跟当前C++一样快或更快—零开销原则
性能可预测—适用于嵌入式系统
表达力不亚于当前的C++—很好地处理硬件
现代C++语言的空间巨大
C++语言的发展取决于系统软件的需求。随着计算机体系结构迎来范式转换,系统级软件将迎来爆发式增长,现代C++相关生态将迎来巨大的发展机会:
异构计算带来的巨大机会
人工智能对性能只会索要更多
嵌入式系统软件规模越来越大
大型工业软件计算需求井喷
......

