[導(dǎo)讀]本文轉(zhuǎn)自公眾號“CSDN”,ID:CSDNnews)作者?|?Serdar?Yegulalp?譯者?|?王艷妮,責(zé)編?|?屠敏C語言五十年來一直是軟件開發(fā)的一種主力語言。以下是它在如今的2019年與C,Java,C#,Go,Rust和Python抗衡的方式。以下為譯文:沒有什么技...
本文轉(zhuǎn)自公眾號“CSDN”,ID:CSDNnews)
作者 | Serdar Yegulalp
譯者 | 王艷妮,責(zé)編 | 屠敏
C語言五十年來一直是軟件開發(fā)的一種主力語言。以下是它在如今的2019年與C ,Java,C#,Go,Rust和Python抗衡的方式。
以下為譯文:
沒有什么技術(shù)可以應(yīng)用長達50年之久,除非它真的比大多數(shù)其他東西都要好用——對于一種計算機行業(yè)的技術(shù)來說尤其如此。自1972年誕生以來,C語言一直保持生龍活虎的狀態(tài),時至今日它仍然是我們用來搭建軟件世界的基礎(chǔ)建筑材料之一。
但有時一種技術(shù)能夠長期存在,只是因為人們還沒有來得及發(fā)明新的東西來取代它而已。在過去的幾十年里,出現(xiàn)了許多其他語言——其中一些明確地被設(shè)計用于挑戰(zhàn)C的主導(dǎo)地位,有些語言試圖憑借自己的人氣慢慢瓦解C語言的統(tǒng)治地位。
為C需要被替換掉的觀點爭辯是簡單的。編程語言研究和軟件開發(fā)實踐都暗示了如何比C更好地去做事。但歷經(jīng)數(shù)十年的研究和開發(fā),C語言的地位卻依舊穩(wěn)固。很少有其他語言能夠在性能、裸機兼容性或通用性等方面擊敗它。不過,2018年C是如何與那些明星編程語言競爭的呢,其中細節(jié)仍值得一看。
C vs. C
當(dāng)然了,C最常被拿來與C 進行比較,正如其名稱本身所暗示的那樣,C 作為對C語言的擴展而被創(chuàng)建出來。C 和C之間的差異可以概括為C 更加廣泛(褒)或更加寬泛(貶),具體取決于這個問題你是問的C還是C 程序員。(笑)
雖然C 的語法等方面仍然是類C的,但它提供了許多在原生的C中本不可用的非常實用的功能:命名空間(namespace),模板(template),異常(exception),自動內(nèi)存管理(automatic memory management)等等。需要頂級性能的項目,例如涉及數(shù)據(jù)庫,機器學(xué)習(xí)系統(tǒng)的項目通常是用C 編寫的,以便項目能盡可能地榨取以及利用到每一點性能。
此外,與C相比,C 在持續(xù)地更加積極地擴展。即將推出的C 20會帶來更多功能供開發(fā)者享用,包括模塊,協(xié)同程序,同步庫,以及概念,這些使模板更易于使用。C standard的最新版本只進行了少量更新,并側(cè)重于保持向后兼容性。
事實上,C 中的所有附加功能同樣也可能成為累贅。而且是很大的累贅。您使用的C 專屬功能越多,引入的復(fù)雜度就越高,對結(jié)果的修正就越困難。將自己局限于僅一個C 子集的開發(fā)人員可以避免許多開發(fā)中嚴(yán)重的坑和額外負擔(dān)。但是有些團隊想要從根兒上防范C 的過度復(fù)雜性。堅持使用C能迫使開發(fā)人員將自己局限于一個子集。例如,Linux內(nèi)核開發(fā)團隊就直接避開了C 。
選C而不選C 對您——以及任何將會維護你代碼的開發(fā)人員——來說都是可行的,通過采用強制簡約主義來避免與C 的復(fù)雜性糾纏。當(dāng)然,C 擁有豐富的高級功能,這是有它自己的道理的。但如果極簡主義更適合當(dāng)前和未來的項目——以及負責(zé)項目的團隊——那么還是選C更明智一些。
C vs. Java
幾十年了,Java仍然是企業(yè)軟件開發(fā)的主力軍之一——并且也是寬泛而言的開發(fā)的主力軍之一。許多最重要的企業(yè)軟件項目都是用Java編寫的——包括絕大多數(shù)Apache Software Foundation項目——而Java仍然是開發(fā)企業(yè)級需求項目的可行語言。
Java的語法從C和C 中借鑒了很多東西。但是,與C不同的是,Java默認情況下不會編譯為本機代碼。相反,Java運行時環(huán)境,JVM,JIT(實時)編譯Java代碼以在目標(biāo)環(huán)境中運行。在適當(dāng)?shù)那闆r下,JIT編譯后的Java代碼可以接近甚至超過C的性能。
Java背后的“一次編寫,隨處運行”的理念也允許Java程序在目標(biāo)架構(gòu)上進行相對較少的調(diào)整即可運行。相比之下,雖然C已被移植到許多架構(gòu)中,但任何給定的C程序仍可能需要重新量身定做才能在,打個比方,Windows與Linux,兩種不同的os之間正常運行。
這種可移植性和強大性能的結(jié)合,以及龐大的軟件庫和框架組成的生態(tài),使Java成為構(gòu)建企業(yè)應(yīng)用程序的首選語言。
Java輸給C的地方是一個Java從未打算競爭的領(lǐng)域:靠近底層結(jié)構(gòu)運行,或直接與硬件打交道。C代碼被編譯成機器代碼,由進程直接執(zhí)行。Java被編譯成字節(jié)碼,這是一種隨后會被JVM解釋器轉(zhuǎn)換為機器代碼的中間代碼。此外,盡管Java的自動內(nèi)存管理在大多數(shù)情況下都是個優(yōu)點,但C更適合于必須充分利用有限內(nèi)存資源的情況。
也就是說,在某些方面,Java在速度方面可以接近于C。JVM的JIT引擎在運行時根據(jù)程序行為優(yōu)化例程,允許進行許多類型的優(yōu)化,而這些優(yōu)化是在未提前編譯的C中無法實現(xiàn)的。雖然Java運行時自動執(zhí)行內(nèi)存管理,但一些較新的應(yīng)用程序可以解決這個問題。例如,Apache Spark部分地通過使用繞過JVM的自定義內(nèi)存管理代碼來優(yōu)化內(nèi)存中處理。
C vs. C#和.Net
在推出近二十年后,C#和.Net 框架仍然是企業(yè)軟件世界的主要組成部分。有人說C#和.Net是微軟對Java的回應(yīng)——一個托管代碼編譯器系統(tǒng)和通用運行庫——C和Java之間的許多種對比也適用于C和C?;?Net之間。
與Java(以及某種程度上來說Python也是如此)一樣,.Net提供跨各種平臺的可移植性和龐大的集成軟件生態(tài)系統(tǒng)。考慮到.Net世界中有多少面向企業(yè)的開發(fā),這些都是不小的優(yōu)勢。當(dāng)您使用C#或任何其他.Net語言開發(fā)程序時,您可以使用為.Net運行時編寫的大量工具和庫。
.NET另一個類似Java的優(yōu)勢是JIT優(yōu)化。C#和.Net程序可以按照C語言提前編譯,但它們主要由.Net運行時進行即時編譯,并使用運行時信息進行優(yōu)化。JIT編譯允許對無法在C中執(zhí)行的運行著的.Net程序進行各種就地優(yōu)化。
與C一樣,C#和.Net提供各種直接訪問內(nèi)存的機制。堆,棧和非托管系統(tǒng)內(nèi)存都可以通過.Net API和對象訪問。開發(fā)人員可以使用.Net中的unsafe模式來實現(xiàn)更高的性能。
但這些都不是沒有代價的。托管對象和unsafe對象不能被任意交換,并且它們之間的編組會降低性能。因此,要最大化.Net應(yīng)用程序的性能需要將托管和非托管對象之間的變動保持在最低限度。
如果您無法承擔(dān)托管與非托管內(nèi)存之間變動造成的性能損失,或者.Net運行時對于目標(biāo)環(huán)境(例如,內(nèi)核空間)來說是一個糟糕的選擇,或者可能根本不可用,那么C就是你所需要的。與C#和.Net不同,C被默認可以解鎖對內(nèi)存的訪問權(quán)。
C vs. Go
Go的語法很大程度上借鑒了C——花括號作為定界符,語句以分號結(jié)束,等等。精通C的開發(fā)人員通常可以毫不費力地直接使用Go,甚至算上Go的獨有功能,如命名空間和包管理,對開發(fā)人員來說也并不困難。
代碼可讀性是Go的指導(dǎo)設(shè)計目標(biāo)之一:讓開發(fā)人員可以輕松掌握任何Go項目,并在短時間內(nèi)熟練掌握代碼庫。C代碼庫可能很難理解,因為它們很容易聚集大量專屬于某個項目或某個團隊的宏和和#ifdef。Go的語法及其內(nèi)置的代碼格式以及項目管理工具旨在避免這種結(jié)構(gòu)性問題。
Go還提供了諸如goroutine和channel之類的附加功能,用于處理并發(fā)性和組件之間的消息傳遞的語言級別的工具。C需要開發(fā)者手動完成或由外部庫提供,但Go提供了開箱即用的這些功能,使得構(gòu)建需要這些功能的軟件變得更加容易。
Go與C最深層次的不同之處在于內(nèi)存管理方面。默認情況下,Go的對象會被自動管理并自動進行回收。對于大多數(shù)編程工作來說,這非常方便。但這也意味著任何需要確定性處理內(nèi)存的程序都會更難編寫。
Go確實包含了用于繞過Go的某些類型處理安全性的unsafe包,例如使用Pointer類型讀取和寫入任意內(nèi)存。但unsafe會附帶一個warning說用它編寫的程序“可能是不可移植的,并且不受Go 1兼容性指南的保護。”
Go非常適合構(gòu)建命令行實用程序和網(wǎng)絡(luò)服務(wù)等,因為這些很少用到太過細致的操作。但是,如果是低級設(shè)備驅(qū)動程序,內(nèi)核空間操作系統(tǒng)組件以及其他需要嚴(yán)格控制內(nèi)存布局和管理的任務(wù),那么就最好用C來創(chuàng)建。
C vs. Rust
在某些方面,Rust是對C和C 創(chuàng)建的內(nèi)存管理難題的回應(yīng),也是對這兩種語言的許多其他缺點的回應(yīng)。Rust編譯為本機機器代碼,因此就性能而言,它被認為與C相當(dāng)。但默認情況下,內(nèi)存安全才是Rust的主要賣點。
Rust的語法和編譯規(guī)則可幫助開發(fā)人員避免常見的內(nèi)存管理錯誤。如果程序有一個不符合Rust語法的內(nèi)存管理問題,它就不會被編譯。剛接觸這種語言的新手,特別是以前用C語言的開發(fā)者,由于C語言為這類bug提供了充足的容錯空間,所以他們接觸Rust的第一步是學(xué)習(xí)如何安撫編譯器。但Rust的支持者認為,這種短期的痛苦有一個長期的回報:更安全的,不會減緩速度的代碼。
Rust還通過其工具改進了C語言。默認情況下,項目和組件管理是Rust提供的工具鏈的一部分,與Go相同。有一種默認的,推薦的方法來管理包,組織項目文件夾,以及處理C需要單獨處理的其他許多事情,每個項目和團隊以不同的方式處理它們。
然而,在Rust中被吹捧為優(yōu)勢的東西對于C開發(fā)者來說可能并沒有太大吸引力。Rust的編譯時安全功能無法禁用,因此即使是最小的Rust程序也必須符合Rust的內(nèi)存安全限制。默認情況下,C可能不太安全,但在必要時它更靈活,更寬容。
另一個可能的缺點是Rust語言的大小。即使考慮到標(biāo)準(zhǔn)庫,C的功能也相對較少。Rust功能集非常龐大并且還在不斷增長。與C 一樣,較大的Rust功能集意味著更強大的功能,但也意味著更高的復(fù)雜度。C是一種較小的語言,但更容易在頭腦中進行建模,因此可能更適合那些對Rust來說太小,不值得大動干戈的項目。
C vs. Python
當(dāng)今,每當(dāng)談?wù)撥浖_發(fā)時,Python似乎總是能出現(xiàn)在對話中。畢竟,Python是“對所有項目的第二佳語言”,毫無疑問是最通用的語言之一,擁有數(shù)千個第三方庫。
Python強調(diào)的,以及它與C最不同的地方,是有利于開發(fā)速度而不是執(zhí)行速度。一個可能需要一個小時才能用另一種語言寫出來的程序——比如C——可能用Python幾分鐘內(nèi)就能寫好。另一方面,該程序在C中執(zhí)行可能需要幾秒鐘,但需要一分鐘才能在Python中運行完。(一個很好的經(jīng)驗法則:Python程序通常比它們對應(yīng)的C語言程序運行速度慢一個數(shù)量級。)但是對于現(xiàn)代硬件上的許多工作,Python已經(jīng)足夠快了,這是它如今廣泛應(yīng)用的一個重要原因。
另一個主要區(qū)別是內(nèi)存管理。Python程序完全由Python運行時進行內(nèi)存管理,因此開發(fā)人員不必擔(dān)心分配和釋放內(nèi)存的細節(jié)。但同樣,開發(fā)人員的輕松也是以運行時性能為代價的。編寫C程序需要嚴(yán)格關(guān)注內(nèi)存管理,但生成的程序通常是純機器速度的黃金標(biāo)準(zhǔn)。
但是,在二者的血脈中,Python和C共享一個深層的關(guān)系:Python運行時參考是用C語言編寫的。這允許Python程序包裝用C和C 編寫的庫。第三方庫的Python生態(tài)系統(tǒng)的很多重要模塊,例如機器學(xué)習(xí)方面的庫,其核心是C代碼。
如果開發(fā)速度比執(zhí)行速度更重要,并且如果程序的大多數(shù)高性能部分可以被隔離到獨立組件中(而不是遍布整個代碼),那么純Python或Python和C庫的混合使得會是比單獨使用C更好的選擇。否則的話,C仍然是老大。
本文轉(zhuǎn)自公眾號“CSDN”,ID:CSDNnews)
版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認,都會標(biāo)明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并致歉。謝謝!
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
杭州2025年9月2日 /美通社/ -- 9 月 13–14 日,GOSIM HANGZHOU 2025 大會將在杭州隆重啟幕。本次大會由 GOSIM 全球開源創(chuàng)新匯主辦、CSDN 承辦,以國際化、社區(qū)化、強互動為特色,...
關(guān)鍵字:
SIM
開源
OS
GO
上海2025年7月24日 /美通社/ -- 近日,藍科集團(Lucanet AG)全球首席執(zhí)行官Elias Apel先生和藍科中國總經(jīng)理張馳先生一行拜訪和接待了中國地區(qū)多家合作伙伴與優(yōu)秀企業(yè)客戶,旨在深入了解中國市場與用...
關(guān)鍵字:
智能化
CAN
NET
自動化
上海2025年7月23日 /美通社/ --?近日,Lucanet集團年度旗艦活動 "Lucanet World 2025" (即藍科全球客戶大會)在柏林盛大舉行。來自全球各地近千位集團首席財務(wù)官、技術(shù)決策者等高管以及財務(wù)...
關(guān)鍵字:
AI
CAN
NET
BSP
上海 2025年6月23日 /美通社/ -- 全球領(lǐng)先的AI數(shù)據(jù)服務(wù)提供商澳鵬Appen(中國)今日正式發(fā)布MediGo醫(yī)療大模型數(shù)據(jù)開發(fā)平臺,這一創(chuàng)新性平臺旨在解決醫(yī)療AI領(lǐng)域面臨的數(shù)據(jù)標(biāo)注精度不足、多模態(tài)協(xié)同處理效...
關(guān)鍵字:
開發(fā)平臺
模型
GO
AI
Hexagon 充分利用在測量技術(shù)、人工智能和自治系統(tǒng)領(lǐng)域的行業(yè)領(lǐng)先專業(yè)知識,推出一款先進的人形機器人,以加快下一代自主技術(shù)發(fā)展 AEON 集業(yè)界一流的移動能...
關(guān)鍵字:
機器人
GO
BSP
移動
印度班加羅爾 2025年5月28日 /美通社/ -- 零售業(yè)算法決策領(lǐng)域的全球領(lǐng)導(dǎo)者Algonomy今日宣布推出三款尖端解決方案,旨在幫助零售商大規(guī)模提供超個性化的購物體驗...
關(guān)鍵字:
人工智能
LG
GO
AI
杭州 2025年5月15日 /美通社/ --?在開源浪潮的推動下,AI 領(lǐng)域正在全球范圍內(nèi)迎來爆發(fā)式增長,這也為更多開發(fā)者、研究者、創(chuàng)業(yè)者打開了通向下一代智能系統(tǒng)構(gòu)建的通道。在這一背景下,GOSIM AI Paris...
關(guān)鍵字:
SIM
模型
OS
GO
上海2025年4月8日 /美通社/ -- 近年來,中國持續(xù)面臨著人口老齡化加劇以及心腦血管疾病、呼吸系統(tǒng)疾病等慢性病高發(fā)的雙重挑戰(zhàn)。在此背景下,歐姆龍健康醫(yī)療事業(yè)(以下簡稱"歐姆龍")積極響應(yīng)&quo...
關(guān)鍵字:
歐姆龍
AI
數(shù)字化
GO
用于治療轉(zhuǎn)甲狀腺素蛋白淀粉樣變性心肌病的心臟病藥物Beyonttra®(acoramidis)已在歐洲成功獲批 非激素類創(chuàng)新藥elinzanetant用于治療與更年期相關(guān)的中重度血管舒縮癥狀(VMS,也...
關(guān)鍵字:
管線
NET
ADT
AC
首款行銷深度動態(tài) AI Agent 系統(tǒng)“ADGo” 宣布落地五大亞洲市場 臺北2025年3月13日 /美通社/ -- 全球矚目的巴塞隆納世界行動通訊大會(MWC)于2025年3月6日正式落幕,AI科技新創(chuàng)艾...
關(guān)鍵字:
AD
GO
AGENT
PITCH
Claude 3.7 Sonnet混合推理模型,解鎖"深度思維",優(yōu)化編碼及計算機應(yīng)用能力 北京2025年2月25日 /美通社/ -- 亞馬遜云科技宣布,人工智能安全與研究公司Anthropic迄今...
關(guān)鍵字:
NET
PIC
亞馬遜
模型
上海2025年2月21日 /美通社/ -- 近日,國際獨立第三方檢測、檢驗和認證機構(gòu)德國萊茵TÜV大中華區(qū)(簡稱"TÜV萊茵")攜手英...
關(guān)鍵字:
制冷機
NET
AC
故障診斷
舊金山2025年2月6日 /美通社/ -- 基于深度學(xué)習(xí)的領(lǐng)先智能廣告平臺MediaGo宣布獲得TrustArc的2025年《通用數(shù)據(jù)保護條例》(GDPR)合規(guī)認證。這一權(quán)威的第三方認證體現(xiàn)了MediaGo對數(shù)據(jù)安全保護...
關(guān)鍵字:
MEDIA
GO
RC
TRUST
C++編程語言中的一種強大功能是模板,它允許我們編寫泛型代碼,使得我們的函數(shù)或類可以對多種數(shù)據(jù)類型進行操作。在這篇文章中,我們將詳細介紹如何在C++中使用模板來編寫泛型代碼。
關(guān)鍵字:
C++
編程語言
在編程語言的浩瀚宇宙中,C語言以其卓越的執(zhí)行效率和運行速度脫穎而出,成為眾多高性能應(yīng)用的首選。那么,C語言究竟是如何實現(xiàn)這一高效性的呢?本文將深入探討C語言高效執(zhí)行背后的原因,并通過代碼示例加以說明。
關(guān)鍵字:
C語言
編程語言
雖然C語言有其優(yōu)勢和限制,但它仍然是一種非常重要和有用的編程語言。它被廣泛應(yīng)用于系統(tǒng)級編程、嵌入式開發(fā)和驅(qū)動程序等領(lǐng)域。對于想要深入了解計算機底層工作原理的開發(fā)人員來說,掌握C語言是必不可少的。
關(guān)鍵字:
C語言
編程語言
上海2025年1月13日 /美通社/ -- 美國納斯達克上市公司Eshallgo Inc ("Eshallgo" 或 "公司")(股票代碼:EHGO),作為業(yè)界領(lǐng)先的中國辦公集成商、代理商及服務(wù)商今日宣布其旗下子公司上海...
關(guān)鍵字:
供應(yīng)鏈
數(shù)據(jù)中心
GO
AI
Amazon Q Developer是首個基于生成式AI的助手,旨在加速Windows.NET、VMware和大型機工作負載的遷移和現(xiàn)代化,縮短轉(zhuǎn)型時間并降低成本 北京2024年12月23日 /美通社/ -- ...
關(guān)鍵字:
DEVELOPER
亞馬遜
NET
Windows
北京2024年12月19日 /美通社/ -- 近日,由中國科學(xué)院《互聯(lián)網(wǎng)周刊》、德本咨詢、eNet研究院共同評選的2024中國互聯(lián)網(wǎng)經(jīng)濟論壇金i獎?wù)浇視浴\浲ㄗ稍儜{借在數(shù)字化咨詢領(lǐng)域的深耕突破和在多個行業(yè)的卓越實踐成功...
關(guān)鍵字:
數(shù)字化
互聯(lián)網(wǎng)
NET
人工智能
單片機系統(tǒng)優(yōu)化是指通過對系統(tǒng)硬件和軟件的合理配置、優(yōu)化算法和數(shù)據(jù)結(jié)構(gòu)、減少資源占用等方式,提升系統(tǒng)的運行效率和響應(yīng)速度。優(yōu)化的目標(biāo)是使系統(tǒng)能夠更好地滿足實際需求,提高用戶體驗和產(chǎn)品的競爭力。
關(guān)鍵字:
單片機
編程語言