日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么C语言仍然占据统治地位?

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么C语言仍然占据统治地位? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導讀:C語言五十年來一直是軟件開發的一種主力語言。本文介紹它在如今的2019年與C++,Java,C#,Go,Rust和Python抗衡的方式。


作者:Serdar Yegulalp

譯者:王艷妮

來源:CSDN(ID:CSDNnews)


沒有什么技術可以應用長達50年之久,除非它真的比大多數其他東西都要好用——對于一種計算機行業的技術來說尤其如此。自1972年誕生以來,C語言一直保持生龍活虎的狀態,時至今日它仍然是我們用來搭建軟件世界的基礎建筑材料之一。


但有時一種技術能夠長期存在,只是因為人們還沒有來得及發明新的東西來取代它而已。在過去的幾十年里,出現了許多其他語言——其中一些明確地被設計用于挑戰C的主導地位,有些語言試圖憑借自己的人氣慢慢瓦解C語言的統治地位。


為C需要被替換掉的觀點爭辯是簡單的。編程語言研究和軟件開發實踐都暗示了如何比C更好地去做事。但歷經數十年的研究和開發,C語言的地位卻依舊穩固。很少有其他語言能夠在性能、裸機兼容性或通用性等方面擊敗它。


不過,2018年C是如何與那些明星編程語言競爭的呢,其中細節仍值得一看。




01 C vs. C++


當然了,C最常被拿來與C++進行比較,正如其名稱本身所暗示的那樣,C++作為對C語言的擴展而被創建出來。C++和C之間的差異可以概括為C++更加廣泛(褒)或更加寬泛(貶),具體取決于這個問題你是問的C還是C++程序員。(笑)


雖然C++的語法等方面仍然是類C的,但它提供了許多在原生的C中本不可用的非常實用的功能:命名空間(namespace),模板(template),異常(exception),自動內存管理(automatic memory management)等等。需要頂級性能的項目,例如涉及數據庫,機器學習系統的項目通常是用C++編寫的,以便項目能盡可能地榨取以及利用到每一點性能。


此外,與C相比,C++在持續地更加積極地擴展。即將推出的C++ 20會帶來更多功能供開發者享用,包括模塊,協同程序,同步庫,以及概念,這些使模板更易于使用。C standard的最新版本只進行了少量更新,并側重于保持向后兼容性。


事實上,C++中的所有附加功能同樣也可能成為累贅。而且是很大的累贅。你使用的C++專屬功能越多,引入的復雜度就越高,對結果的修正就越困難。將自己局限于僅一個C++子集的開發人員可以避免許多開發中嚴重的坑和額外負擔。但是有些團隊想要從根兒上防范C++的過度復雜性。堅持使用C能迫使開發人員將自己局限于一個子集。例如,Linux內核開發團隊就直接避開了C++。


選C而不選C++對你——以及任何將會維護你代碼的開發人員——來說都是可行的,通過采用強制簡約主義來避免與C++的復雜性糾纏。當然,C++擁有豐富的高級功能,這是有它自己的道理的。但如果極簡主義更適合當前和未來的項目——以及負責項目的團隊——那么還是選C更明智一些。




02 C vs. Java


幾十年了,Java仍然是企業軟件開發的主力軍之一——并且也是寬泛而言的開發的主力軍之一。許多最重要的企業軟件項目都是用Java編寫的——包括絕大多數Apache Software Foundation項目——而Java仍然是開發企業級需求項目的可行語言。


Java的語法從C和C++中借鑒了很多東西。但是,與C不同的是,Java默認情況下不會編譯為本機代碼。相反,Java運行時環境,JVM,JIT(實時)編譯Java代碼以在目標環境中運行。在適當的情況下,JIT編譯后的Java代碼可以接近甚至超過C的性能。


Java背后的“一次編寫,隨處運行”的理念也允許Java程序在目標架構上進行相對較少的調整即可運行。相比之下,雖然C已被移植到許多架構中,但任何給定的C程序仍可能需要重新量身定做才能在,打個比方,Windows與Linux,兩種不同的os之間正常運行。


這種可移植性和強大性能的結合,以及龐大的軟件庫和框架組成的生態,使Java成為構建企業應用程序的首選語言。


Java輸給C的地方是一個Java從未打算競爭的領域:靠近底層結構運行,或直接與硬件打交道。C代碼被編譯成機器代碼,由進程直接執行。Java被編譯成字節碼,這是一種隨后會被JVM解釋器轉換為機器代碼的中間代碼。此外,盡管Java的自動內存管理在大多數情況下都是個優點,但C更適合于必須充分利用有限內存資源的情況。


也就是說,在某些方面,Java在速度方面可以接近于C。JVM的JIT引擎在運行時根據程序行為優化例程,允許進行許多類型的優化,而這些優化是在未提前編譯的C中無法實現的。雖然Java運行時自動執行內存管理,但一些較新的應用程序可以解決這個問題。例如,Apache Spark部分地通過使用繞過JVM的自定義內存管理代碼來優化內存中處理。




03 C vs. C# 和.Net


在推出近二十年后,C# 和.Net 框架仍然是企業軟件世界的主要組成部分。有人說C#?和.Net是微軟對Java的回應——一個托管代碼編譯器系統和通用運行庫——C和Java之間的許多種對比也適用于C和C#?或.Net之間。


與Java(以及某種程度上來說Python也是如此)一樣,.Net提供跨各種平臺的可移植性和龐大的集成軟件生態系統。考慮到.Net世界中有多少面向企業的開發,這些都是不小的優勢。當你使用C#?或任何其他.Net語言開發程序時,你可以使用為.Net運行時編寫的大量工具和庫。


.NET另一個類似Java的優勢是JIT優化。C#?和.Net程序可以按照C語言提前編譯,但它們主要由.Net運行時進行即時編譯,并使用運行時信息進行優化。JIT編譯允許對無法在C中執行的運行著的.Net程序進行各種就地優化。


與C一樣,C#?和.Net提供各種直接訪問內存的機制。堆,棧和非托管系統內存都可以通過.Net API和對象訪問。開發人員可以使用.Net中的unsafe模式來實現更高的性能。


但這些都不是沒有代價的。托管對象和unsafe對象不能被任意交換,并且它們之間的編組會降低性能。因此,要最大化.Net應用程序的性能需要將托管和非托管對象之間的變動保持在最低限度。


如果你無法承擔托管與非托管內存之間變動造成的性能損失,或者.Net運行時對于目標環境(例如,內核空間)來說是一個糟糕的選擇,或者可能根本不可用,那么C就是你所需要的。與C#?和.Net不同,C被默認可以解鎖對內存的訪問權。




04 C vs. Go


Go的語法很大程度上借鑒了C——花括號作為定界符,語句以分號結束,等等。精通C的開發人員通常可以毫不費力地直接使用Go,甚至算上Go的獨有功能,如命名空間和包管理,對開發人員來說也并不困難。


代碼可讀性是Go的指導設計目標之一:讓開發人員可以輕松掌握任何Go項目,并在短時間內熟練掌握代碼庫。C代碼庫可能很難理解,因為它們很容易聚集大量專屬于某個項目或某個團隊的宏和和#ifdef。Go的語法及其內置的代碼格式以及項目管理工具旨在避免這種結構性問題。


Go還提供了諸如goroutine和channel之類的附加功能,用于處理并發性和組件之間的消息傳遞的語言級別的工具。C需要開發者手動完成或由外部庫提供,但Go提供了開箱即用的這些功能,使得構建需要這些功能的軟件變得更加容易。


Go與C最深層次的不同之處在于內存管理方面。默認情況下,Go的對象會被自動管理并自動進行回收。對于大多數編程工作來說,這非常方便。但這也意味著任何需要確定性處理內存的程序都會更難編寫。


Go確實包含了用于繞過Go的某些類型處理安全性的unsafe包,例如使用Pointer類型讀取和寫入任意內存。但unsafe會附帶一個warning說用它編寫的程序“可能是不可移植的,并且不受Go 1兼容性指南的保護。”


Go非常適合構建命令行實用程序和網絡服務等,因為這些很少用到太過細致的操作。但是,如果是低級設備驅動程序,內核空間操作系統組件以及其他需要嚴格控制內存布局和管理的任務,那么就最好用C來創建。




05 C vs. Rust


在某些方面,Rust是對C和C++創建的內存管理難題的回應,也是對這兩種語言的許多其他缺點的回應。Rust編譯為本機機器代碼,因此就性能而言,它被認為與C相當。但默認情況下,內存安全才是Rust的主要賣點。


Rust的語法和編譯規則可幫助開發人員避免常見的內存管理錯誤。如果程序有一個不符合Rust語法的內存管理問題,它就不會被編譯。剛接觸這種語言的新手,特別是以前用C語言的開發者,由于C語言為這類bug提供了充足的容錯空間,所以他們接觸Rust的第一步是學習如何安撫編譯器。但Rust的支持者認為,這種短期的痛苦有一個長期的回報:更安全的,不會減緩速度的代碼。


Rust還通過其工具改進了C語言。默認情況下,項目和組件管理是Rust提供的工具鏈的一部分,與Go相同。有一種默認的,推薦的方法來管理包,組織項目文件夾,以及處理C需要單獨處理的其他許多事情,每個項目和團隊以不同的方式處理它們。


然而,在Rust中被吹捧為優勢的東西對于C開發者來說可能并沒有太大吸引力。Rust的編譯時安全功能無法禁用,因此即使是最小的Rust程序也必須符合Rust的內存安全限制。默認情況下,C可能不太安全,但在必要時它更靈活,更寬容。


另一個可能的缺點是Rust語言的大小。即使考慮到標準庫,C的功能也相對較少。Rust功能集非常龐大并且還在不斷增長。與C++一樣,較大的Rust功能集意味著更強大的功能,但也意味著更高的復雜度。C是一種較小的語言,但更容易在頭腦中進行建模,因此可能更適合那些對Rust來說太小,不值得大動干戈的項目。




06 C vs. Python


當今,每當談論軟件開發時,Python似乎總是能出現在對話中。畢竟,Python是“對所有項目的第二佳語言”,毫無疑問是最通用的語言之一,擁有數千個第三方庫。


Python強調的,以及它與C最不同的地方,是有利于開發速度而不是執行速度。一個可能需要一個小時才能用另一種語言寫出來的程序——比如C——可能用Python幾分鐘內就能寫好。


另一方面,該程序在C中執行可能需要幾秒鐘,但需要一分鐘才能在Python中運行完。(一個很好的經驗法則:Python程序通常比它們對應的C語言程序運行速度慢一個數量級。)但是對于現代硬件上的許多工作,Python已經足夠快了,這是它如今廣泛應用的一個重要原因。


另一個主要區別是內存管理。Python程序完全由Python運行時進行內存管理,因此開發人員不必擔心分配和釋放內存的細節。但同樣,開發人員的輕松也是以運行時性能為代價的。編寫C程序需要嚴格關注內存管理,但生成的程序通常是純機器速度的黃金標準。


但是,在二者的血脈中,Python和C共享一個深層的關系:Python運行時參考是用C語言編寫的。這允許Python程序包裝用C和C++編寫的庫。第三方庫的Python生態系統的很多重要模塊,例如機器學習方面的庫,其核心是C代碼。


如果開發速度比執行速度更重要,并且如果程序的大多數高性能部分可以被隔離到獨立組件中(而不是遍布整個代碼),那么純Python或Python和C庫的混合使得會是比單獨使用C更好的選擇。否則的話,C仍然是老大。


原文:

https://www.infoworld.com/article/3402023/why-the-c-programming-language-still-rules.html



有話要說?


Q:?2019,你還在用C語言嗎?

歡迎留言與大家分享


猜你想看?


  • 人民日報喊你學數學!實力不允許?8本書帶你入門

  • AI魔幻行為大賞:細數機器視覺的9大應用場景

  • 搞定這個月薪50K的AI熱門領域,看這9本書就夠了

  • 吐血整理!140種Python標準庫、第三方庫和外部工具都有了


更多精彩?


在公眾號對話框輸入以下關鍵詞

查看更多優質內容!


PPT?|?報告?|?讀書?|?書單?|?干貨?

大數據?|?揭秘?|?Python?|?可視化

AI?|?人工智能?|?5G?|?區塊鏈

機器學習?|?深度學習?|?神經網絡

合伙人?|?1024?|?段子?|?數學?|?高考


據統計,99%的大咖都完成了這個神操作

?



覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯系:baiyu@hzbook.com

更多精彩,請在后臺點擊“歷史文章”查看

總結

以上是生活随笔為你收集整理的为什么C语言仍然占据统治地位?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色片在线视频 | 女人扒开屁股让男人捅 | 在线视频网 | 黄色xxxx| 国产又粗又猛又黄视频 | www.久久久久 | 黄网址在线观看 | 国产一区二区三区四区 | 宇都宫紫苑在线播放 | www.男人的天堂.com | 91在线日韩| 久久99精品久久久久子伦 | 国产一区二区成人 | 91网站免费| 午夜在线不卡 | 日韩免费在线看 | 亚洲日本在线观看视频 | 波多野结衣亚洲视频 | 特级精品毛片免费观看 | 久久精品久久精品久久 | 国产精品人成在线观看免费 | www四虎精品视频免费网站 | aaa黄色一级片 | 久久久免费精品 | 精品国产乱码久久久久夜深人妻 | 亚洲va国产天堂va久久 en | 操你啦在线视频 | 国产小视频在线看 | www成人免费 | 青青草av在线播放 | 国产精品久久午夜夜伦鲁鲁 | 久久人人做 | 久久人人视频 | 性生交大片免费看l | 性做久久久久久久 | 野花视频在线观看免费 | jjzz黄色片 | 国产麻豆影视 | 亚洲精品91在线 | 免费黄色入口 | 成人av影视在线 | 玩弄人妻少妇500系列视频 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲码无人客一区二区三区 | 午夜电影在线播放 | 韩国一级片在线观看 | 亚洲国产成人精品激情在线 | 久国产精品| 麻豆久久久久久久 | 亚洲一区二区免费视频 | 动漫裸体无遮挡 | 午夜tv| 中文字幕在线视频免费观看 | 久久爱伊人| 国产真实夫妇交换视频 | 中文字幕免费在线观看 | 看免费的毛片 | 日韩欧美精品在线播放 | 国内毛片毛片毛片毛片 | 精品亚洲国产成av人片传媒 | 日韩av麻豆 | 俺也去五月婷婷 | 在线观看久草 | 免费黄色观看 | 国产人妻人伦精品1国产盗摄 | 欧美一级做a爰片免费视频 成人激情在线观看 | 麻豆av一区二区三区久久 | 特级a级片| 欧美日韩一区二区三区在线播放 | 国产精品99久久 | 久久精品久久久久久 | 舔花蒂 | 欧美日韩中字 | 国产91精品一区二区 | 91亚洲精品视频 | 欧美一级网 | 欧美一区国产一区 | 午夜三级福利 | 成人久久18免费网站图片 | 亚洲伦理一区二区三区 | 欧美国产综合 | 高清无打码 | 丁香婷婷激情五月 | 国产 日韩 欧美在线 | 色综合天天综合网天天看片 | 欧美成人黑人猛交 | 印度午夜性春猛xxx交 | 手机av免费在线观看 | 国产黄色视| 伊人精品视频 | 污污内射久久一区二区欧美日韩 | 天堂网av在线播放 | 在线不卡日韩 | 男人爱看的网站 | 欧美精品videosex极品 | 91丝袜一区在线观看 | 成人免费一区二区三区在线观看 | 性欧美一区二区 | 污片在线看 |