直播回顧丨現(xiàn)代C++的文藝復(fù)興—暨《現(xiàn)代C++白皮書》發(fā)布

01 現(xiàn)代C++
作為一門應(yīng)用廣泛的系統(tǒng)級編程語言,C++已經(jīng)誕生36年了,其不斷演化迭代,經(jīng)受了時代的考驗和錘煉,C++編寫的龐大系統(tǒng)軟件體系是當(dāng)今數(shù)字世界基礎(chǔ)設(shè)施的主要構(gòu)建者。
“現(xiàn)代C++”是指國際C++標(biāo)準(zhǔn)委員會在2006之后發(fā)布的4個版本,包括C++11/14/17/20?!冬F(xiàn)代C++白皮書》由“C++之父”Bjarne Stroustrup和全球C++及系統(tǒng)軟件技術(shù)大會聯(lián)合發(fā)布,作為公益書籍在中國C++社區(qū)發(fā)行。本書對現(xiàn)代C++從2006年到2020年間做了百科全書式的回顧,是現(xiàn)代C++發(fā)展歷史上最重要的文獻(xiàn)。
此次直播由Boolan首席軟件專家李建忠老師主講,從現(xiàn)代C++的技術(shù)演進(jìn)、精進(jìn)路線圖以及現(xiàn)代C++的應(yīng)用生態(tài)與發(fā)展這三個方面為大家解讀《現(xiàn)代C++白皮書》。
02?現(xiàn)代C++的技術(shù)演進(jìn)
抽象思維+機(jī)器思維
李建忠老師強(qiáng)調(diào)任何編程語言都需要具備兩種思維—面向機(jī)器底層的機(jī)器思維和面向領(lǐng)域和業(yè)務(wù)的抽象思維。

抽象思維
抽象是計算機(jī)科學(xué)中最重要的一種思維方式,抽象思維是人類管理復(fù)雜性的技術(shù)。程序員通常需要具備強(qiáng)大的抽象思維能力來處理復(fù)雜的業(yè)務(wù)邏輯,完成大型軟件的構(gòu)建。抽象思維包括:設(shè)計范式、組件封裝、設(shè)計模式、構(gòu)架模式等。李建忠老師對現(xiàn)代C++在抽象思維方面的改進(jìn)做了系統(tǒng)的梳理。
設(shè)計范式
概念提升后的泛型編程將進(jìn)入和OO并駕齊驅(qū)的應(yīng)用開發(fā)領(lǐng)域。現(xiàn)代C++設(shè)計范式的主要特性有:
? 面向過程
? 面向?qū)ο?/p>
? ?? enum class
? 泛型編程
? ?? 概念
? ?? 變參模板
? 函數(shù)式編程
? ?? lambda表達(dá)式
? 模板元編程
易用性改進(jìn)
直接表達(dá)做什么?而非描述具體怎么做。易用性改進(jìn)主要包括:
? auto 和decltype
? 范圍for
? 類型別名
? 統(tǒng)一初始化
? 默認(rèn)成員初始化器
? override與final
? nullptr
? 用戶定義字面量
? 構(gòu)造函數(shù)模板參數(shù)推導(dǎo)
? 結(jié)構(gòu)化綁定
? 條件中的顯式測試
機(jī)器思維
機(jī)器思維是指該語言對機(jī)器底層的微觀構(gòu)造,機(jī)器思維包括:語言構(gòu)造、編譯轉(zhuǎn)換、內(nèi)存模型、運(yùn)行時機(jī)制等。
內(nèi)存管理
內(nèi)存復(fù)雜性和自由度是C++的主要心智負(fù)擔(dān)(90%)?,F(xiàn)代C++對內(nèi)存管理進(jìn)行了大幅度的改進(jìn),極大地提升了內(nèi)存安全和性能:
? 智能指針
? ?? unique_ptr
? ?? shared_ptr
? ?? weak_ptr
? 右值引用
? 移動語義
? 去除不必要的拷貝(NVO)
編譯特性
編譯期計算可能是C++又一個極致性能追求的優(yōu)勢領(lǐng)地?,F(xiàn)代C++的編譯特性包括:
? 模塊
? constexpr函數(shù)
? 編譯期循環(huán)
? 可確保的編譯期求值
? 屬性(Attributes)
? 常量表達(dá)式if
? static_assert編譯器斷
并發(fā)和異構(gòu)計算
李建忠老師指出:硬件的發(fā)展始終是推動C++語言發(fā)展的源動力。隨著摩爾定律(Moore's Law)和登納德縮放定律(Dennard Scaling)的失效,并發(fā)和異構(gòu)計算將是C++的下一個巨大應(yīng)用領(lǐng)域。


現(xiàn)代C++在這方面的特性改進(jìn)包括:
? 并發(fā)
? 內(nèi)存模型
? 線程和鎖
? future/promise
? 并行算法
? 協(xié)程
03?精進(jìn)路線圖
李建忠老師指出”精通沒有標(biāo)準(zhǔn),但研習(xí)有路徑“,研究掌握C++的路徑,從低到高可以分成1~9級:
1級:掌握常見C++語法和語言構(gòu)造?
2級:掌握4-5種常用的編程范式
3級:清楚編譯器在后面干了什么( under the hood)
4級:清楚運(yùn)行時內(nèi)存模型( under the hood)
5級:熟悉常用OS 內(nèi)核和應(yīng)用API機(jī)制,調(diào)試工具和方法?
6級:對經(jīng)典庫應(yīng)用熟練,熟悉設(shè)計模式
7級:熟悉機(jī)器模型:CPU, Memery, Cache, GPU, Disk, I/O, Process, TCP/IP...
8級:大型類庫設(shè)計經(jīng)驗,駕馭松耦合、靈活性的設(shè)計問題
9級:大型系統(tǒng)設(shè)計經(jīng)驗,駕馭性能、內(nèi)存、規(guī)模等系統(tǒng)問題
04?現(xiàn)代C++的應(yīng)用生態(tài)與發(fā)展
C++已經(jīng)經(jīng)歷了36年的發(fā)展,依然擁有著旺盛的生命力。自2003年以來,在TIOBE編程語言流行榜上常年位于第四位。
C++之父對C++語言的最終目標(biāo)
使用和學(xué)習(xí)上都要比C或當(dāng)前的C++容易得多
完全類型安全—沒有隱式類型違規(guī),沒有懸空指針
完全資源安全 —沒有泄漏,不需要垃圾收集器
為其構(gòu)建工具要相對簡單—不要有宏
跟當(dāng)前C++一樣快或更快—零開銷原則
性能可預(yù)測—適用于嵌入式系統(tǒng)
表達(dá)力不亞于當(dāng)前的C++—很好地處理硬件
現(xiàn)代C++語言的空間巨大
C++語言的發(fā)展取決于系統(tǒng)軟件的需求。隨著計算機(jī)體系結(jié)構(gòu)迎來范式轉(zhuǎn)換,系統(tǒng)級軟件將迎來爆發(fā)式增長,現(xiàn)代C++相關(guān)生態(tài)將迎來巨大的發(fā)展機(jī)會:
異構(gòu)計算帶來的巨大機(jī)會?
人工智能對性能只會索要更多?
嵌入式系統(tǒng)軟件規(guī)模越來越大?
大型工業(yè)軟件計算需求井噴
......

