掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
C是一種廣泛使用的語(yǔ)言,用于對(duì)從OS內(nèi)核到加密庫(kù)的任何程序進(jìn)行編程?,F(xiàn)在該更換了嗎?

盡管C編程語(yǔ)言早在1972年就已發(fā)布,但它仍是當(dāng)今使用最廣泛的語(yǔ)言之一,并且按照當(dāng)今的標(biāo)準(zhǔn)存在許多限制和缺陷。
> Programming language popularity, 2020 by TIOBE
這就是為什么應(yīng)該替換C的關(guān)鍵原因。太多關(guān)鍵軟件都是用C / C ++編寫的,其含義廣泛。一個(gè)示例是OpenSSL之類的庫(kù)中的錯(cuò)誤。眾所周知,C在捕獲諸如緩沖區(qū)溢出之類的問(wèn)題時(shí)表現(xiàn)很差。C是一種允許您以多種方式射擊自己的語(yǔ)言。
熱衷于動(dòng)態(tài)語(yǔ)言的人聽起來(lái)可能很奇怪。但是,這里的問(wèn)題是類型安全。諸如Python和Julia之類的動(dòng)態(tài)語(yǔ)言通常會(huì)錯(cuò)誤地使用類型。例如在if語(yǔ)句中使用整數(shù)。動(dòng)態(tài)語(yǔ)言在編譯時(shí)可能不會(huì)遇到問(wèn)題,但是如果它們具有強(qiáng)大的類型系統(tǒng),那么在運(yùn)行時(shí)會(huì)遇到很多問(wèn)題。這對(duì)于安全性尤其重要。安全漏洞在很大程度上歸因于導(dǎo)致不確定的行為,而不是受控的關(guān)閉。
但是如果C太糟糕了,為什么還沒有被替換呢?有很多原因。在某種程度上,它已經(jīng)被替換了。Java,C#,C ++和許多其他語(yǔ)言已經(jīng)接管了以前用C完成的任務(wù)。
因此,這實(shí)際上是關(guān)于剩下的那種軟件,其中C仍然占主導(dǎo)地位:
為什么C仍然主導(dǎo)著這些領(lǐng)域?因?yàn)橹钡阶罱奶娲桨高€不是很好。上世紀(jì)90年代,許多語(yǔ)言(例如Java,C#,VB.NET和F#)似乎主要致力于創(chuàng)建垃圾收集托管語(yǔ)言。對(duì)于上面列出的示例,不是一個(gè)很好的解決方案。
然后在80年代和90年代出現(xiàn)了其他語(yǔ)言,例如Perl,Python,Ruby,JavaScript,它們都不適合這些任務(wù)。
當(dāng)然,一直存在其他靜態(tài)類型的語(yǔ)言,例如Ada,Modula-2等。但是,這些語(yǔ)言通常并不能滿足人們現(xiàn)有的技能要求,也可以輕松地與現(xiàn)有的C庫(kù)一起使用。
曾經(jīng)有諸如D之類的語(yǔ)言,但是它具有C ++級(jí)別的復(fù)雜性,可能對(duì)C開發(fā)人員沒有吸引力。它最初還要求進(jìn)行垃圾收集,這很可能使其不適用于所提到的許多領(lǐng)域。您不想在嘗試保持幀速率時(shí)啟動(dòng)垃圾收集器。
Go and Rust 的可能性
我認(rèn)為對(duì)C和C ++的現(xiàn)代化表現(xiàn)出濃厚興趣的第一個(gè)真實(shí)跡象是Go和Rust的日益普及。我們看到過(guò)去通常使用C或C ++編寫的許多典型工具現(xiàn)在都用Go或Rust編寫。大量的命令行工具,已經(jīng)用這兩種語(yǔ)言編寫。我在這里介紹了其中一些工具。您會(huì)看到人們?cè)噲D用Rust編寫游戲引擎。
LLVM:缺少的難題
我相信由于LLVM的成熟,提供替代C語(yǔ)言的可能性很大。LLVM意味著生成高性能代碼并針對(duì)許多平臺(tái)的真正復(fù)雜的工作已解決。它使更多人可以進(jìn)行語(yǔ)言開發(fā)。
Go和Rust都為如何重新思考C / C ++以及如何利用LLVM和LLVM帶來(lái)了一些靈感,出現(xiàn)了一些可能的C替代品的家庭手工業(yè):
什么是可替代C的語(yǔ)言?
要替換C,通常需要一種語(yǔ)言來(lái)適應(yīng)C仍占主導(dǎo)地位。并非所有類型的語(yǔ)言都適合于此。因此,我列出的語(yǔ)言具有許多共同點(diǎn),可以替代C:
讓我們擴(kuò)展最后一點(diǎn)。如果這意味著您需要一次性重寫整個(gè)程序,那么甚至沒有人會(huì)開始著手替換現(xiàn)有的C基礎(chǔ)結(jié)構(gòu)。以我的經(jīng)驗(yàn),可以很容易地從Objective-C過(guò)渡到Swift的一件事是,我實(shí)際上可以一次重寫一個(gè)方法,重新編譯并測(cè)試該程序。
使用諸如Zig之類的語(yǔ)言,您可以輕松地做到這一點(diǎn)。
結(jié)論
我們應(yīng)該替換C的原因有很多,而以前從未做過(guò)的主要原因是,重點(diǎn)放在了其他地方,而缺少工具。這不是一個(gè)大型組織必須決定做的事情。您需要讓一些家庭手工業(yè)的人輕松嘗試一下。以LLVM為工具,以Go作為靈感,這是今天完全可能的。
我個(gè)人認(rèn)為C將被替換嗎?我沒有屏住呼吸。這是一個(gè)漫長(zhǎng)的過(guò)程,我們還沒有明確的贏家。大型組織不會(huì)打算采用Zig,Odin,V或其他任何方式,直到出現(xiàn)明確的替代方案。
替換甚至意味著什么?Cobol仍在進(jìn)行許多金融交易。但是我認(rèn)為我們可以說(shuō)已經(jīng)取代了Cobol,因?yàn)榻裉鞗]有人會(huì)故意為任何新項(xiàng)目選擇Cobol。人們將盡可能地嘗試遠(yuǎn)離它。
同樣,許多經(jīng)過(guò)良好測(cè)試的C代碼也不會(huì)被重寫。它只會(huì)流連忘返。但是我們將來(lái)可能會(huì)達(dá)到這樣的地步,因?yàn)樵贑傳統(tǒng)上占主導(dǎo)地位的領(lǐng)域中,其他語(yǔ)言只是被C所取代。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流