當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]這幾天來(lái),我(Eric Raymond)在思考那些正在挑戰(zhàn)C語(yǔ)言的系統(tǒng)編程語(yǔ)言領(lǐng)袖地位的新潮語(yǔ)言,尤其是Go和Rust。思考的過(guò)程中,我意識(shí)到了一個(gè)讓我震驚的事實(shí)——我有著35年的C語(yǔ)言經(jīng)驗(yàn)。每周我都要寫(xiě)很多C代碼,但是我已經(jīng)記不清楚上一次我 創(chuàng)建一個(gè)新的C語(yǔ)言項(xiàng)目 是在什么時(shí)候了。

這幾天來(lái),我(Eric Raymond)在思考那些正在挑戰(zhàn)C語(yǔ)言的系統(tǒng)編程語(yǔ)言領(lǐng)袖地位的新潮語(yǔ)言,尤其是Go和Rust。思考的過(guò)程中,我意識(shí)到了一個(gè)讓我震驚的事實(shí)——我有著35年的C語(yǔ)言經(jīng)驗(yàn)。每周我都要寫(xiě)很多C代碼,但是我已經(jīng)記不清楚上一次我 創(chuàng)建一個(gè)新的C語(yǔ)言項(xiàng)目 是在什么時(shí)候了。

如果你完全不認(rèn)為這種情況令人震驚,那你很可能不是一個(gè)系統(tǒng)程序員。我知道有很多程序員使用更高級(jí)的語(yǔ)言工作。但是我把大部分時(shí)間都花在了深入打磨像NTPsec、 GPSD以及giflib這些東西上。熟練使用C語(yǔ)言在這幾十年里一直就是我的專(zhuān)長(zhǎng)。

但是,現(xiàn)在我不僅是不再使用 C 語(yǔ)言寫(xiě)新的項(xiàng)目,甚至我都記不清我是什么時(shí)候開(kāi)始這樣做的了,而且……回頭想想,我覺(jué)得這都不是本世紀(jì)發(fā)生的事情。

這個(gè)對(duì)于我來(lái)說(shuō)是件大事,因?yàn)槿绻銌?wèn)我,我的五個(gè)最核心軟件開(kāi)發(fā)技能是什么,“C語(yǔ)言專(zhuān)家” 一定是你最有可能聽(tīng)到的之一。這也激起了我的思考。

C語(yǔ)言的未來(lái)會(huì)怎樣 ?C語(yǔ)言是否正像當(dāng)年的COBOL語(yǔ)言一樣,在輝煌之后,走向落幕?

我恰好是在C語(yǔ)言迅猛發(fā)展,并把匯編語(yǔ)言以及其它許多編譯型語(yǔ)言擠出主流存在的前幾年開(kāi)始編程的。

那場(chǎng)過(guò)渡大約是在1982到1985年之間。在那之前,有很多編譯型語(yǔ)言爭(zhēng)相吸引程序員的注意力,那些語(yǔ)言中還沒(méi)有明確的領(lǐng)導(dǎo)者;但是在那之后,小眾的語(yǔ)言就直接毫無(wú)聲息的退出了舞臺(tái)。

主流的語(yǔ)言(FORTRAN、Pascal、COBOL)則要么只限于老代碼,要么就是固守單一領(lǐng)域,再就是在C語(yǔ)言的邊緣領(lǐng)域頂著愈來(lái)愈大的壓力茍延殘喘。

而在那以后,這種情形持續(xù)了近30年。盡管在應(yīng)用程序開(kāi)發(fā)上出現(xiàn)了新的動(dòng)向:Java、 Perl、 Python, 以及許許多多不是很成功的競(jìng)爭(zhēng)者。起初我很少關(guān)注這些語(yǔ)言,這很大一部分是因?yàn)樵谒鼈兊倪\(yùn)行時(shí)的開(kāi)銷(xiāo)對(duì)于當(dāng)時(shí)的實(shí)際硬件來(lái)說(shuō)太大。因此,這就使得C的成功無(wú)可撼動(dòng)。

為了使用和對(duì)接大量已有的C語(yǔ)言代碼,你得使用C語(yǔ)言寫(xiě)新代碼(一部分腳本語(yǔ)言嘗試過(guò)打破這種壁壘,但是只有Python有可能取得成功)。

回想起來(lái),我在1997年使用腳本語(yǔ)言寫(xiě)應(yīng)用時(shí)本應(yīng)該注意到這些語(yǔ)言的更重要的意義的。當(dāng)時(shí)我寫(xiě)的是一個(gè)名為SunSITE的幫助圖書(shū)管理員做源碼分發(fā)的輔助軟件,當(dāng)時(shí)使用的是Perl語(yǔ)言。

這個(gè)應(yīng)用完全是用來(lái)處理文本輸入的,而且只需要能夠應(yīng)對(duì)人類(lèi)的反應(yīng)速度即可(大概0.1秒),因此使用C或者別的沒(méi)有動(dòng)態(tài)內(nèi)存分配以及字符串類(lèi)型的語(yǔ)言來(lái)寫(xiě)就會(huì)顯得很傻。

但是在當(dāng)時(shí),我僅僅是把其視為一個(gè)試驗(yàn),而完全沒(méi)有想到我?guī)缀踉僖膊粫?huì)在一個(gè)新項(xiàng)目的第一個(gè)文件里敲下int main(int argc, char **argv) 這樣的C語(yǔ)言代碼了。

我說(shuō)“幾乎”,主要是因?yàn)?999年的SNG。 我想那是我最后一個(gè)用C從頭開(kāi)始寫(xiě)的項(xiàng)目了。

在那之后我寫(xiě)的所有的C代碼都是在為那些上世紀(jì)已經(jīng)存在的老項(xiàng)目添磚加瓦,或者是在維護(hù)諸如GPSD以及NTPsec一類(lèi)的項(xiàng)目。

當(dāng)年我本不應(yīng)該使用C語(yǔ)言寫(xiě)SNG的。因?yàn)樵谀莻€(gè)年代,摩爾定律的快速迭代使得硬件愈加便宜,使得像Perl這樣的語(yǔ)言的執(zhí)行效率也不再是問(wèn)題。僅僅三年以后,我可能就會(huì)毫不猶豫地使用Python而不是C語(yǔ)言來(lái)寫(xiě)SNG。

在1997年我學(xué)習(xí)了Python, 這對(duì)我來(lái)說(shuō)是一道分水嶺。這個(gè)語(yǔ)言很美妙——就像我早年使用的Lisp一樣,而且Python還有很酷的庫(kù)!甚至還完全遵循了POSIX!還有一個(gè)蠻好用的對(duì)象系統(tǒng)!Python沒(méi)有把C語(yǔ)言擠出我的工具箱,但是我很快就習(xí)慣了在只要能用Python時(shí)就寫(xiě)Python ,而只在必須使用C語(yǔ)言時(shí)寫(xiě)C。

(在此之后,我開(kāi)始在我的訪談中指出我所謂的 “Perl 的教訓(xùn)” ,也就是任何一個(gè)沒(méi)能實(shí)現(xiàn)和C語(yǔ)言語(yǔ)義等價(jià)的遵循 POSIX 的語(yǔ)言都注定要失敗。在計(jì)算機(jī)科學(xué)的發(fā)展史上,很多學(xué)術(shù)語(yǔ)言的骨骸俯拾皆是,原因是這些語(yǔ)言的設(shè)計(jì)者沒(méi)有意識(shí)到這個(gè)重要的問(wèn)題。)

顯然,對(duì)我來(lái)說(shuō),Python的主要優(yōu)勢(shì)之一就是它很簡(jiǎn)單,當(dāng)我寫(xiě)Python時(shí),我不再需要擔(dān)心內(nèi)存管理問(wèn)題或者會(huì)導(dǎo)致核心轉(zhuǎn)儲(chǔ)的程序崩潰 —— 對(duì)于C程序員來(lái)說(shuō),處理這些問(wèn)題煩的要命。

而不那么明顯的優(yōu)勢(shì)恰好在我更改語(yǔ)言時(shí)顯現(xiàn),我在90年代末寫(xiě)應(yīng)用程序和非核心系統(tǒng)服務(wù)的代碼時(shí),為了平衡成本與風(fēng)險(xiǎn)都會(huì)傾向于選擇具有自動(dòng)內(nèi)存管理但是開(kāi)銷(xiāo)更大的語(yǔ)言,以抵消之前提到的C語(yǔ)言的缺陷。

而在僅僅幾年之前(甚至是 1990 年),那些語(yǔ)言的開(kāi)銷(xiāo)還是大到無(wú)法承受的;那時(shí)硬件產(chǎn)業(yè)的發(fā)展還在早期階段,沒(méi)有給摩爾定律足夠的時(shí)間來(lái)發(fā)揮威力。

盡量地在C語(yǔ)言和Python之間選擇C —— 只要是能的話(huà)我就會(huì)從C語(yǔ)言轉(zhuǎn)移到Python。這是一種降低工程復(fù)雜程度的有效策略。我將這種策略應(yīng)用在了GPSD中,而針對(duì)NTPsec , 我對(duì)這個(gè)策略的采用則更加系統(tǒng)化。這就是我們能把NTP的代碼庫(kù)大小削減四分之一的原因。

但是今天我不是來(lái)講Python的。盡管我覺(jué)得它在競(jìng)爭(zhēng)中脫穎而出,Python也未必真的是在2000年之前徹底結(jié)束我在新項(xiàng)目上使用C語(yǔ)言的原因,因?yàn)樵诋?dāng)時(shí)任何一個(gè)新的學(xué)院派的動(dòng)態(tài)語(yǔ)言都可以讓我不再選擇使用C語(yǔ)言。也有可能是在某段時(shí)間里在我寫(xiě)了很多Java之后,我才慢慢遠(yuǎn)離了C語(yǔ)言。

我寫(xiě)這個(gè)回憶錄是因?yàn)槲矣X(jué)得我并非特例,在世紀(jì)之交,同樣的發(fā)展和轉(zhuǎn)變也改變了不少C語(yǔ)言老手的編碼習(xí)慣。像我一樣,他們?cè)诋?dāng)時(shí)也并沒(méi)有意識(shí)到這種轉(zhuǎn)變正在發(fā)生。

在2000年以后,盡管我還在使用 C/C++ 寫(xiě)之前的項(xiàng)目,比如GPSD ,游戲韋諾之戰(zhàn)以及NTPsec,但是我的所有新項(xiàng)目都是使用Python的。

有很多程序是在完全無(wú)法在C語(yǔ)言下寫(xiě)出來(lái)的,尤其是reposurgeon 以及doclifter這樣的項(xiàng)目。

由于C 言受限的數(shù)據(jù)類(lèi)型本體論以及其脆弱的底層數(shù)據(jù)管理問(wèn)題,嘗試用C寫(xiě)的話(huà)可能會(huì)很恐怖,并注定失敗。

甚至是對(duì)于更小的項(xiàng)目——那些可以在C中實(shí)現(xiàn)的東西——我也使用Python寫(xiě),因?yàn)槲也幌牖ú槐匾臅r(shí)間以及精力去處理內(nèi)核轉(zhuǎn)儲(chǔ)問(wèn)題。這種情況一直持續(xù)到去年年底,持續(xù)到我創(chuàng)建我的第一個(gè)Rust項(xiàng)目,以及成功寫(xiě)出第一個(gè)使用Go語(yǔ)言的項(xiàng)目。

如前文所述,盡管我是在討論我的個(gè)人經(jīng)歷,但是我想我的經(jīng)歷體現(xiàn)了時(shí)代的趨勢(shì)。我期待新潮流的出現(xiàn),而不是僅僅跟隨潮流。

在98年的時(shí)候,我就是Python的早期使用者。來(lái)自TIOBE的數(shù)據(jù)則表明,在Go語(yǔ)言脫胎于公司的實(shí)驗(yàn)項(xiàng)目并剛剛從小眾語(yǔ)言中脫穎而出的幾個(gè)月內(nèi),我就開(kāi)始實(shí)現(xiàn)自己的第一個(gè)Go語(yǔ)言項(xiàng)目了。

總而言之:直到現(xiàn)在第一批有可能挑戰(zhàn)C語(yǔ)言的傳統(tǒng)地位的語(yǔ)言才出現(xiàn)。

我判斷這個(gè)的標(biāo)準(zhǔn)很簡(jiǎn)單——只要這個(gè)語(yǔ)言能讓我等C語(yǔ)言老手接受不再寫(xiě)C的事實(shí),這個(gè)語(yǔ)言才 “有可能” 挑戰(zhàn)到C語(yǔ)言的地位—— 來(lái)看啊,這有個(gè)新編譯器,能把C轉(zhuǎn)換到新語(yǔ)言,現(xiàn)在你可以讓他完成你的全部工作了 —— 這樣C語(yǔ)言的老手就會(huì)開(kāi)心起來(lái)。

Python以及和其類(lèi)似的語(yǔ)言對(duì)此做的并不夠好。使用Python實(shí)現(xiàn) NTPsec(以此舉例)可能是個(gè)災(zāi)難,最終會(huì)由于過(guò)高的運(yùn)行時(shí)開(kāi)銷(xiāo)以及由于垃圾回收機(jī)制導(dǎo)致的延遲變化而爛尾。

如果需求是針對(duì)單個(gè)用戶(hù)且只需要以人類(lèi)能接受的速度運(yùn)行,使用 Python 當(dāng)然是很好的,但是對(duì)于以 機(jī)器的速度 運(yùn)行的程序來(lái)說(shuō)就不總是如此了 —— 尤其是在很高的多用戶(hù)負(fù)載之下。

這不只是我自己的判斷 —— 因?yàn)槟肎o語(yǔ)言來(lái)說(shuō),它的存在主要就是因?yàn)楫?dāng)時(shí)作為Python語(yǔ)言主要支持者的Google在使用Python實(shí)現(xiàn)一些工程的時(shí)候也遭遇了同樣的效能痛點(diǎn)。

Go語(yǔ)言就是為了解決Python搞不定的那些大多由C語(yǔ)言來(lái)實(shí)現(xiàn)的任務(wù)而設(shè)計(jì)的。

盡管沒(méi)有一個(gè)全自動(dòng)語(yǔ)言轉(zhuǎn)換軟件讓我很是不爽,但是使用Go語(yǔ)言來(lái)寫(xiě)系統(tǒng)程序?qū)ξ襾?lái)說(shuō)不算麻煩,我發(fā)現(xiàn)我寫(xiě)G寫(xiě)的還挺開(kāi)心的。我的很多C編碼技能還可以繼續(xù)使用,我還收獲了垃圾回收機(jī)制以及并發(fā)編程機(jī)制,這何樂(lè)而不為?

本來(lái)我想把Rust也視為 “C 語(yǔ)言要過(guò)時(shí)了”的例證,但是在學(xué)習(xí)并嘗試使用了這門(mén)語(yǔ)言編程之后,我覺(jué)得這種語(yǔ)言現(xiàn)在還沒(méi)有做好準(zhǔn)備。也許5年以后,它才會(huì)成為C語(yǔ)言的對(duì)手。

隨著2017結(jié)束,我們已經(jīng)發(fā)現(xiàn)了一個(gè)相對(duì)成熟的語(yǔ)言,其和C類(lèi)似,能夠勝任C語(yǔ)言的大部分工作場(chǎng)景(我在下面會(huì)準(zhǔn)確描述),在幾年以后,這個(gè)語(yǔ)言界的新星可能就會(huì)取得成功。

這件事意義重大。如果你不長(zhǎng)遠(yuǎn)地回顧歷史,你可能看不出來(lái)這件事情的偉大性。三十年了 —— 這幾乎就是我作為一個(gè)程序員的全部生涯,我們都沒(méi)有等到一個(gè)C語(yǔ)言的繼任者,也無(wú)法遙望C之后的系統(tǒng)編程會(huì)是什么樣子的。而現(xiàn)在,我們面前突然有了后C時(shí)代的兩種不同的展望和未來(lái)……

……另一種展望則是下面這個(gè)語(yǔ)言留給我們的。

我的一個(gè)朋友正在開(kāi)發(fā)一個(gè)他稱(chēng)之為 “Cx” 的語(yǔ)言,這個(gè)語(yǔ)言在C語(yǔ)言上做了很少的改動(dòng),使得其能夠支持類(lèi)型安全;他的項(xiàng)目的目的就是要?jiǎng)?chuàng)建一個(gè)能夠在最少人力參與的情況下把古典 C語(yǔ)言修改為新語(yǔ)言的程序。

我不會(huì)指出這位朋友的名字,免得給他太多壓力,讓他做出太多不切實(shí)際的保證。但是他的實(shí)現(xiàn)方法真的很是有意思,我會(huì)盡量給他募集資金。

現(xiàn)在,我們看到了可以替C語(yǔ)言實(shí)現(xiàn)系統(tǒng)編程的三種不同的可能的道路。而就在兩年之前,我們的眼前還是一片漆黑。我重復(fù)一遍:這件事情意義重大。

我是在說(shuō)C語(yǔ)言將要滅絕嗎?不是這樣的,在可預(yù)見(jiàn)的未來(lái)里,C語(yǔ)言還會(huì)是操作系統(tǒng)的內(nèi)核編程以及設(shè)備固件編程的主流語(yǔ)言,在這些場(chǎng)景下,盡力壓榨硬件性能的古老規(guī)則還在奏效,盡管它可能不是那么安全。

現(xiàn)在那些將要被C的繼任者攻破的領(lǐng)域就是我之前提到的我經(jīng)常涉及的領(lǐng)域 —— 比如 GPSD 以及 NTPsec、系統(tǒng)服務(wù)以及那些因?yàn)闅v史原因而使用 C 語(yǔ)言寫(xiě)的進(jìn)程。還有就是以DNS服務(wù)器以及郵件傳輸代理 —— 那些需要以機(jī)器速度而不是人類(lèi)的速度運(yùn)行的系統(tǒng)程序。

現(xiàn)在我們可以對(duì)后C時(shí)代的未來(lái)窺見(jiàn)一斑,即上述這類(lèi)領(lǐng)域的代碼都可以使用那些具有強(qiáng)大內(nèi)存安全特性的 C 語(yǔ)言的替代者實(shí)現(xiàn)。Go 、Rust 或者 Cx ,無(wú)論是哪個(gè),都可能使C的存在被弱化。

比如,如果我現(xiàn)在再來(lái)重新實(shí)現(xiàn)一遍NTP ,我可能就會(huì)毫不猶豫的使用Go語(yǔ)言去完成。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉