自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++與Java“相愛相殺”:一個步步緊逼,一個節(jié)節(jié)敗退

原創(chuàng) 精選
開發(fā)
從演進趨勢來看,C++正在迎頭趕上,而Java卻是節(jié)節(jié)敗退。

近日,2022年6月TIOBE編程語言排行榜正式發(fā)布。不出意外的是,Python繼續(xù)穩(wěn)居榜首,C語言、Java、C++、C#分列第2-5位。相比去年同期,C++的占有率大幅提升,而Java的熱度和流行度似乎正在逐步減弱。從目前的的趨勢來看,C++超越Java的可能性正在增加。

2020年6月TIOBE編程語言排行榜(前20名)

C++步步緊逼,Java節(jié)節(jié)敗退

在最新的一期榜單中,TIOBE官方也用“C++即將超越Java”的醒目標題,點出了這一重大變化。眾所周知,Java一直被奉為編程語言中的常青樹,但是隨著其他語言的追趕,Java的地位正遭受著巨大沖擊,業(yè)界甚至發(fā)出了“Java老矣,尚能飯否”的質疑聲。

 在上個月的榜單中,TIOBE的CEO Paul Jansen就做出預測,C++將會是下一個超越Java的語言。通過對比不難發(fā)現(xiàn),C++的占有率達到9.63%,并以2.26%的增速,大踏步地追趕身前的Java。反觀Java,其占有率下降了1.07%,僅占比10.47%,與身后的C++的差距也被縮小至0.84%。

究其原因,Paul Jansen表示:“C++具有高性能的高級編程是其表現(xiàn)出色的主要原因。”需要指出的是,C++語言每三年都會修訂一次,這些修訂還包括了開創(chuàng)性的新特性,使得該語言能夠與Java、C#不相上下,且沒有垃圾收集器的性能損失。

此外,51CTO注意到,從2022年4月到6月的TIOBE編程語言排行榜來看,C++的占有率一直在上升,而Java的占有率卻在不斷下降。

如下圖所示,C++語言在4-6月的增速分別為1.14%、1.01%、2.26%,而Java的增速依次是-0.41%、-0.74%、-1.07%。

從演進趨勢來看,C++正在迎頭趕上,而Java卻是節(jié)節(jié)敗退。

Java源于C++,兩者差異卻很大

有意思的是,Java的前身正是C++。

讓我們將時間拉回至三十年前,Sun公司的一位工程師James Gosling帶領其團隊基于C++,對其進行改造。他們去掉了C++一些不實用的功能和特性,又結合嵌入式系統(tǒng)的實時性要求,開發(fā)出一款面向對象的Oak語言。

經(jīng)過三年的迭代和升級,又恰逢互聯(lián)網(wǎng)崛起之際,Oak華麗變身并更名為Java。此后,由于其具備面向對象、“寫入一次,隨處運行”的可移植性等特點,Java迅速名聲大振。

事實上,Java由C++衍生而來,且Java語言的對象模型幾乎就是C++對象模型的簡化版。但是二者之間還是存在著明顯的差異的。

C++有而Java沒有的特性

  • C++支持多重繼承,Java語言不支持多重繼承。但Java引入了接口的概念,可以同時實現(xiàn)多個接口。由于接口也具有多態(tài)特性,因為在Java語言中可以通過實現(xiàn)多個接口來實現(xiàn)與C++語言中多重繼承類似的目的。
  • C++支持運算符重載,Java不支持運算符重載。
  • C++支持預處理,Java沒有預處理器。雖然Java不支持該功能,但它提供的import機制和C++中的預處理器功能類似。
  • C++支持默認函數(shù)參數(shù),Java不支持。
  • C++支持goto語句,Java不支持goto語句(Java中goto是保留關鍵字)。
  • C++支持自動強制類轉換,這會導致程序的不安全,Java不支持自動強轉,必須由開發(fā)人員進行顯式地強制類型轉換。
  • C++中結構和聯(lián)合的所有成員均為公有,這可能會出現(xiàn)安全性問題,而Java根本就不包含結構和聯(lián)合,所有的內容都封裝在類里面。

Java有而C++沒有的特性

  • Java提供了垃圾回收器來實現(xiàn)垃圾的自動回收,不需要程序顯式地管理內存的分配。在C++語言中,需要開發(fā)人員去管理對內存的分配(包括申請與釋放),而在C++語言中,通常都會把釋放資源的代碼放到析構函數(shù)中。Java引入了一個finalize()方法,當垃圾回收器將要釋放無用對象的內存時,會首先調用該對象的finalize()方法,因此,開發(fā)人員不需要關心也不需要知道對象所占的內存空間何時會被釋放。
  • Java提供對注釋文檔的內建支持,而C++沒有。
  • Java包含一些標準庫,用于完成特定的任務。例如,Java提供了用于訪問數(shù)據(jù)庫的JDBC庫,用于實現(xiàn)分布式對象的RMI等標準庫。而C++則依靠一些非標準的、由其他廠商提供的庫。
  • Java具有反射機制,能夠在程序運行時進行自我檢查,同時也允許對其內部的成員進行操作。C++沒有提供這樣的特性。
  • Java為解釋性語言,其運行過程為:程序源代碼經(jīng)過Java編譯器編譯成字節(jié)碼,然后由JVM解釋執(zhí)行。而C++是編譯型語言,源代碼經(jīng)過編譯和鏈接后生成可執(zhí)行的二進制代碼。因此,Java的執(zhí)行速度比C++慢,但是Java能夠跨平臺執(zhí)行,而C++不能。
  • Java是純面向對象語言,所有代碼(包括函數(shù)、變量等)必須在類中實現(xiàn),除基本數(shù)據(jù)類型(包括int、float等)外,所有類型都是類。此外,Java語言中不存在全局變量或全局函數(shù),而C++兼具面向對象和面向過程編程的特點,可以定義全局變量和全局函數(shù)。
  • Java語言中沒有指針的概念,這有效防止了C++語言中操作指針可能引起的系統(tǒng)問題,從而使程序變得更加安全。
  • Java字符串類作為Java語言的一部分定義,而不是作為外加的延伸部分,在整個系統(tǒng)中建立字符串和訪問字符串元素的方法是一致的。C++不支持字符串變量,使用“Null”終止符代表字符串的結束。

總的來說,Java其實是由C++發(fā)展而來,保留了C++的大部分內容,其編程方式類似于C++,但是摒棄了C++的諸多不合理之處,從根本上解決了C++的固有缺陷。使得Java句法更清晰,規(guī)模更小,更易學,同時更具健壯性、安全性和平臺無關性。

C++的哪些特性是Java不能取代的?

想要了解兩種語言未來的發(fā)展趨勢,就不得不探討其不可替代性。針對“C++的哪些特性是Java不能取代的”這一話題,國內程序員小燦(化名)有話要說:

“我的工作是游戲服務端的開發(fā)。沒有真正做過服務端的人,很難體會到那種成就感——看著你寫的程序,運行在一臺普通的電腦上,然后可以支撐上千人流暢地游戲。”

根據(jù)其工作經(jīng)歷,他指出,你可以預測要用到的內存,可以預測需要的網(wǎng)絡流量,可以想象出,每一份數(shù)據(jù)如何在服務器和客戶之間流淌,可以描繪得出,每一個int,它在內存中是怎樣分布的。

“真的是優(yōu)雅,像一個無限次可導的映射一樣優(yōu)雅”,正如小燦所說,“那種感覺就是,你能控制一切。C++仿佛一把鋒利的屠龍刀,像切黃油般劃開惡龍那堅韌的鱗甲,讓你優(yōu)雅得將一條龍分解掉?!?/p>

另一位程序員“West”認為是性能,他表示,一般來說,雖然Java花了很多年時間努力使自己的性能接近C或者C++,但Java與原生應用還是存在一定的性能差距,這種差距對于普通的應用并不明顯,但對于性能要求較高的應用來說,就有點明顯了。

他強調,3D游戲通常都要挖掘硬件能力到極限,這類游戲就是配備當時最好的硬件還顯不夠,那么Java對性能的影響就不能忽視了。所以其實現(xiàn)在就算是Android這樣的Java為主的平臺,其上的很多游戲仍然是使用C++寫的。

C++和Java到底選哪個?

這兩種語言:前者難學、難上手,但競爭小一些,內卷比Java好得多。后者好學一點,也比較容易上手學,但競爭大,內卷嚴重。

你說學哪個,主要還是看你自己。

開發(fā)者說



寫在最后

事物的發(fā)展都是循序漸進的,編程語言亦是如此。無論如何,兩種編程語言都在不斷的演進和升級中得到優(yōu)化。對于從事不同工作的程序員來說,C++和Java也各自有其妙處。至于C++在未來是否會超越Java的位置,我們拭目以待!


參考鏈接:

https://www.icode9.com/content-1-700319.html

https://www.tiobe.com/tiobe-index/


責任編輯:莫奇 來源: 51CTO技術棧
相關推薦

2018-05-03 21:35:02

2017-07-18 10:05:58

2018-10-30 10:58:22

藍牙5WiFi無線網(wǎng)絡

2010-01-15 10:26:06

微軟Linux手機操作系統(tǒng)

2017-12-12 16:49:32

技術產(chǎn)品經(jīng)理代碼

2011-09-16 10:00:56

C++

2021-03-25 09:41:26

CIOCISO疫情

2021-01-10 21:19:12

DevOps敏捷方法開發(fā)

2021-05-28 18:12:51

C++設計

2015-08-24 09:51:48

2023-01-02 18:15:42

PythonC++模塊

2024-07-01 13:58:07

2013-07-18 09:58:18

C++程序員

2017-10-23 13:15:51

2024-03-13 13:53:10

C++程序開發(fā)

2021-10-27 11:29:32

框架Web開發(fā)

2021-08-26 05:35:20

黑客網(wǎng)絡安全網(wǎng)絡攻擊

2020-05-21 11:23:08

微軟LinuxWindows

2016-03-01 14:37:47

華為
點贊
收藏

51CTO技術棧公眾號