国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言能夠被替換嗎

jf_B3xDfZry ? 來(lái)源:C語(yǔ)言學(xué)習(xí)聯(lián)盟 ? 2023-02-10 16:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

眾所周知,C 是一種廣泛非常使用的語(yǔ)言,從操作系統(tǒng)內(nèi)核到加密算法的編寫(xiě),到處都在使用 C。如今,我們是否應(yīng)該用另一種語(yǔ)言來(lái)替換 C 呢? 盡管C 語(yǔ)言發(fā)布于 1972 年,但至今仍是使用最廣泛的語(yǔ)言之一,同時(shí)按照如今的標(biāo)準(zhǔn)來(lái)看,C 語(yǔ)言也存在許多限制和缺陷。

8cf12db6-a8c9-11ed-bfe3-dac502259ad0.png

圖:2020年 TIOBE 編程語(yǔ)言排行榜 有人希望用另一種語(yǔ)言來(lái)替換 C 的關(guān)鍵原因也正在于此。用 C/C++ 編寫(xiě)的關(guān)鍵性軟件實(shí)在太多了,但 C/C++ 中包含大量的“潛規(guī)則”。舉個(gè)例子 OpenSSL 庫(kù)中的 bug 就源于此。眾所周知,C 語(yǔ)言非常不善于處理類似于緩沖溢出的問(wèn)題。C 語(yǔ)言中的“坑”實(shí)在太多了。C 語(yǔ)言沒(méi)有類型安全,對(duì)于熱衷于動(dòng)態(tài)語(yǔ)言的人來(lái)說(shuō),這聽(tīng)起來(lái)可能有些奇怪。而 Python 或 Julia 等動(dòng)態(tài)語(yǔ)言就可以捕捉到錯(cuò)誤的類型用法,例如在 if 語(yǔ)句中使用整數(shù)的錯(cuò)誤。雖然動(dòng)態(tài)語(yǔ)言無(wú)法在編譯時(shí)捕捉到這類問(wèn)題,但如果它們具有強(qiáng)大的類型系統(tǒng),那么就可以在運(yùn)行時(shí)捕捉到很多問(wèn)題。這對(duì)于安全性特別重要。在很大程度上,安全漏洞都會(huì)引發(fā)未定義的行為,而不會(huì)正常終止程序。 話說(shuō)回來(lái),如果 C 語(yǔ)言如此之糟糕,那么為什么還沒(méi)有被替換掉呢?其中的原因很多。其實(shí)在某些地方,它已經(jīng)被替換了。以前很多用 C 處理的任務(wù)如今都改用 JavaC#、C++ 以及其他語(yǔ)言了。 因此,我們需要深挖一下究竟還有哪些軟件仍然以 C 語(yǔ)言為主:

操作系統(tǒng)內(nèi)核。例如 Linux

微控制器

視頻編解碼器

底層共享庫(kù),例如 OpenSSL 等

Unix 命令行工具,例如 ls、cat 和 git 等

為什么這些領(lǐng)域仍然由 C 語(yǔ)言主導(dǎo)?因?yàn)橹钡阶罱覀円矝](méi)有更好的替代 C 語(yǔ)言的方案。 上個(gè)世紀(jì) 90 年代,許多語(yǔ)言(例如 Java、C#、VB.NET 和 F#)都將重點(diǎn)放在創(chuàng)建垃圾收集上。對(duì)于上述領(lǐng)域來(lái)說(shuō),這些語(yǔ)言都不是好的解決方案。 除此之外,還有其他 80 年代和 90 年代出現(xiàn)的語(yǔ)言,例如 Perl、Python、Ruby 和 JavaScript 等,它們都不適合這些任務(wù)。 當(dāng)然,我們還有一些其他靜態(tài)類型的語(yǔ)言,例如 Ada、Modula-2 等。但是,一般情況下,這些語(yǔ)言都很難與開(kāi)發(fā)人員的技術(shù)結(jié)合,也很難與已有的 C 語(yǔ)言庫(kù)配合使用。 還有 D 等其他語(yǔ)言,但是其復(fù)雜性與 C++ 差不多,因此對(duì) C 開(kāi)發(fā)人員沒(méi)有吸引力。而且,最初它也需要垃圾收集,所以可能并不適合上述提到的許多領(lǐng)域。如果你開(kāi)發(fā)的應(yīng)用程序需要保持很高的幀速率,那肯定不希望啟動(dòng)垃圾收集。

Go 和 Rust 有一定的可能性

我認(rèn)為,第一個(gè)真正有可能替代 C 和 C++ 的現(xiàn)代編程語(yǔ)言是 Go 和 Rust。我們看到許多過(guò)去用 C 或 C++ 編寫(xiě)的工具如今都改成了用 Go 或 Rust 編寫(xiě)。比如大量的命令行工具都用這些語(yǔ)言編寫(xiě)出來(lái)了。有些人甚至在嘗試用Rust 編寫(xiě)游戲引擎。

LLVM:填補(bǔ)空白

我認(rèn)為有可能出現(xiàn) C 語(yǔ)言替代品的一個(gè)主要原因是LLVM 的成熟。LLVM 意味著生成高性能的代碼、支持多平臺(tái)的難題得到了解決。LLVM 為更多人提供了嘗試語(yǔ)言開(kāi)發(fā)的機(jī)會(huì)。 Go 和 Rust 提供了一些啟發(fā),讓我們重新思考 C / C++,在這些啟發(fā)的帶動(dòng)下,再加上 LLVM 助陣,很多人都躍躍欲試尋找 C 語(yǔ)言的替代品:

Zig:一門開(kāi)源的編程語(yǔ)言,專為穩(wěn)定性、可維護(hù)性和最優(yōu)性而設(shè)計(jì)。

Odin:C 語(yǔ)言的替代品,與 Go 非常相似。

V 語(yǔ)言:另一個(gè)類似于 C 的語(yǔ)言,受到了 Go 和 Rust 的大量啟發(fā)。

什么樣的語(yǔ)言可以替代 C?

如果一門編程語(yǔ)言想要替代 C,首先必須適合 C 語(yǔ)言占主導(dǎo)地位的領(lǐng)域。并非所有類型的語(yǔ)言都能夠滿足這一點(diǎn)。我認(rèn)為能夠替代 C 的語(yǔ)言有以下這些共同點(diǎn):

能夠重用現(xiàn)有的 C 庫(kù)。Ada、Modula-2 等語(yǔ)言在很大程度上就在這一點(diǎn)上栽了跟頭,因?yàn)槟銦o(wú)法在大型 C 生態(tài)系統(tǒng)中有效使用這兩種編程語(yǔ)言。

建立在已有的知識(shí)和慣例之上。Go 語(yǔ)言很容易上手,因?yàn)楸M管語(yǔ)法有所變化,但 API 和編程的方式與 C 非常相似。

沒(méi)有垃圾回收,或者采用手動(dòng)內(nèi)存管理。在 C語(yǔ)言占主導(dǎo)的領(lǐng)域內(nèi),你需要嚴(yán)格控制內(nèi)存的使用。在這里領(lǐng)域內(nèi),垃圾收集派不上用場(chǎng),這就是 Go 無(wú)法完全代替 C 的原因。

控制可執(zhí)行文件的大小。像 C 一樣,Zig 可以將可執(zhí)行文件壓縮到很小。你無(wú)法在嵌入式等領(lǐng)域使用 Go 語(yǔ)言,因?yàn)檫@些語(yǔ)言生成的可執(zhí)行文件都太大。

系統(tǒng)層面的友好。你需要能夠操縱位和字節(jié)。你需要良好的二進(jìn)制運(yùn)算符和指針。在過(guò)去的幾十年中,許多語(yǔ)言都沒(méi)有合適的指針。Java 為指針帶來(lái)了各種罵名,好在 Go 挽回了一些。

逐步替換 C 代碼。能夠良好地兼容 C 的可執(zhí)行文件。

我們深入討論一下最后一點(diǎn)。如果需要一次性重寫(xiě)整個(gè)程序,那么壓根沒(méi)有人會(huì)考慮替換掉現(xiàn)有的用 C 語(yǔ)言編寫(xiě)的基礎(chǔ)設(shè)施。以我的經(jīng)驗(yàn)來(lái)看,從 Objective-C 過(guò)渡到 Swift 之所以如此簡(jiǎn)單,是因?yàn)槲铱梢砸淮沃貙?xiě)一個(gè)方法,重新編譯,并測(cè)試程序。 使用 Zig 之類的語(yǔ)言,也可以輕松地做到這一點(diǎn)。

總結(jié)

我們應(yīng)該替換掉 C 的原因有很多,而截止到目前仍未換掉的主要原因在于,其他編程語(yǔ)言的重點(diǎn)都放在了別處,而且我們?nèi)鄙俟ぞ摺_@不是一個(gè)大型組織必須決定做的事情。你需要讓大家都來(lái)嘗試一下。如今在 LLVM 的支持下,在 Go 的啟發(fā)下,我們完全可以替換掉 C。 那么,我個(gè)人是否認(rèn)為 C 將來(lái)會(huì)被替換掉呢?我并沒(méi)有那么期待。這是一個(gè)漫長(zhǎng)的過(guò)程,我們還沒(méi)有明確的贏家。大型組織不會(huì)采用 Zig、Odin、V 或其他編程語(yǔ)言,他們都在等待明確的替代方案出現(xiàn)。 說(shuō)到底,替換掉 C 究竟表示什么意思?時(shí)至今日很多金融機(jī)構(gòu)仍在使用 Cobol,但我們可以說(shuō) Cobol 已被取代了,因?yàn)榻駮r(shí)今日沒(méi)有新項(xiàng)目會(huì)選擇 Cobol。人們都在盡可能遠(yuǎn)離 Cobol。 同樣,大量經(jīng)過(guò)測(cè)試的 C 代碼也不會(huì)被重寫(xiě)。這些代碼會(huì)一直遺留下去。 但是,終有一天,C 語(yǔ)言會(huì)被其他語(yǔ)言所替代,即使是在自己占主導(dǎo)地位的領(lǐng)域中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145570
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    240

    瀏覽量

    7585

原文標(biāo)題:C語(yǔ)言能夠被替換嗎?

文章出處:【微信號(hào):C語(yǔ)言學(xué)習(xí)聯(lián)盟,微信公眾號(hào):C語(yǔ)言學(xué)習(xí)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言主要特點(diǎn)

    。 5.語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。 6.C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位(bit)操作,能夠實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。因此
    發(fā)表于 01-05 07:41

    如何用好 C 語(yǔ)言函數(shù)的返回值?

    C語(yǔ)言也有“行業(yè)潛規(guī)則”,不過(guò),對(duì)于一般的函數(shù),大多數(shù)C語(yǔ)言程序員常常使用返回值 0 表示成功,非零值表示失敗。因此,如果**我們定義的函數(shù)能夠
    發(fā)表于 12-25 07:17

    C語(yǔ)言C++的區(qū)別及聯(lián)系

    并沒(méi)有錯(cuò)。 C++一開(kāi)始本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)發(fā)明時(shí),起初被稱為“C with Classes”,即「帶類的C」。 很明顯,它是在
    發(fā)表于 12-24 07:23

    C語(yǔ)言的常量介紹

    在程序執(zhí)行過(guò)程中,值不發(fā)生改變的量稱為常量。 mtianyan: C語(yǔ)言的常量可以分為直接常量和符號(hào)常量。 直接常量也稱為字面量,是可以直接拿來(lái)使用,無(wú)需說(shuō)明的量,比如: 整型常量:13、0
    發(fā)表于 11-24 07:12

    C語(yǔ)言特性

    1、高效性:直接操作硬件 C 語(yǔ)言代碼的執(zhí)行效率極高,這是其最為顯著的優(yōu)勢(shì)之一。它能夠直接訪問(wèn)硬件資源,與底層硬件進(jìn)行緊密交互,充分發(fā)揮硬件的性能潛力。在嵌入式開(kāi)發(fā)中,硬件資源往往十分有限,對(duì)程序
    發(fā)表于 11-24 07:01

    C語(yǔ)言在嵌入式開(kāi)發(fā)中的應(yīng)用

    發(fā)動(dòng)機(jī)的最佳性能和燃油經(jīng)濟(jì)性。C 語(yǔ)言的高效性和對(duì)硬件的直接操作能力,使得它能夠滿足 ECU 對(duì)實(shí)時(shí)性和精確性的嚴(yán)格要求。據(jù)統(tǒng)計(jì),全球超過(guò) 80% 的汽車 ECU 軟件都是用 C
    發(fā)表于 11-21 08:09

    C語(yǔ)言和單片機(jī)C語(yǔ)言有什么差異

    單片機(jī)c語(yǔ)言相對(duì)于普通C語(yǔ)言增加了一些基本的指令,還有變量的賦值是16進(jìn)制,當(dāng)然單片機(jī)c語(yǔ)言只牽
    發(fā)表于 11-14 07:55

    C語(yǔ)言的printf基本用法介紹

    個(gè)簡(jiǎn)單的例子: printf(\"C語(yǔ)言\"); 這個(gè)語(yǔ)句可以在屏幕上顯示“C語(yǔ)言”,與puts(\"C
    發(fā)表于 11-12 07:04

    蜂鳥(niǎo)E203能夠仿真運(yùn)行C語(yǔ)言程序嗎?

    我看那兩本書(shū)里面都是說(shuō)怎么在FPGA上運(yùn)行C語(yǔ)言程序和Benchmark程序,它提供仿真器下如何編譯運(yùn)行C語(yǔ)言程序嗎?
    發(fā)表于 11-06 06:21

    MiniVC6(C語(yǔ)言快速部署)資料

    MiniVC6(C語(yǔ)言快速部署)軟件,無(wú)需安裝。
    發(fā)表于 09-04 16:59 ?0次下載

    貼片電阻和插件電阻可以替換嗎?

    設(shè)計(jì)要求,包括電阻的阻值、精度、功率等關(guān)鍵參數(shù)。 確保替換后的電阻能夠滿足電路設(shè)計(jì)要求,不會(huì)引入額外的誤差或不穩(wěn)定因素。 空間限制: 貼片電阻體積小,重量輕,適合高密度集成和自動(dòng)化生產(chǎn),特別適用于空間受限的場(chǎng)合,如
    的頭像 發(fā)表于 04-30 15:32 ?1376次閱讀
    貼片電阻和插件電阻可以<b class='flag-5'>替換</b>嗎?

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循環(huán)控制語(yǔ)句,如break、continue和
    的頭像 發(fā)表于 04-29 18:49 ?2039次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    AD7701ARZ有沒(méi)有能夠直接替換,或者原設(shè)計(jì)線路商改動(dòng)較少的型號(hào)?

    AD7701ARZ有沒(méi)有能夠直接替換,或者原設(shè)計(jì)線路商改動(dòng)較少的型號(hào)
    發(fā)表于 04-15 07:32

    C語(yǔ)言的歷史及程序介紹

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言的歷史及程序介紹.pdf》資料免費(fèi)下載
    發(fā)表于 04-09 16:10 ?0次下載

    51單片機(jī)C語(yǔ)言學(xué)習(xí)筆記

    c51語(yǔ)言快速入門
    發(fā)表于 03-24 14:04 ?3次下載