六星教育:作為老牌編程語(yǔ)言,C++為什么重新流行起來(lái)?

作為老牌編程語(yǔ)言,為什么C++的生命力這么旺盛?今天六星教育和大家聊聊!

年初依舊很多大新聞,其中一條就是TIOBE把年度編程語(yǔ)言頒給了C++。
我特地上TIOBE看了看,意外發(fā)現(xiàn)一件非常有意思的事。TIOBE指數(shù)行業(yè)內(nèi)的同學(xué)都很熟悉,是全球編程語(yǔ)言流行度的風(fēng)向標(biāo)。TIOBE最早始于2001年,但當(dāng)年并沒(méi)有選出年度語(yǔ)言,而是得等到2003年。2003年對(duì)于C++也是特別的一年,C++在TIOBE上的流行指數(shù)一度逼近18%,可謂如日中天,所以毫無(wú)懸念,第一屆年度語(yǔ)言就是C++。

不過(guò),這也是C++的頂點(diǎn)。雖然目前還沒(méi)有聽(tīng)說(shuō)什么TIOBE“年度語(yǔ)言魔咒”之類的說(shuō)法,但C++成為年度語(yǔ)言之后一路下滑,到了2017年,C++只剩下不到5%。
這是什么概念?那一年Java的流行指數(shù)是14%。
Java號(hào)稱C++--,替代效應(yīng)明顯。然而,有意思的地方來(lái)了,當(dāng)人們開(kāi)始討論用什么替代Java的時(shí)候,C++居然活了過(guò)來(lái),在TIOBE上走出了一條微笑曲線。2022年,C++的TIOBE流行指數(shù)上大漲4.6%,這是榜單最大漲幅,19年后再次奪得了年度語(yǔ)言。很多分析文章沒(méi)有提到的是,目前C++的流行指數(shù)重新回到12%,而上一次還是在2005年。
什么叫爺青回,這就叫爺青回。
C++為什么衰落
C++有太多問(wèn)題,太應(yīng)該衰落了。概括起來(lái)也不復(fù)雜,就三個(gè)字“太復(fù)雜”。
C++提供了大量的特性,往好了說(shuō)寫起來(lái)非常靈活,特別適合追求最優(yōu)解的強(qiáng)迫癥,往壞了說(shuō)是嚴(yán)重加重了選擇困難癥的病情。即使你用了C++十年二十年,一定還能遇到什么地方讓你感慨居然還有這么多不了解的地方。從審美的角度來(lái)說(shuō),C++不夠協(xié)調(diào)統(tǒng)一,從學(xué)習(xí)的角度來(lái)說(shuō),C++簡(jiǎn)直是災(zāi)難。
指針就是典型。指針是C++靈活的源泉,指針用得好,C++能玩出花來(lái),但是用不好,C++也能玩出花來(lái),所以,對(duì)很多程序員來(lái)說(shuō),不管是寫,是讀,還是改,指針都是災(zāi)難的代名詞。
怎么辦呢?獻(xiàn)祭靈活性換取易用性和一致性。
譬如Java,Java繼承了C++大量的語(yǔ)言特性,同時(shí)手起刀落剁掉了指針。Java簡(jiǎn)化了內(nèi)存管理操作,有一項(xiàng)重要的機(jī)制叫垃圾回收(Garbage Collection),太重要以致有一個(gè)著名的梗是說(shuō),如果你去食堂吃飯,看到有人吃完收拾盤子的,那是C++程序員,吃完直接走的,那是Java程序員。
這里有個(gè)問(wèn)題。我想自己收拾行不行呢?Java說(shuō),對(duì)不起,不行,不管你愿不愿意,我都要替你收拾。大家都不用收拾,所以易用。大家都不能收拾,所以一致。這里沒(méi)有絕對(duì)的優(yōu)劣,不過(guò),后來(lái)無(wú)論是開(kāi)發(fā)還是管理,都認(rèn)為Java這種做法更節(jié)省頭發(fā)。
于是,C++連同災(zāi)難性的指針一起,似乎只能死于選擇太多。
C++為什么重新流行
那么,C++為什么重新流行起來(lái)了呢?
這確實(shí)是個(gè)有意思的問(wèn)題。有人說(shuō)TIOBE算法不夠客觀,C++不可能重回2003年。這個(gè)說(shuō)法我只同意一半。畢竟20年過(guò)去了,出現(xiàn)這么多要革C++的命的語(yǔ)言,著名的前有D語(yǔ)言后有Rust,就算這些后輩再怎么不給力,總會(huì)要分走一些使用者的。
現(xiàn)在C++不僅守住了基本盤,還出現(xiàn)了“回暖”的現(xiàn)象。且不管回暖的力度是不是真的像TIOBE所說(shuō)的力拔頭籌,但回暖本身是毫無(wú)疑問(wèn)。C++肯定是做對(duì)了點(diǎn)什么,這才是C++重奪年度語(yǔ)言的新聞背后,最需要我們關(guān)注和思考的事情。
那么,C++究竟做對(duì)了什么呢?
這不是一個(gè)很好回答的問(wèn)題。網(wǎng)上有一個(gè)簡(jiǎn)單直接的回答:C++一直在更新,不斷吸收編程語(yǔ)言的發(fā)展成果。譬如C++20,就增加了模塊、概念、范圍和協(xié)程四大特性。不少C++er說(shuō)C++20振奮人心,為這門上了年紀(jì)的語(yǔ)言注入了新的活力。
不過(guò),這個(gè)說(shuō)法我同樣只同意一半。C++20確實(shí)引入了一批非常有用的現(xiàn)代化特性,具備和后輩一爭(zhēng)高下的基礎(chǔ)。但是,前面也已經(jīng)說(shuō)過(guò),C++的根本問(wèn)題不是在于特性太少,而是在于特性太多,不要說(shuō)去選擇,光是去了解就已經(jīng)成為了一種負(fù)擔(dān)。
根本原因沒(méi)有解決,C++究竟憑什么?我的回答是:時(shí)代需求使然。
在過(guò)去的十幾年,Web開(kāi)發(fā)一直處于絕對(duì)的支配地位,已經(jīng)成為我們?cè)u(píng)價(jià)一門編程語(yǔ)言好壞的默認(rèn)背景。但是,時(shí)代已經(jīng)開(kāi)始走出被Web支配的日子,區(qū)塊鏈、人工智能、元宇宙,且不管這些概念背后到底取得了多少實(shí)質(zhì)性的發(fā)展,但要開(kāi)發(fā)這些應(yīng)用,需求必然會(huì)變得空前多樣,我們都需要重新選擇最合適的開(kāi)發(fā)方式。
而C++最不缺的就是選擇。即使到了2023年,能夠直接死磕底層,同時(shí)又具備現(xiàn)代編程語(yǔ)言特性的編程語(yǔ)言,其實(shí)仍然為數(shù)不多——C++正是其中之一。如果再加入對(duì)語(yǔ)言生態(tài)積累的考慮,C++幾乎就是唯一的選擇。
有一個(gè)說(shuō)法是,無(wú)論你要做什么,總能在C++里找到趁手的工具。我想,這才是C++能在這個(gè)發(fā)展中的時(shí)代重奪年度語(yǔ)言的真正原因。
以上就是本次分享全部?jī)?nèi)容,想學(xué)習(xí)更多編程技巧,歡迎持續(xù)關(guān)注六星教育!