<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 業(yè)界動(dòng)態(tài) > 編程語(yǔ)言榜單:C++首次超越C,僅次榜首Python

          編程語(yǔ)言榜單:C++首次超越C,僅次榜首Python

          作者: 時(shí)間:2024-06-25 來(lái)源: 收藏

          在本月的 TIOBE 榜單中,出現(xiàn)了歷史性一幕: 史上首次超越 C,躍升至榜單第二,僅次于 —— 這是 在此榜單中的歷史最高位,亦是 C 語(yǔ)言的歷史最低位。

          本文引用地址:http://www.ex-cimer.com/article/202406/460312.htm

          640-4.png

          根據(jù)本月榜單數(shù)據(jù)可以看出, 是唯二市場(chǎng)占比超過(guò) 10% 的,而 C++ 與 C 語(yǔ)言相差 0.8%。雖然差距看似不大,但從 C 語(yǔ)言近一年來(lái)持續(xù)下滑的占比趨勢(shì)來(lái)看,此次 C++ 登上榜二或許并不意外。

          640-5.png

          C++ 的發(fā)展歷程

          自 C++ 誕生之初,它就被譽(yù)為更好的面向?qū)ο蟮?C 語(yǔ)言版本。想到這一點(diǎn),TIOBE CEO Paul Jansen 感慨道:在誕生 39 年后,C++ 終于打敗了 C 語(yǔ)言。

          事實(shí)上,早期并沒(méi)有“C++”這個(gè)名字,而是叫做 C with Classes,即“帶類的 C”,出現(xiàn)背景是為了解決計(jì)算機(jī)性能飛速提高下,C 語(yǔ)言逐漸難以應(yīng)對(duì)中大型軟件的編寫。

          在 1979 年,C++ 之父 Bjarne Stroustrup 以 C 語(yǔ)言為背景,又以 Simula(具備利于大型軟件開發(fā)的特點(diǎn))思想為基礎(chǔ),到貝爾實(shí)驗(yàn)室開始從事把 C 語(yǔ)言改良為 C with Classes 的工作,并將其用于自己的 Unix 內(nèi)核開發(fā)工作中。當(dāng)時(shí)的 C with Classes,還只是作為 C 語(yǔ)言的一個(gè)擴(kuò)展和補(bǔ)充,目的是提高開發(fā)效率。

          到了 1983年,C with Classes 正式改名為 C++,并加入了新的特性,包括虛函數(shù)、函數(shù)名和運(yùn)算符重載、參考、常量、改良的類型檢查等等。整體來(lái)說(shuō),C++ 主要是在 C 語(yǔ)言的基礎(chǔ)上增加了面向?qū)ο蠛头盒偷臋C(jī)制,提高了開發(fā)效率,以適用于大中型軟件的編寫。

          縱觀 C++ 的發(fā)展歷程,大致可分為三個(gè)階段:

          第一階段從 1979 年到 1995 年。這個(gè)階段的 C++,基本上是傳統(tǒng)類型上的面向?qū)ο笳Z(yǔ)言,憑借著接近 C 語(yǔ)言的效率逐漸為人所知,慢慢應(yīng)用到工業(yè)界中,并在工業(yè)界占據(jù)了相當(dāng)大的份額。

          第二階段從 1995 年到 2000 年。這一階段的 C++ 新增了標(biāo)準(zhǔn)模板庫(kù)和 Boost 等程序庫(kù),于是泛型程序設(shè)計(jì)在 C++ 中占據(jù)了越來(lái)越多的比重。不過(guò) Java、C# 等語(yǔ)言出現(xiàn)和硬件價(jià)格的大規(guī)模下降,導(dǎo)致 C++ 受到了一定沖擊,但仍有著廣泛應(yīng)用。

          值得一提的是,由于這時(shí) C++ 還沒(méi)有統(tǒng)一標(biāo)準(zhǔn),各個(gè)編譯器都有自己的不同實(shí)現(xiàn),因此 ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))在 1989 年成立了 C++ 標(biāo)準(zhǔn)委員會(huì)以建立 C++ 標(biāo)準(zhǔn),并在 1998 年推出了 C++98 標(biāo)準(zhǔn)——這是 C++ 的第一個(gè)官方標(biāo)準(zhǔn),讓不同編譯器和平臺(tái)之間的差異得以統(tǒng)一,由此提高了代碼的可移植性和穩(wěn)定性。

          第三階段便是從 2000 年至今。得益于 Loki、MPL(Boost)等程序庫(kù)為代表的產(chǎn)生式編程和模板元編程,C++ 的發(fā)展達(dá)到了一個(gè)新高峰。這些新技術(shù)和原有技術(shù)的融合,使得 C++ 成為當(dāng)今主流程序設(shè)計(jì)語(yǔ)言中最復(fù)雜的一員。

          對(duì)于本月 C++ 躍升至第二,TIOBE CEO Paul Jansen 提到:自 2011 年以來(lái),C++ 就展開了新生,每三年更新一次?!半m然大多數(shù)編譯器和工程師都無(wú)法跟上這一步伐,但能看到這種語(yǔ)言不斷發(fā)展,也算是一種成功。”

          如今,C++ 作為一種被廣泛使用的,在嵌入式系統(tǒng)、游戲開發(fā)和金融交易軟件等領(lǐng)域都有大量應(yīng)用。它支持多重編程范式,包括過(guò)程化程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)和函數(shù)式程序設(shè)計(jì)等。

          Go 和 Rust 也刷新自身紀(jì)錄

          除了 C++ 首度超越 C 語(yǔ)言,本月榜單中還有 2 個(gè)也達(dá)到了名次新高:Go 首次排名第 7,第 17 位的 Rust 也刷新了自身歷史新高。

          曾在 2015 年掉到百名開外(第 122 名)的 Go 語(yǔ)言,自開始嚴(yán)格遵循每半年一次的發(fā)布周期,以及由 Go 編寫的 Docker 和 Kubernetes 變得流行后,如今它已被用于許多軟件領(lǐng)域,如后端編程、網(wǎng)絡(luò)服務(wù)和 API 等。自今年 2 月首次進(jìn)入 Top10 后,Go 一直穩(wěn)定在前十。

          得益于 Rust 在系統(tǒng)編程領(lǐng)域的出色表現(xiàn),近年來(lái)它被越來(lái)越多的開發(fā)者關(guān)注和支持。作為一種靜態(tài)強(qiáng)類型的編程語(yǔ)言,Rust 最大的特點(diǎn)便是解決了其他語(yǔ)言所面臨的冗長(zhǎng)編程和內(nèi)存管理問(wèn)題。不僅能保證高性能,還能降低內(nèi)存泄漏和安全漏洞的風(fēng)險(xiǎn),Rust 的這些特點(diǎn)使它成為開發(fā)需要高可靠性和高性能的系統(tǒng)應(yīng)用程序時(shí)的最優(yōu)選之一。

          640-6.png

          此外,附上 Top 10 編程語(yǔ)言 TIOBE 指數(shù)走勢(shì)(2002-2024):

          640-7.png

          正如上文所說(shuō),如今的 C++ 已在嵌入式系統(tǒng)、游戲開發(fā)和金融交易軟件等領(lǐng)域都有大量應(yīng)用,而隨著 C++ 語(yǔ)言的演變,也逐漸演化出相應(yīng)的標(biāo)準(zhǔn)程序庫(kù),其中所引入的程序庫(kù)中最重要的便是標(biāo)準(zhǔn)模板庫(kù)(STL),這也幾乎是每一位 C++ 程序員繞不開的課題。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();