Front-End Frameworks: Comparação RealWord com Benchmarks ...
哪種編程語(yǔ)言將來(lái)會(huì)對(duì)編碼產(chǎn)生最大的影響?這取決于你問(wèn)誰(shuí)。事情一直在變化。某些語(yǔ)言(如Java和R)仍然處于最前沿。僅僅幾年前,其他流行語(yǔ)言就已經(jīng)降溫了,它們被新興的替代方法吸引了大家的注意,這些替代方法使解決當(dāng)今企業(yè)編程向?qū)媾R的各種問(wèn)題變得更加容易。
有些事情已經(jīng)改變了,有些沒(méi)有改變。顯而易見(jiàn)的是:自動(dòng)化的工作流程仍然是語(yǔ)言創(chuàng)建者的最大職責(zé)。這是我們(至少目前)將定義編碼未來(lái)的頂級(jí)編程語(yǔ)言列表。
1.Ethereum
許多人認(rèn)為Ethereum和比特幣是貨幣,您用來(lái)購(gòu)買(mǎi)咖啡的東西或可能是非法的東西。但是,如果您消除了炒作和貪婪,就會(huì)埋藏在其中的一種編程語(yǔ)言可以定義要進(jìn)行的相當(dāng)復(fù)雜的計(jì)算。Ethereum語(yǔ)言甚至是圖靈完整的,至少如果您接受節(jié)點(diǎn)可能對(duì)代碼運(yùn)行多長(zhǎng)時(shí)間設(shè)置時(shí)間限制的話(huà)。
Ethereum的創(chuàng)造者認(rèn)為,每個(gè)花費(fèi)硬幣的人可能都想做更多的事情,而不僅僅是將財(cái)富從所有者A轉(zhuǎn)移到所有者B。他們認(rèn)為,當(dāng)事方可能希望構(gòu)建詳盡的合同,其中包含有關(guān)何時(shí)或何時(shí)轉(zhuǎn)移或轉(zhuǎn)移財(cái)富的條款,警告和條件。不動(dòng),而這些將以計(jì)算機(jī)語(yǔ)言表達(dá)。
例如,30年的抵押可以表示為計(jì)算每月還款額并僅在完成360次還款后才除去留置權(quán)的代碼。這些用代碼編寫(xiě)的合同是經(jīng)濟(jì)和商業(yè)的未來(lái),并且從現(xiàn)在開(kāi)始理解語(yǔ)言對(duì)于進(jìn)行交易至關(guān)重要。
要點(diǎn):與貨幣系統(tǒng)緊密集成,這需要高度重視正確性和認(rèn)證。
頭痛:與貨幣體系緊密結(jié)合,帶來(lái)監(jiān)管和偏執(zhí)狂。
2. React JSX
從技術(shù)上講,React Web應(yīng)用程序是用JavaScript編寫(xiě)的,但是許多模板都是用JSX構(gòu)造的,這是JavaScript和HTML的怪異混合,無(wú)疑是由非常熟悉這兩者的人創(chuàng)建的。
省略了一些煩人的標(biāo)點(diǎn)符號(hào)以節(jié)省時(shí)間,并且簡(jiǎn)化了其他結(jié)構(gòu)。但是,如果您打算在React或其同類(lèi)產(chǎn)品中進(jìn)行編程(例如Vue或也使用JSX的下一代Web應(yīng)用程序之一),則需要掌握這種混合方式。
這意味著知道何時(shí)講JavaScript和何時(shí)鍵入HTML。它是如此不同,以至于它也可能是另一種語(yǔ)言。
亮點(diǎn):速記使您可以精心制作互連的Web應(yīng)用程序。
頭痛:它既不是HTML也不是JavaScript,因此您會(huì)經(jīng)常感到困惑。
3. TensorFlow
機(jī)器學(xué)習(xí)無(wú)處不在,并且TensorFlow是探索它的主要開(kāi)源軟件包之一。從技術(shù)上講,TensorFlow是用C ++,Python和CUDA語(yǔ)言混合編寫(xiě)的。但是您編寫(xiě)的代碼將主要包含對(duì)Tensor Flow API的調(diào)用,并且可以使用大多數(shù)主要語(yǔ)言(包括Java和JavaScript)來(lái)完成。
您可以選擇自己喜歡的語(yǔ)法和編譯器,但是困難的部分將是教您的代碼從數(shù)據(jù)中學(xué)習(xí)。您必須了解如何構(gòu)建模型,并且代碼將反映您對(duì)系統(tǒng)的期望。了解API的這種結(jié)構(gòu)是創(chuàng)建天才的第一步。
亮點(diǎn):觸手可及的強(qiáng)大實(shí)力可以解決AI中的難題。
頭痛:結(jié)果通常是令人毛骨悚然的黑匣子,您可能對(duì)它們的作用感到困惑。
4. TypeScript
它看起來(lái)像JavaScript,并且旨在與瀏覽器和Node.js應(yīng)用程序中的JavaScript具有幾乎相同的功能。在編譯階段,編譯器甚至將其轉(zhuǎn)換為JavaScript。那為什么要打擾呢?
當(dāng)沒(méi)有操作導(dǎo)致未定義的行為時(shí),TypeScript提供了一種類(lèi)型安全性,這種安全性使許多程序員感到滿(mǎn)意,這種類(lèi)型使Java代碼變得更加整潔和定義更好。開(kāi)發(fā)人員在這里對(duì)JavaScript的更改不多;他們只是增加了一層,以確保數(shù)據(jù)類(lèi)型對(duì)齊,這樣您就可以在代碼運(yùn)行之前捕獲一些最簡(jiǎn)單的錯(cuò)誤。
它是流行的Angular框架的基礎(chǔ),并且越來(lái)越流行,因?yàn)槟ǔ?梢詫⑵浞诺叫枰狫avaScript的任何地方。
亮點(diǎn):轉(zhuǎn)換為JavaScript,使其廣泛適用。
頭痛:并不是每個(gè)人都看到了創(chuàng)建良好類(lèi)型的代碼所需的額外工作的美。
5. R
“大數(shù)據(jù)”一詞可能不會(huì)像幾年前那樣在銷(xiāo)售報(bào)告中引起人們的興奮,但是對(duì)統(tǒng)計(jì)數(shù)據(jù)的需求繼續(xù)主導(dǎo)著許多業(yè)務(wù)決策。如果有的話(huà),現(xiàn)在的實(shí)踐比以往任何時(shí)候都更加集成,這使得R(一種用于統(tǒng)計(jì)分析的語(yǔ)言)比以往任何時(shí)候都更加重要。
R是一種由統(tǒng)計(jì)學(xué)家和科學(xué)家設(shè)計(jì)的編程語(yǔ)言,旨在簡(jiǎn)化他們的工作。它具有數(shù)據(jù)分析中使用的大多數(shù)標(biāo)準(zhǔn)功能,并且許多最有用的統(tǒng)計(jì)算法已經(jīng)實(shí)現(xiàn)為自由分發(fā)的庫(kù)。數(shù)據(jù)科學(xué)家要做數(shù)據(jù)驅(qū)動(dòng)型科學(xué)所需的大部分內(nèi)容。
盡管它是用于創(chuàng)建任意函數(shù)的編程語(yǔ)言,但是許多開(kāi)發(fā)人員在IDE中使用R作為高性能的暫存器,用于處理數(shù)據(jù)。這使其成為電子表格和圖形計(jì)算器之間的混合體。
RStudio和RCommander是兩個(gè)流行的前端,可讓您加載數(shù)據(jù),修改數(shù)據(jù)并將其作為圖表和表格吐出。他們使它不再是一種編譯運(yùn)行語(yǔ)言,而更多地是一個(gè)可以在其中進(jìn)行工作的交互式世界。
重點(diǎn):用于選擇數(shù)據(jù)子集并對(duì)其進(jìn)行分析的巧妙表達(dá)式。
頭痛:主要針對(duì)臺(tái)式機(jī),而不是Hadoop等技術(shù)主導(dǎo)的大數(shù)據(jù)世界。
6. Java 8
幾年前,Java團(tuán)隊(duì)環(huán)顧了Java虛擬機(jī)(JVM)的世界,發(fā)現(xiàn)許多程序員使用JVM不僅可以運(yùn)行Java。適應(yīng)這種趨勢(shì)的方法之一是通過(guò)在Scala中編寫(xiě)代碼,該代碼將功能性方法的所有功能和規(guī)則與選項(xiàng)結(jié)合在一起,以鏈接到浮動(dòng)在網(wǎng)絡(luò)上的數(shù)十億Java歸檔文件中。
現(xiàn)在,Java程序員無(wú)需切換到單獨(dú)的語(yǔ)言即可獲得功能解決方案的所有優(yōu)點(diǎn)。 Java 8是很好的舊Java,但是通過(guò)額外的功能機(jī)制又可以使您的代碼并行化,從而再次使Java 8成為新的。
當(dāng)然,您不必使用并行性。您可以堅(jiān)持使用舊的Java,因?yàn)樗匀挥行?。但是,如果您不使用較新的功能,則將失去為JVM提供更多結(jié)構(gòu)來(lái)優(yōu)化代碼執(zhí)行的機(jī)會(huì)。您將錯(cuò)失從功能上進(jìn)行思考并編寫(xiě)更簡(jiǎn)潔,更快速且錯(cuò)誤更少的代碼的機(jī)會(huì)。
重點(diǎn):Lambda表達(dá)式和并發(fā)代碼。
頭痛:feeling不休的感覺(jué)使開(kāi)發(fā)人員希望雙手撐起來(lái)并使用Scala。
7.Go
Go已針對(duì)現(xiàn)代世界進(jìn)行了調(diào)整,在現(xiàn)代世界中,大部分情報(bào)都位于服務(wù)器上,這些服務(wù)器雜亂了數(shù)千個(gè)發(fā)出數(shù)百萬(wàn)個(gè)API調(diào)用的客戶(hù)端。它的意思是快速,輕便,它具有足夠的功能來(lái)完成這項(xiàng)工作,而不會(huì)妨礙其他選擇。
語(yǔ)言沒(méi)什么太多,這就是重點(diǎn)。 Google想要一個(gè)根本上是基本的解決方案。正如一位創(chuàng)造者所說(shuō),它拋棄了其他語(yǔ)言中發(fā)現(xiàn)的許多更聰明的想法,并保持了足夠的準(zhǔn)確性,“足以使一個(gè)程序員牢牢抓住”。
Go中沒(méi)有復(fù)雜的抽象或聰明的元編程結(jié)構(gòu)-只是簡(jiǎn)單語(yǔ)法中指定的最重要的功能。
這可以使團(tuán)隊(duì)中的每個(gè)人都更輕松,因?yàn)楫?dāng)其他人從語(yǔ)言規(guī)范的更深層次中挖掘出一個(gè)整潔的主意時(shí),無(wú)需擔(dān)心。
亮點(diǎn):只是一種用于處理數(shù)據(jù)的簡(jiǎn)潔明了的語(yǔ)言。
頭痛:有時(shí)您需要一個(gè)不在這里的聰明功能。
8. CUDA
最初,視頻卡只是為游戲玩家生成炫目的圖像的東西,是用于處理數(shù)百萬(wàn)個(gè)三角形的專(zhuān)用硅片,因此人們可以幻想數(shù)十種精心制作的武器,以欺騙死亡,面對(duì)危險(xiǎn)以及炸毀死亡和危險(xiǎn)。
但是在這條線(xiàn)上的某個(gè)地方,一些聰明的程序員在后臺(tái)進(jìn)行了觀(guān)察,并看到了通過(guò)釋放游戲精心設(shè)計(jì)的計(jì)算火力來(lái)加速其代碼的機(jī)會(huì)。
如今,許多視頻卡可以模擬復(fù)雜的科學(xué)模型或運(yùn)行復(fù)雜的AI算法。如果您對(duì)計(jì)算的需求很大,那么CUDA語(yǔ)言是釋放圖形處理單元(GPU)功能的一種好方法,可以殺死僵尸或機(jī)器人以外的其他方式工作。您甚至可以在云中租用它們的機(jī)架來(lái)解決您的問(wèn)題。
使用CUDA的主要挑戰(zhàn)在于學(xué)習(xí)識(shí)別算法的并行部分。找到它們后,您可以設(shè)置CUDA代碼,以使用視頻卡的所有固有并行功能遍歷這些部分。
有些工作(例如開(kāi)采比特幣)非常簡(jiǎn)單,但其他挑戰(zhàn)(例如分類(lèi)和分子動(dòng)力學(xué))可能需要更多思考??茖W(xué)家喜歡將CUDA代碼用于大型多維仿真。
亮點(diǎn):非??斓男阅?,至少對(duì)于并行代碼而言。
頭痛:確定最容易并行運(yùn)行的代碼部分并不總是那么簡(jiǎn)單。
9. YAML
如果您問(wèn)大多數(shù)程序員,他們會(huì)選擇一種編程語(yǔ)言。這是一種標(biāo)記語(yǔ)言,然后“又是另一種”。但是,隨著更多的代碼層由這些曾經(jīng)很瑣碎的文件中指定的參數(shù)控制,您會(huì)在更多地方找到以JSON格式格式化的YAML配置文件及其表親。
它們可能是編程游戲的典當(dāng),但是任何試圖使其N(xiāo)ode.js堆棧做正確的事情的人都將花費(fèi)時(shí)間為他們的YAML文件中的按鍵苦惱。這項(xiàng)工作可能不算是完整的編程,但是這些字符的放置仍然可以使您拔出同樣多的頭發(fā)。
重點(diǎn):該格式相對(duì)沒(méi)有標(biāo)點(diǎn)符號(hào),但足夠豐富,可以表示許多層參數(shù)。
頭痛:除了基本格式外,結(jié)構(gòu)和約定也可能千差萬(wàn)別。
10. DSL
DSL(首字母縮寫(xiě)詞)用于指電話(huà)公司的Internet服務(wù)。但是對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),它的意思是“特定領(lǐng)域的語(yǔ)言”,這是一個(gè)普遍的,非特定性的術(shù)語(yǔ),出現(xiàn)在各地。皺紋是字母不指一種特定的語(yǔ)言來(lái)學(xué)習(xí)和掌握。
DSL代表一種設(shè)計(jì)理念,即一種語(yǔ)言應(yīng)針對(duì)手頭的工作進(jìn)行量身定制,而不是嘗試成為一種可在任何地方使用的通用語(yǔ)言。因此,用于劇院照明控制器的語(yǔ)言可能包含用于打開(kāi)和關(guān)閉燈光的關(guān)鍵字,但沒(méi)有其他功能可用于將數(shù)據(jù)保存到文件或連接到LAN。專(zhuān)為運(yùn)營(yíng)鋼鐵廠(chǎng)而設(shè)計(jì)的另一種語(yǔ)言可能與高爐相接,但與某些用于將坐標(biāo)轉(zhuǎn)換為地圖的API無(wú)關(guān)。
這些DSL的出現(xiàn)反映了設(shè)計(jì)人員如何意識(shí)到用戶(hù)需求對(duì)于一些菜單,復(fù)選框或命令行參數(shù)而言過(guò)于復(fù)雜。 DSL用戶(hù)希望通過(guò)在共享特定于域的數(shù)據(jù)的同時(shí)將特定于域的關(guān)鍵字串在一起來(lái)多行說(shuō)明他們的需求。
each,每個(gè)DSL都不一樣,這很重要。共享的首字母縮寫(xiě)并沒(méi)有使DSL邏輯更容易被吸收。您無(wú)法學(xué)習(xí)一般的DSL認(rèn)證,但是您應(yīng)該準(zhǔn)備越來(lái)越頻繁地看到它們。
亮點(diǎn):為許多應(yīng)用程序帶來(lái)真正的力量。
頭痛:與各個(gè)領(lǐng)域不同。
持續(xù)關(guān)注工作流程
尋找計(jì)算機(jī)翻新商店,醫(yī)院和汽車(chē)的巧妙方法的程序員也在努力重新設(shè)計(jì)自己的工作。他們通過(guò)增加更多的智能層來(lái)加快創(chuàng)建軟件的速度,以便工具更快更聰明地發(fā)現(xiàn)錯(cuò)誤。
最新的計(jì)算機(jī)語(yǔ)言使用起來(lái)更快,因?yàn)閮?nèi)置的智能功能使它們可以幫助程序員以更少的擊鍵次數(shù)執(zhí)行更多操作。他們通常也提供較少的錯(cuò)誤。
較新的方法包括更多的結(jié)構(gòu)和更多的抽象性,從而使語(yǔ)言的勇氣可以完成程序員過(guò)去必須自己完成的工作。這些自動(dòng)化功能為開(kāi)發(fā)人員提供了更多的精力來(lái)專(zhuān)注于更大的問(wèn)題。在許多情況下,它們還可以產(chǎn)生更好的性能,因?yàn)樽詣?dòng)化機(jī)制能夠更好地找到效率和并行計(jì)算的機(jī)會(huì),同時(shí)消除了一些導(dǎo)致錯(cuò)誤的簡(jiǎn)單錯(cuò)誤。
這種自動(dòng)化中的一些圍繞著從實(shí)驗(yàn)室涌現(xiàn)到通用的體系結(jié)構(gòu)和構(gòu)想。從事人工智能(AI)工作的程序員曾經(jīng)用自己喜歡的語(yǔ)言編寫(xiě)代碼?,F(xiàn)在,像TensorFlow這樣的某些庫(kù)已經(jīng)足夠穩(wěn)定以至于可以廣泛部署,并且它們的API幾乎就像是一種語(yǔ)言。
程序員專(zhuān)注于將這些API調(diào)用串聯(lián)在一起,其方式與將循環(huán)或函數(shù)串聯(lián)在一起的方式幾乎相同。
此列表中的某些所謂語(yǔ)言可能不被視為官方計(jì)算機(jī)語(yǔ)言。程序員通常會(huì)區(qū)分使他們能夠表達(dá)任意算法的完整計(jì)算機(jī)語(yǔ)言(通常被標(biāo)記為圖靈完整)和較少的字符集,從而使他們僅拼出幾個(gè)參數(shù)或一些配置細(xì)節(jié)。
但是,這種區(qū)分可能是哲學(xué)上的,并且可能僅對(duì)大學(xué)討論和酒吧辯論很重要。因?yàn)橛袝r(shí)候阻止您回家的唯一原因就是正確的角色是否在正確的位置。敲擊頭發(fā)以嘗試使所有事情正確執(zhí)行時(shí),擊鍵是否表達(dá)某種值得被稱(chēng)為完整語(yǔ)言的語(yǔ)法并不重要。
這10種語(yǔ)言正在改變我們告訴計(jì)算機(jī)做什么的方式。盡管其中一些語(yǔ)言是新語(yǔ)言,但其他語(yǔ)言已經(jīng)非常流行。盡管我們有時(shí)會(huì)這樣想,但有些語(yǔ)言根本不是真正的語(yǔ)言。
事半功倍
清單上的項(xiàng)目沒(méi)有太多共通之處,除了程序員可能正在慢慢找到使每種鍵向下傾斜這些語(yǔ)言并使所生成的代碼更簡(jiǎn)潔,功能更強(qiáng)大的方法之外。 在某些情況下,這些語(yǔ)言充當(dāng)了通往諸如AI或大規(guī)模并行算法之類(lèi)的全新選擇的門(mén)戶(hù)。