欢迎光临散文网 会员登陆 & 注册

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

2021-12-16 13:14 作者:Boolan博览  | 我要投稿


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++相关生态将迎来巨大的发展机会:

  • 异构计算带来的巨大机会 

  • 人工智能对性能只会索要更多 

  • 嵌入式系统软件规模越来越大 

  • 大型工业软件计算需求井喷

  • ......




直播回顾丨现代C++的文艺复兴—暨《现代C++白皮书》发布的评论 (共 条)

分享到微博请遵守国家法律