緩慢的速度、運(yùn)行時(shí)問題和移動(dòng)應(yīng)用開發(fā)困境“毀掉”了的未來編程社區(qū)
2021-09-04
速度慢、運(yùn)行時(shí)問題和移動(dòng)應(yīng)用開發(fā)困境“毀了”未來
編程社區(qū)花了幾十年才采用。但是從2010年開始就火爆了,人氣終于可以和C、C#、Java等媲美了。
但這種趨勢(shì)何時(shí)會(huì)持續(xù)?什么時(shí)候會(huì)被其他語言取代編程語言原理,為什么?
消亡時(shí)間難以預(yù)測(cè),所以我不給出確切的時(shí)間點(diǎn),而是評(píng)估當(dāng)前推廣普及的優(yōu)勢(shì),以及未來導(dǎo)致其衰落的缺陷。
哪些優(yōu)勢(shì)造就了今天的流行局面?
的成功可見一斑。該趨勢(shì)數(shù)據(jù)統(tǒng)計(jì)了平臺(tái)帖子中的標(biāo)簽數(shù)量。鑒于其龐大的規(guī)模,這是一種編程語言受歡迎程度的良好指標(biāo)。
各種編程語言上的標(biāo)簽數(shù)量快照
.
R 過去幾年一直處于穩(wěn)定狀態(tài),許多其他語言的受歡迎程度也在穩(wěn)步下降,但 R 的增長(zhǎng)似乎勢(shì)不可擋。大約 14% 的問題被標(biāo)記為“”,并且這一趨勢(shì)正在上升。
這種現(xiàn)象背后有幾個(gè)因素。
悠久的歷史
它從 90 年代就已經(jīng)存在了。這不僅意味著它有足夠的時(shí)間成長(zhǎng),而且還擁有龐大的支持社區(qū)。??p>
因此,如果您在使用編程時(shí)遇到任何問題,通過 搜索很有可能解決。因?yàn)橛锌赡苡腥擞龅竭^你的問題,并為它寫了一些有用的解決方案。
對(duì)初學(xué)者友好
這不僅是因?yàn)樗呀?jīng)存在了幾十年,讓程序員有時(shí)間制作很棒的教程。更重要的是,語法非常容易閱讀。
首先,它不需要指定數(shù)據(jù)類型。你只需要聲明一個(gè)變量;您將從上下文中了解它是整數(shù)、浮點(diǎn)值、布爾值還是其他值。這對(duì)初學(xué)者來說是一個(gè)巨大的優(yōu)勢(shì)。如果你用 C++ 編程,你就會(huì)知道僅僅因?yàn)橐粋€(gè)浮點(diǎn)數(shù)被一個(gè)整數(shù)代替而無法編譯程序是多么令人沮喪。
如果與C++代碼進(jìn)行比較,您就會(huì)知道它是多么容易理解。盡管 C++ 的設(shè)計(jì)考慮了可讀性,但與代碼相比,閱讀起來相當(dāng)費(fèi)力。
用途廣泛
由于它已經(jīng)存在很長(zhǎng)時(shí)間,開發(fā)人員已經(jīng)為許多目的制作了包。如今,您可以找到幾乎適用于所有事物的軟件包。
想要處理數(shù)字、向量和矩陣?是你的好幫手。
想要為技術(shù)和工程行業(yè)進(jìn)行計(jì)算嗎?請(qǐng)使用。
想在數(shù)據(jù)操作和分析方面大放異彩嗎?試試吧。
想開始使用人工智能嗎?為什么不呢。
無論您嘗試管理什么計(jì)算任務(wù),都可能有可用的包。這使得它始終處于技術(shù)的最前沿,從過去幾年機(jī)器學(xué)習(xí)使用的激增可以看出。
的缺陷,會(huì)動(dòng)搖根嗎?
如前所述,您可以想象它會(huì)在很長(zhǎng)一段時(shí)間內(nèi)保持熱度。但與所有技術(shù)一樣,也存在弱點(diǎn)。我會(huì)一一分析最重要的缺陷,并評(píng)估這些缺陷是否致命。
速度
很慢,真的很慢。平均而言,完成一項(xiàng)使用中的任務(wù)所需的時(shí)間是任何其他語言的 2 到 10 倍。
造成這種情況的原因是多方面的。其中之一是動(dòng)態(tài)類型——請(qǐng)記住,您不需要像在其他語言中那樣指定數(shù)據(jù)類型。這意味著它使用了大量?jī)?nèi)存,因?yàn)槌绦蛐枰獮樗赡苁褂玫拿總€(gè)變量保留足夠的空間。大量?jī)?nèi)存使用意味著大量計(jì)算時(shí)間。
另一個(gè)原因是一次只能執(zhí)行一項(xiàng)任務(wù)。這是數(shù)據(jù)類型靈活的后果——你需要確保每個(gè)變量只有一種數(shù)據(jù)類型,并行處理可能會(huì)在這里出現(xiàn)問題。
相比之下,您常用的網(wǎng)絡(luò)瀏覽器可以同時(shí)運(yùn)行十幾個(gè)不同的線程。還有其他因素。
但歸根結(jié)底,這些速度問題都不是關(guān)鍵問題。計(jì)算機(jī)和服務(wù)器已經(jīng)變得如此便宜,所以無論它們有多慢,都只是亞秒級(jí)的差距。最終用戶不太關(guān)心他們的應(yīng)用程序是在0.001 秒還是0.01 秒內(nèi)加載。
范圍
一開始,它是動(dòng)態(tài)范圍的。這基本上意味著在計(jì)算表達(dá)式時(shí),編譯器首先搜索當(dāng)前塊,然后依次搜索所有調(diào)用函數(shù)。
動(dòng)態(tài)作用域的問題在于每個(gè)表達(dá)式都需要在每個(gè)可能的上下文中進(jìn)行測(cè)試——這很乏味。這就是為什么大多數(shù)現(xiàn)代編程語言都使用靜態(tài)作用域。
試圖過渡到靜態(tài)范圍,但搞砸了。一般來說,內(nèi)部作用域——比如函數(shù)內(nèi)的函數(shù)——可以看到和改變外部作用域。在,內(nèi)部作用域只能看到外部作用域,而不能改變它們。這可能會(huì)引起很多混亂。
雖然它非常靈活,但它的使用非常有限。只能是表達(dá)式 in,不能是語句。
另一方面,變量聲明和語句始終是語句。這意味著它不能用于他們。
表達(dá)式和語句之間的這種區(qū)別非常隨意,在其他語言中沒有出現(xiàn)。
空格使代碼更易讀,但更難維護(hù)。
空間
在,您可以使用空格和縮進(jìn)來表示不同級(jí)別的代碼。這讓代碼看起來更漂亮,更容易理解。
其他語言(如C++)更多地依賴大括號(hào)和分號(hào)。雖然這可能不夠美觀,對(duì)初學(xué)者不友好,但它使代碼更易于維護(hù)。這種方法更適合大型項(xiàng)目。
較新的語言如
解決這個(gè)問題:它們依賴空格,但為那些不想使用空格的人提供了另一種語法。
移動(dòng)開發(fā)
隨著我們目睹軟件行業(yè)從臺(tái)式機(jī)到智能手機(jī)的主流轉(zhuǎn)變,很明顯我們需要一種強(qiáng)大的語言來構(gòu)建移動(dòng)軟件。
但開發(fā)的移動(dòng)應(yīng)用程序并不多。這并不意味著它不能做到這一點(diǎn)——有一個(gè)名為 Kivy 的包可以做到這一點(diǎn)。
但它不是為移動(dòng)設(shè)備設(shè)計(jì)的。因此,即使開發(fā)人員可能會(huì)使用它來為基本任務(wù)生成可接受的結(jié)果,最好的方法是使用為移動(dòng)應(yīng)用程序開發(fā)而創(chuàng)建的語言。一些廣泛使用的移動(dòng)編程框架是,和。
需要明確的是,筆記本電腦和臺(tái)式電腦應(yīng)該會(huì)繼續(xù)存在多年。不過編程語言原理,既然移動(dòng)端的流量已經(jīng)超過桌面端,可以說光是學(xué)習(xí)還不足以成為有經(jīng)驗(yàn)的全能開發(fā)者。
運(yùn)行時(shí)錯(cuò)誤
腳本沒有被編譯然后執(zhí)行。相反,它每次執(zhí)行時(shí)都會(huì)編譯,因此任何代碼錯(cuò)誤都會(huì)在運(yùn)行時(shí)顯示出來。這會(huì)導(dǎo)致性能下降、更耗時(shí)和大量測(cè)試。
這對(duì)初學(xué)者非常有用,因?yàn)闇y(cè)試可以教會(huì)他們很多東西。但是對(duì)于有經(jīng)驗(yàn)的開發(fā)人員來說,調(diào)試一個(gè)復(fù)雜的程序會(huì)讓他們感到困惑。這個(gè)缺陷是設(shè)置時(shí)間戳的最大因素。
未來可以替換哪種語言?
編程語言市場(chǎng)出現(xiàn)了一些新的競(jìng)爭(zhēng)對(duì)手:
雖然市場(chǎng)上還有其他語言選擇,但 Rust、Go 和成功彌補(bǔ)了.所有這些語言在新興技術(shù)領(lǐng)域,尤其是人工智能領(lǐng)域都有突出表現(xiàn)。雖然他們的市場(chǎng)份額仍然很小(從標(biāo)簽數(shù)量上反映出來),但他們的趨勢(shì)很明顯:一路攀升。
各種編程語言上的標(biāo)簽數(shù)量快照
.
鑒于當(dāng)今語言無處不在,這些新語言中的任何一種都肯定需要五年甚至十年的時(shí)間來取代它。
仍然很難說獲勝者會(huì)是哪種語言,Rust、Go 或未來的某種新語言。
但考慮到架構(gòu)中的基本性能問題,總會(huì)有某種語言占據(jù)一席之地。
原文鏈接: