国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢(xún) 在線咨詢(xún)
18143453325 在線咨詢(xún)
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)絡(luò)營(yíng)銷(xiāo) > 為什么現(xiàn)在會(huì)有這么多種編程語(yǔ)言?

為什么現(xiàn)在會(huì)有這么多種編程語(yǔ)言?

時(shí)間:2022-05-25 19:21:02 | 來(lái)源:網(wǎng)絡(luò)營(yíng)銷(xiāo)

時(shí)間:2022-05-25 19:21:02 來(lái)源:網(wǎng)絡(luò)營(yíng)銷(xiāo)

21世紀(jì),計(jì)算機(jī)的應(yīng)用越來(lái)越多,為了適應(yīng)各種使用場(chǎng)景,于是誕生了各種語(yǔ)言,不僅語(yǔ)言是多樣的,每種語(yǔ)言下面都有不同的開(kāi)發(fā)框架,框架也是多樣的。有時(shí)候?yàn)榱诵阅?,可能?huì)選擇編譯型語(yǔ)言,為了寫(xiě)得爽可能會(huì)選擇解析型語(yǔ)言,自己寫(xiě)點(diǎn)小應(yīng)用可能會(huì)選擇輕量級(jí)框架,對(duì)于大型項(xiàng)目,用笨重一點(diǎn)的框架也無(wú)所謂。

編程語(yǔ)言是靠“適者生存,優(yōu)勝劣汰”的“編程語(yǔ)言進(jìn)化論”來(lái)發(fā)展的,也許A語(yǔ)言的創(chuàng)造初衷也是為了打造適應(yīng)性超強(qiáng)的萬(wàn)能語(yǔ)言,但后來(lái)在實(shí)際過(guò)程中,大家會(huì)發(fā)現(xiàn)這門(mén)語(yǔ)言在B場(chǎng)景下用得很好,放到C場(chǎng)景下使用就會(huì)很蛋疼,于是這門(mén)語(yǔ)言在B場(chǎng)景下的適應(yīng)性會(huì)越來(lái)越完善,大家都熱衷于完善它在B場(chǎng)景下的功能而忽略了C場(chǎng)景,于是C場(chǎng)景相應(yīng)的功能由于沒(méi)有人維護(hù)而漸漸退化。這時(shí)候,有人想兼顧A語(yǔ)言在B場(chǎng)景下的優(yōu)秀特性,又想在C場(chǎng)景中發(fā)揮作用,于是它創(chuàng)造了D語(yǔ)言。后來(lái)有人覺(jué)得D語(yǔ)言還不夠好,于是又有了E語(yǔ)言、F語(yǔ)言,于是,“編程語(yǔ)言多樣性”就這么來(lái)了。

編程語(yǔ)言如此之多,實(shí)際上是這個(gè)世界上的開(kāi)發(fā)者共同努力的成果,大家都在嘗試把各門(mén)語(yǔ)言的優(yōu)秀特性綜合,不斷地產(chǎn)生優(yōu)秀技術(shù)來(lái)淘汰掉舊技術(shù),是自然選擇演變而來(lái)的。你想當(dāng)救世主,創(chuàng)造一門(mén)自以為是全世界最優(yōu)秀的語(yǔ)言,實(shí)際上也只是為了編程語(yǔ)言的進(jìn)化共享了一份力量而已。

一、編程語(yǔ)言歷史發(fā)展的多樣性基因

在計(jì)算機(jī)還全都是些龐然大物的石器時(shí)代,寫(xiě)程序是靠「機(jī)器語(yǔ)言」。雖然名字叫做「語(yǔ)言」,實(shí)際上用到的就真的只有兩個(gè)數(shù)字0和1(考慮到三進(jìn)制計(jì)算機(jī)[1]的話,也許還要算上“-1”)而已。一些特定的數(shù)字組合,對(duì)于計(jì)算機(jī)來(lái)說(shuō)有特定的意義,會(huì)讓計(jì)算機(jī)做出特定的動(dòng)作——其實(shí)我們甚至不該叫它們「數(shù)字」,因?yàn)樗鼈儾⒉淮砣魏巍笖?shù)量」,而是代表「模式」(pattern)的信號(hào)。這是什么意思呢?

就好比你伸出一只手去按鋼琴鍵盤(pán)的同一部分,縮起來(lái)的指頭記作0,伸開(kāi)來(lái)的指頭記作1,01000和11110按出來(lái)的聲音是不一樣的,計(jì)算機(jī)接受的數(shù)字組合與之類(lèi)似。01000000這個(gè)指令輸入一塊小芯片的時(shí)候,芯片里面有八坨晶體管組成的小裝置被「按下」了,其中第二個(gè)被通上高電壓,另外七個(gè)則是低電壓,而這個(gè)組合會(huì)繼而引發(fā)更多的、由芯片工程師所預(yù)先設(shè)計(jì)的一系列連鎖反應(yīng)。無(wú)數(shù)這樣的模式數(shù)字接踵而至,才最終讓你面前的屏幕上出現(xiàn)一些能被人理解的圖案來(lái)。

給計(jì)算機(jī)輸入這種相當(dāng)于「命令」的數(shù)字——稱(chēng)為「指令」——來(lái)讓它做一些事情,包括處理其他的數(shù)字(不管那些數(shù)字是真正代表數(shù)量的數(shù),還是另一些代表指令的模式),就是編程的本質(zhì)活動(dòng)。

用純數(shù)字的機(jī)器語(yǔ)言編程的難度可想而知,所以從數(shù)字到助記符號(hào)的轉(zhuǎn)譯很快隨之出現(xiàn),稱(chēng)作匯編語(yǔ)言。比如若是一組數(shù)字 0010 0000 可以讓芯片把內(nèi)部的一個(gè)存儲(chǔ)單位,稱(chēng)作「寄存器 X」,加上一個(gè)值 Y,那么不妨就把這組數(shù)字和助記符「ADD」對(duì)應(yīng)起來(lái),上面的指令就可以寫(xiě)作「ADD X, Y」這樣。一條條類(lèi)似的指令寫(xiě)成一串,就是一個(gè)對(duì)于程序的描述。相對(duì)于純數(shù)字來(lái)說(shuō),這是個(gè)質(zhì)的飛躍——終于不必去扳開(kāi)關(guān)了不是嗎?而這樣的一串字符,可以由專(zhuān)用的小程序來(lái)「翻譯」成二進(jìn)制的機(jī)器碼,也就是真正可以輸入處理器去按下晶體管的程序電子信號(hào)。當(dāng)然,每種處理器的匯編語(yǔ)言仍舊是不同的(具體可查看億企邦《計(jì)算機(jī)語(yǔ)言的發(fā)展簡(jiǎn)史》的相關(guān)介紹)。

機(jī)器語(yǔ)言、匯編語(yǔ)言的優(yōu)點(diǎn)在于,每一條指令都幾乎對(duì)應(yīng)于芯片能做的一件事,比如一條指令把一個(gè)數(shù)字從內(nèi)存轉(zhuǎn)入寄存器,另一條指令給它加上一,第三條指令將它寫(xiě)回內(nèi)存去——直接對(duì)于一塊芯片下命令,效率非常高。相應(yīng)的缺點(diǎn)則是,如果你只是想把一個(gè)數(shù)字加一,卻每次都要連續(xù)寫(xiě)三條指令,時(shí)間一長(zhǎng)非常痛苦。而且既然不同芯片支持的指令集不同,就意味著這塊芯片上需要三條命令完成的事情,另一塊芯片可能需要不太一樣的五條命令。假如能將一部分固定出現(xiàn)的操作,像連續(xù)技一樣一次性施放,每次只需要打一個(gè)指令,卻能夠在不同結(jié)構(gòu)的芯片上都做同樣的事該有多好?換句話說(shuō),如果能有一種更傾向于描述需要解決的問(wèn)題(給一個(gè)數(shù)字加一)而不是描述計(jì)算機(jī)具體進(jìn)行何種操作(讀數(shù),加數(shù),寫(xiě)數(shù))的語(yǔ)言,來(lái)封裝那些不需要關(guān)心的細(xì)節(jié),把細(xì)小步驟想要達(dá)成的意圖抽象出來(lái),該有多好?

所謂「高級(jí)」計(jì)算機(jī)語(yǔ)言就是為了這一目的而出現(xiàn)的。最古老的高級(jí)語(yǔ)言有FORTRAN、ALGOL和COBOL,以及一種同樣古老但是來(lái)源迥異的LISP(嚴(yán)格來(lái)說(shuō),LISP 是先作為一種形式語(yǔ)言發(fā)明出來(lái),繼而人們發(fā)現(xiàn)它可以用匯編語(yǔ)言轉(zhuǎn)寫(xiě)給機(jī)器執(zhí)行,后來(lái)甚至有專(zhuān)門(mén)運(yùn)行LISTP的機(jī)器出現(xiàn)),這些都是二十世紀(jì)五六十年代出現(xiàn)的語(yǔ)言。

所以你可以說(shuō)目前流行的一切計(jì)算機(jī)語(yǔ)言,幾乎全都是上述四種古老語(yǔ)言的綜合演進(jìn),而且如果看看 TIOBE 的流行語(yǔ)言榜,你會(huì)發(fā)現(xiàn)這四種語(yǔ)言都好端端地活在它的徒子徒孫中間,LISP甚至名列第十五,F(xiàn)ORTRAN、COBOL也都沒(méi)有掉出前五十。就如同芯片從一開(kāi)始就有很多種類(lèi),這些彼此不盡相同的高級(jí)語(yǔ)言也都是幾乎同時(shí)出現(xiàn)——一定要追尋個(gè)中原因的話,也許就是「自由市場(chǎng)經(jīng)濟(jì)」吧,每個(gè)人都有可能(也有資源)去自由地按照自己的想法開(kāi)發(fā)一種語(yǔ)言,不會(huì)有(也不應(yīng)該有)外界的權(quán)威從一開(kāi)始就去限制、整合它們的差異。

六十年代到七十年代,人們開(kāi)始將這幾種當(dāng)時(shí)還很年輕的、主要針對(duì)科研(除COBOL是針對(duì)商業(yè))領(lǐng)域的計(jì)算機(jī)語(yǔ)言加以修飾、擴(kuò)展和融合。其動(dòng)機(jī)和幅度,主要取決于程序員的實(shí)際需求。與當(dāng)初「不想記住數(shù)字」導(dǎo)致匯編語(yǔ)言的出現(xiàn)、「不想重復(fù)勞動(dòng)」導(dǎo)致宏(macro) / 過(guò)程(procedure)的出現(xiàn)類(lèi)似,因?yàn)椤赶胍褦?shù)據(jù)和操作數(shù)據(jù)的動(dòng)作組織到一起」,導(dǎo)致語(yǔ)言增添原生支持物件導(dǎo)向(object orientation)的數(shù)據(jù)類(lèi)型和語(yǔ)法;「能方便地把一小塊功能隔離/獨(dú)立出來(lái),便于維護(hù)/分享使用」的需求,導(dǎo)致語(yǔ)言的模塊化支持(比如Python的import);「方便干凈地在局部處理突發(fā)意外狀況」的需求,導(dǎo)致異常處理(try…catch…finally)機(jī)制的出現(xiàn);「免于手動(dòng)管理內(nèi)存」的需求,導(dǎo)致垃圾收集的出現(xiàn);「將運(yùn)算(computation)抽象出來(lái)」的需求,導(dǎo)致許多語(yǔ)言開(kāi)始將函數(shù)視為類(lèi)型系統(tǒng)的一等公民;「一件事做到一半時(shí)可以跳開(kāi)去做另一件事然后還能回來(lái)」的需求,導(dǎo)致協(xié)程(coroutine)的發(fā)明……,當(dāng)然,并不都是所有的語(yǔ)言特性都是以語(yǔ)言使用者的需求為本,比如C就是這樣一個(gè)例子——它的若干設(shè)計(jì)最開(kāi)始只是為了能快速方便地在不同結(jié)構(gòu)的計(jì)算機(jī)上寫(xiě)出它的編譯器來(lái);還有些語(yǔ)言做的一些嘗試完全就是「想看看這樣有什么效果」而已??偠灾?,那是個(gè)不斷摸索的時(shí)代,因?yàn)樵S多事情都沒(méi)有人做過(guò),所以大家也不知道怎么做才算好。

后來(lái)計(jì)算機(jī)逐步小型化并變得廉價(jià),應(yīng)用范圍大幅度擴(kuò)展到各種產(chǎn)業(yè)。工程方面不斷有新的應(yīng)用實(shí)踐,也會(huì)發(fā)現(xiàn)新的可以偷懶 / 改進(jìn)之處,從而產(chǎn)生新的語(yǔ)言特性需求。這種進(jìn)程如此之快,語(yǔ)言設(shè)計(jì)者們不可能一下子追蹤、匯總所有的需求,總要有所側(cè)重,好在此時(shí)語(yǔ)言的種種可能特性都差不多嘗試過(guò)一遍了,所以新發(fā)明的語(yǔ)言往往會(huì)側(cè)重于一種特定的方法、制作特定的語(yǔ)言功能,來(lái)使得編寫(xiě)某種特定形式的程序特別便利。這就是編程的所謂「范式(paradigm)」。幾乎可以說(shuō),許多現(xiàn)今很流行的語(yǔ)言從一開(kāi)始的設(shè)計(jì)目標(biāo),都是支持一種或幾種主要的范式,因?yàn)樵S多設(shè)計(jì)者的最初目的僅僅是想要滿足一個(gè)小圈子,甚至就是他自己,在某個(gè)領(lǐng)域(domain)的需要,而無(wú)法預(yù)見(jiàn)到它日后的走紅。除此之外,語(yǔ)言設(shè)計(jì)者對(duì)于代碼的態(tài)度也是一個(gè)決定因素,比如強(qiáng)調(diào)代碼應(yīng)該「易讀」、「好維護(hù)」呢,還是「易寫(xiě)」、「好編譯」?不同的選擇會(huì)催生完全不同的兩種語(yǔ)言。

于是接下來(lái)的二十年間涌現(xiàn)的語(yǔ)言大都個(gè)性鮮明,比如同樣作為教學(xué)語(yǔ)言出現(xiàn)的 LOGO 和 BASIC 彼此大相徑庭——Apple II 計(jì)算機(jī)上面同時(shí)有兩種語(yǔ)言、并且可以在兩種語(yǔ)言之間切換對(duì)我來(lái)說(shuō)是最初的「原來(lái)程序語(yǔ)言可以有思路完全不同的很多種」之啟蒙——而感謝此前的多年試錯(cuò),許多語(yǔ)言都學(xué)會(huì)了遵循著一組特定的準(zhǔn)則(principle)來(lái)設(shè)計(jì),比如著名的 The Zen of Python??膳c此同時(shí)也不乏有巨匠試圖將語(yǔ)言做得大而全,填入很多特性,支持盡可能多的范式,但這種語(yǔ)言也因此而變得畸形而難以駕馭,到最后連他自己都說(shuō),「there is a much smaller and cleaner language struggling to get out」。而最終在語(yǔ)言進(jìn)化之中「勝出」的,并不是那些設(shè)計(jì)「完美」的語(yǔ)言。Dennis Ritchie 說(shuō) C 是「quirky, flawed, and an enormous success」,同樣的評(píng)語(yǔ)也可以用在許多其他語(yǔ)言上面,比如在統(tǒng)計(jì)學(xué)和生物信息學(xué)領(lǐng)域中大獲成功的 R。重要的是,這些語(yǔ)言都能解決領(lǐng)域內(nèi)的問(wèn)題。畢竟語(yǔ)言使用者的需求和,呃,計(jì)算機(jī)語(yǔ)言 connoisseur 們的著眼點(diǎn)完全不同。語(yǔ)言使用者會(huì)不惜(或者說(shuō)「無(wú)意識(shí)地」)使用最為愚蠢和骯臟的方式來(lái)使用一種編程語(yǔ)言,只要它能達(dá)到自己需要的效果;語(yǔ)言使用者也輕易不會(huì)切換到另一種不熟悉的語(yǔ)言,不論后者可能會(huì)在理論上帶來(lái)多少倍的好處。

這就觸及到了一個(gè)問(wèn)題:不同的計(jì)算機(jī)語(yǔ)言擁有不同的「?jìng)€(gè)性」,實(shí)際卻都是對(duì)于最底層 0 與 1 的抽象和封裝,只是方式與層級(jí)不一樣——但人類(lèi)對(duì)于這些方式與層級(jí)的選擇態(tài)度,是非常難以改變的。也就是說(shuō),如果把語(yǔ)言抽象和封裝的層級(jí)排成一列,那么每個(gè)人都能在這條線上找到自己的舒適區(qū)域(comfortable zone),呆在里面很舒服;抽象程度再高階一些就會(huì)嫌不自由,再低一點(diǎn)卻又覺(jué)得麻煩——如果這樣說(shuō)不夠直觀,那么不妨搬一個(gè)現(xiàn)成的例子:iOS 設(shè)備很好用,老太婆和小孩子都能搞定;但 Android 用戶(hù)會(huì)說(shuō)它不夠「開(kāi)放」(whatever that means),意思其實(shí)就是,認(rèn)為它封裝了太多東西,自己則希望掌控更多細(xì)節(jié);可是除了刷 ROM 之外,多數(shù) Android 用戶(hù)從未給自己的手機(jī)寫(xiě)過(guò)任何一個(gè)程序——即便他對(duì)于某個(gè)理想中的 app 應(yīng)該如何運(yùn)作有著非常高深的見(jiàn)解。

既然我們應(yīng)該允許人們自由決定使用哪一款電子產(chǎn)品,哪怕他們會(huì)因此展開(kāi)圣戰(zhàn)、互斥「腦殘」,那么容許甚至鼓勵(lì)不同風(fēng)格的編程語(yǔ)言并存,也就是順利成章的事情了。

二、為何會(huì)有如此之多的編程語(yǔ)言?

編程語(yǔ)言應(yīng)該是隨著進(jìn)步而越來(lái)越多,就像一棵樹(shù),樹(shù)根很少,越往上生長(zhǎng)樹(shù)枝就越多,這點(diǎn)也類(lèi)似于生物多樣性。

我們擁有如此之多的編程語(yǔ)言(不完全統(tǒng)計(jì),至少超過(guò)一千種以上),一個(gè)重要的原因,是因?yàn)槟壳皹I(yè)界發(fā)展雖然看似迅猛,但是軟件領(lǐng)域在過(guò)去幾十年里,其理論認(rèn)識(shí)和發(fā)展過(guò)程,依然遠(yuǎn)遠(yuǎn)比不上硬件方面的發(fā)展。

曾經(jīng)硬件生產(chǎn)是屬于智力密集型的,既需要尖端的知識(shí),特殊的設(shè)備,還需要復(fù)雜的過(guò)程才能生產(chǎn);如今,硬件生產(chǎn)依然需要特殊的設(shè)備、甚至更復(fù)雜的過(guò)程,但是整個(gè)流程已經(jīng)被高度自動(dòng)化、系統(tǒng)化、流程化。反過(guò)來(lái)看看軟件行業(yè),我們的程序員在增多,但是制造軟件的難度以及軟件本身的復(fù)雜度卻在急劇膨脹并不斷向著超出人們控制能力的方向發(fā)展。我們的理論卻幾近貧乏——雖然每年有牛毛一樣多的論文,可是“銀彈”還是從未被人真正找到。

這種矛盾,使得人們更加積極的尋求各種可能的解決方案。一個(gè)很重要的探索方向就是,是否能找到一個(gè)更好的編程語(yǔ)言,能夠解決目前所遇到的各種,或者至少一部分問(wèn)題呢?

于是大量的編程語(yǔ)言出現(xiàn)了。

從這個(gè)角度來(lái)看,編程語(yǔ)言的涌現(xiàn),是由于人們?cè)谲浖邪l(fā)(軟件的程序式語(yǔ)言表達(dá))過(guò)程中遇到了瓶頸,人們?cè)噲D突破這些瓶頸因而創(chuàng)造了大量的語(yǔ)言(具體可查看億企邦《盤(pán)點(diǎn)史上最奇葩的10大編程語(yǔ)言排行榜》的相關(guān)介紹)。

另一方面,編程語(yǔ)言大量涌現(xiàn),也和創(chuàng)造編程語(yǔ)言所需的成本較低有關(guān)。

盡管大部分程序員,對(duì)于“編程語(yǔ)言”抱有近乎崇拜的心態(tài),但真相是,創(chuàng)造一門(mén)編程語(yǔ)言并將其實(shí)現(xiàn)的難度,甚至低于其他一些業(yè)務(wù)型軟件。真的,古人云:“難者不會(huì),會(huì)者不難”,確實(shí)一針見(jiàn)血。如果你也愿意花費(fèi)時(shí)間去學(xué)習(xí),那么就會(huì)發(fā)現(xiàn),要實(shí)現(xiàn)一門(mén)現(xiàn)代編程語(yǔ)言,雖然談不上非常容易,但是也絕對(duì)不是太難——當(dāng)然,實(shí)現(xiàn)是一回事,實(shí)現(xiàn)得好又是另一回事了。能運(yùn)行不代表性能好。當(dāng)然,這又成了另外一個(gè)問(wèn)題的答案——由于性能糟糕,或者其他致命的缺陷,我們雖然有那么多的編程語(yǔ)言,但是真正實(shí)用并被廣泛應(yīng)用的卻寥寥無(wú)幾。

雖然有很多冠冕堂皇的理由,但是說(shuō)到底,即使是那些被萬(wàn)千程序員“膜拜”的“偉大的”編程語(yǔ)言,在被創(chuàng)造出來(lái)的時(shí)候,只不過(guò)是某個(gè)年輕的學(xué)生或者工程師腦子里的一個(gè)小小的想法,他們會(huì)說(shuō):“嘿,其實(shí)我覺(jué)得程序應(yīng)該這么表達(dá),你們看好了……”。然后日夜的工作之后,終于有了一個(gè)粗糙的語(yǔ)言輪廓;然后由于某些方面成功的設(shè)計(jì),確實(shí)得到了一些應(yīng)用;接下來(lái)在商業(yè)環(huán)境或者科研領(lǐng)域獲得自己的一席之地,并不斷向前發(fā)展。

總而言之,還是人們對(duì)編程語(yǔ)言的要求不同,才產(chǎn)生了這么多的編程語(yǔ)言。事情就這么簡(jiǎn)單!

億企邦點(diǎn)評(píng):

我們遇到了問(wèn)題,總是用程序員的思維期待著“救世主”式的編程語(yǔ)言,因此許多人發(fā)明了大量的編程語(yǔ)言,積極探索;另外,由于發(fā)明編程語(yǔ)言的難度并不如想象的高,因此也導(dǎo)致了編程語(yǔ)言的大量出現(xiàn)??上У氖?,大部分語(yǔ)言都有致命的缺陷,所以市場(chǎng)雖大,但優(yōu)質(zhì)商品卻依然寥寥無(wú)幾,探索還在繼續(xù)!

關(guān)鍵詞:語(yǔ)言

74
73
25
news

版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉