免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C :后現(xiàn)代的系統(tǒng)編程語言 | 程序師

C++作為一門經(jīng)典的編程語言,從上世紀(jì)八十年代起至今一直被廣泛應(yīng)用在系統(tǒng)開發(fā)和高性能計(jì)算領(lǐng)域。近幾年來隨著各種編程語言和范式的興起,C++的身影漸漸淡出了人們的視野。但是作為一個(gè)仍在不斷進(jìn)步的語言,C++在最近幾年飛速發(fā)展,已經(jīng)具備了現(xiàn)代語言應(yīng)有的特性,而且也有了許多已有的和正在進(jìn)行的新的拓展。

經(jīng)典的C++

作為C語言的超集,一方面,C++集成了C在系統(tǒng)編程優(yōu)點(diǎn),能夠精確的控制內(nèi)存中的每一個(gè) bit;另一方面,提供了豐富的抽象機(jī)制和編程范式,引入了面向?qū)ο?、泛型編程和函?shù)式編程等風(fēng)格。因?yàn)檫@一點(diǎn),C++擁有了與C媲美的運(yùn)行時(shí)性能,另一方面,也簡化了C語言帶來的領(lǐng)域建模的難度。但是因?yàn)?C++ 的整體設(shè)計(jì)結(jié)合了多種風(fēng)格,幾乎相當(dāng)于嵌套了幾個(gè)小語言的一個(gè)龐大的系統(tǒng),這也使得 C++ 的整體易學(xué)性和易用性上有些差勁。同時(shí),由于標(biāo)準(zhǔn)庫更新跟不上需求,在諸如 Concurrency/Network 等應(yīng)用層的軟件設(shè)計(jì)方面逐漸被 Java 等后來者取代。而且,各個(gè) C++ 廠商對編譯器的實(shí)現(xiàn)并沒有完全參考 ISO 標(biāo)準(zhǔn),也造成了很多跨平臺(tái)可移植性和兼容性問題。

現(xiàn)代C++

C++在最近幾年進(jìn)行了幾次探索和蛻變,讓整個(gè)語言變得更具備現(xiàn)代化的特色。

資源管理

RAII(Resource Aquiration is Initialization,資源獲取即初始化)作為 C++ 的特色之一,被廣泛地應(yīng)用到 C++ 的程序中。RAII 通過堆對象的生命周期來控制資源(包括堆內(nèi)存、文件句柄、網(wǎng)絡(luò)連接等)的生命周期,使得資源管理變得更加自動(dòng)化,同時(shí)也避免了引入垃圾回收帶來的運(yùn)行時(shí)負(fù)擔(dān)。但這種模式有一個(gè)很重要的問題,就是當(dāng)需要對資源進(jìn)行共享時(shí),需要做更多額外的工作來進(jìn)行檢查和同步等工作。

作為更現(xiàn)代的資源管理方式,C++11 中引入了兩種智能指針,std::shared_ptrstd::unique_ptr。前者擁有線程安全的引用計(jì)數(shù),后者則是通過所有權(quán)(owenrship)轉(zhuǎn)移來控制資源的生存周期。C++11 中也引入了右值引用和移動(dòng)語義,來避免資源傳遞的過程中的不必要的復(fù)制。

與 Rust 中的生命周期(Lifetime)和所有權(quán)(Ownership)的概念類似,C++的std::unique_ptr在每一次值傳遞的時(shí)候?qū)⒆陨沓钟械馁Y源轉(zhuǎn)移到賦值的目標(biāo),同時(shí)結(jié)合移動(dòng)語義,將賦值過程進(jìn)一步地優(yōu)化。

Lambda

Functor 作為C++ STL 的一個(gè)重要組件,也是 C++ 中被使用很多的一個(gè)功能。一個(gè) Functor 其實(shí)就是一個(gè)重載了operator ()的類的實(shí)例對象,這種對象配合 C++ 模版的行為,可以被簡單看成一個(gè)函數(shù)來調(diào)用,所以被稱為 Functor(函子)。但是,由于 C++ 對于匿名類和內(nèi)部類支持并不夠好,使用 Functor 必須提前進(jìn)行設(shè)計(jì)。一方面不方便使用,另一方面,定義和使用分離,對代碼的組織和理解也造成了一定的困難。

首先,lambda 作為 Functor 的替代品,解決了不能即時(shí)定義并使用的問題。配合 STL 中的容器和算法,lambda 也能將 C++ 的函數(shù)式風(fēng)格發(fā)揮到極致。其次,出于 C++ 一貫對性能和抽象的考慮,引入了 lambda capture 的概念,使得對象的生命周期能夠綁定到 lambda 表達(dá)式,也就能夠構(gòu)建出閉包對象(closure)。另外,C++14 中加入的 generic lambda,增強(qiáng)了 lambda 的類型推導(dǎo)算法,在不損失類型安全特性的基礎(chǔ)上,讓組合式編程(Combinator–based Programming)更加易于實(shí)現(xiàn)。

并發(fā)

在 C++ 設(shè)計(jì)的初期,并發(fā)并未作為核心的語言特性考慮在內(nèi)。并且,線程等并發(fā)模型在不同平臺(tái)之上也有各種不同的實(shí)現(xiàn),構(gòu)建一個(gè)統(tǒng)一的并發(fā)模型也很困難。

C++11 中重新設(shè)計(jì)了 C++ 的內(nèi)存模型,在保持原有兼容性的基礎(chǔ)之上加入了并發(fā)的內(nèi)容。同時(shí)標(biāo)準(zhǔn)庫中也加入了線程()、信號(hào)量()、互斥鎖()和原子操作()等內(nèi)容。同時(shí)也在此基礎(chǔ)上封裝了future/promise模式和async等操作。

元編程

C++自身對元編程提供了良好的支持。作為主要組件之一的模版,提供了編譯時(shí)的數(shù)值計(jì)算和類型計(jì)算。但一方面由于使用模版減慢編譯速度,另一方面,在使用模版的時(shí)候,非常難以調(diào)試和排錯(cuò),這讓很多人望而卻步,甚至對基于模版的 STL 組件也有一種畏懼感。

C++11 中對元編程支持做了加強(qiáng)。首先是把 type traits 作為標(biāo)準(zhǔn)庫引入,能夠給模版提供一套直觀的約束,也讓類型作為 C++ 中的第一類值(first-class value)存在;另外 constexpr 的引入簡化了編譯時(shí)的值運(yùn)算,配合用戶自定義字面量(user-defined literals)以及可變參數(shù)模版(varadic template/parameter pack)等特性,讓 C++ 能夠更方便地定義內(nèi)部 DSL。

Bright Future

作為一門經(jīng)典的編程語言,C++至今還在不斷地更新著。即將到來的C++17 中,正在籌備著這些重要的特性:

更豐富的標(biāo)準(zhǔn)庫:C++中對 File System、Network 等重要的組件進(jìn)行了標(biāo)準(zhǔn)化的支持,

  • Module TS:模塊化提案,用于替代繼承自C語言的頭文件,簡化 C++ 的編譯模型和模塊依賴,
  • Concepts TS:用于增強(qiáng)類型約束和類型推導(dǎo),同時(shí)也簡化模版的用法,
  • Reflection TS:提供編譯期靜態(tài)反射的支持,簡化和增強(qiáng) type traits,提供更豐富的元編程功能。

Conclusion

可以看到 C++ 發(fā)展至今一直都走在時(shí)代的前列線上。一方面,增加了更多適合應(yīng)用和系統(tǒng)開發(fā)的組件,另一方面,通過語言特性的擴(kuò)充來簡化抽象復(fù)雜度。作為這樣一個(gè)兼具新生特性和歷史責(zé)任的編程語言,足以預(yù)見其應(yīng)用的廣度;同樣,更多的系統(tǒng)級(jí)開源項(xiàng)目,像 Mesos 等,也選擇 C++ 作為主要的編程語言。有足夠的理由讓我們相信,C++正在重獲新生。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux之父炮轟C++:糟糕程序員的垃圾語言
C++概述(C++完全兼容C具有面向硬件的特性底層硬件系統(tǒng)編程Py解釋器的底層人工智能核心庫的代碼都離不開C++)
每個(gè)工程師都應(yīng)該了解的一些 C 特性
現(xiàn)代C++風(fēng)格的新元素
Java 8的重要新特性以及未來版本的發(fā)展規(guī)劃
Java先驅(qū)者發(fā)布最新Java全棧面試“秘籍”,助力你吃透Java新特性!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服