伴隨著去年元宇宙概念的走紅,Web 3已經(jīng)成為今年最火熱的賽道之一。客觀來(lái)講,Web3目前仍然處于早期發(fā)展階段,全新的方案、商業(yè)模式、新奇的概念和想法層出不窮。與此同時(shí),這個(gè)勢(shì)不可擋的行業(yè)創(chuàng)造了巨大的人才需求,掌握區(qū)塊鏈技術(shù)、懂得Web 3.0開(kāi)發(fā)的技術(shù)人員更是成為眾人追捧的香餑餑。
如果你是一名新晉的Web 3開(kāi)發(fā)人員,那么你將面臨眾多編程語(yǔ)言的抉擇問(wèn)題。Web3時(shí)代,哪些編程語(yǔ)言能夠脫穎而出?
Solidity:面向合約,生而強(qiáng)大
根據(jù)國(guó)外網(wǎng)站devjobsscanner今年發(fā)布的調(diào)查報(bào)告顯示,排名第一的編程語(yǔ)言是Solidity。作為一種面向合約的高級(jí)編程語(yǔ)言,Solidity主要用于在以太坊區(qū)塊鏈網(wǎng)絡(luò)上實(shí)現(xiàn)智能合約。
根據(jù)官網(wǎng)的介紹,Solidity借鑒了一些高級(jí)語(yǔ)言,比如Python和JavaScript的特性。它是一種靜態(tài)類型的語(yǔ)言,運(yùn)行在Ethereum虛擬機(jī)(EVM)之上。支持繼承、庫(kù)和用戶自定義類型以及其他功能。使用Solidity可以開(kāi)發(fā)類似于投票、眾籌、拍賣、多重簽名錢包等功能。
簡(jiǎn)而言之,Solidity就是為智能合約而生。此外,使用Solidity開(kāi)發(fā)智能合約還有以下兩大優(yōu)勢(shì):
·安全性
智能合約的代碼需要非常嚴(yán)謹(jǐn)和安全,Solidity作為靜態(tài)類型和強(qiáng)類型的語(yǔ)言,保證開(kāi)發(fā)者通過(guò)編譯能夠迅速捕捉到一些常見(jiàn)錯(cuò)誤,增強(qiáng)了語(yǔ)言的安全性。而諸如弱類型語(yǔ)言JavaScript,似乎并不能寫出足夠安全的代碼;而Java/C++等語(yǔ)言如果移植到區(qū)塊鏈上,可能會(huì)對(duì)系統(tǒng)造成較大的負(fù)擔(dān),因?yàn)檎麄€(gè)移植過(guò)程的工作量非常大。因此,小巧和專用是Solidity語(yǔ)言的優(yōu)勢(shì)。
·特殊支持
Solidity對(duì)智能合約特定業(yè)務(wù)的支持力度很大。智能合約是需要實(shí)現(xiàn)的,常見(jiàn)的編程語(yǔ)言對(duì)于這一點(diǎn)是沒(méi)有特殊支持的,而Solidity專門對(duì)此進(jìn)行優(yōu)化,新添了一種類型——contract。除此之外,Solidity還有一種數(shù)據(jù)類型叫做address,可以在發(fā)代幣時(shí)設(shè)置鑄幣人地址。
需要說(shuō)明的是,Solidity不是一門很復(fù)雜的編程語(yǔ)言,很像微縮版的JavaScript,因此對(duì)很多開(kāi)發(fā)人員來(lái)說(shuō)更容易上手。
雖然Solidity相對(duì)比較年輕,規(guī)模較小,可重復(fù)使用的標(biāo)準(zhǔn)庫(kù)也少,但是自從2020年以來(lái),Solidity群體及其代碼庫(kù)迅速發(fā)展。此外,由于以太坊是目前最龐大的開(kāi)發(fā)生態(tài),Solidity也仍然會(huì)是區(qū)塊鏈產(chǎn)業(yè)中應(yīng)用最廣泛的黃金編程語(yǔ)言之一。
Rust:速度快、效率高,理想之選
與Solidity等其他基于區(qū)塊鏈的編程語(yǔ)言不同,Rust并不針對(duì)加密貨幣,主要還是應(yīng)用于區(qū)塊鏈以外的行業(yè)。不過(guò)應(yīng)用于Web3領(lǐng)域的Rust,同樣非常優(yōu)秀。
由于Web3協(xié)議在處理數(shù)千萬(wàn)個(gè)不可信輸入時(shí)需要快速且強(qiáng)大的性能,Rust具有明顯的優(yōu)勢(shì)。他能以閃電般的速度處理功能復(fù)雜的任務(wù),同時(shí)還減少了與內(nèi)存、邊界、空變量、初始化變量或整數(shù)溢出等錯(cuò)誤。
使用Rust開(kāi)發(fā)Web3應(yīng)用程序的優(yōu)勢(shì)如下:
·速度快
Rust語(yǔ)言擁有驚人的速度和內(nèi)存效率。豐富的類型系統(tǒng)和所有權(quán)模型保證了其內(nèi)存和線程的安全,從而能夠在編譯時(shí)消除很多典型的錯(cuò)誤。此外,它可以并發(fā)(和并行)代碼,快速地處理事務(wù)。這為Rust程序提供了可擴(kuò)展性。因其吞吐量高,每秒事務(wù)(TPS)處理量就比其他語(yǔ)言更多。
·效率高
Rust還提供文檔和編譯器,這有助于輕松診斷問(wèn)題,提高工作效率。開(kāi)發(fā)人員不用花費(fèi)太多時(shí)間優(yōu)化代碼,因?yàn)榫幾g器會(huì)將他們的編譯抽象化。值得一提的是,用Rust編寫應(yīng)用程序的運(yùn)行速度比其他語(yǔ)言更快。
·互操作性
此外,Rust可以很好的與其他語(yǔ)言結(jié)合使用,從而輕松調(diào)用另一種語(yǔ)言。這個(gè)特性在萬(wàn)物互聯(lián)的網(wǎng)絡(luò)中更能凸顯其互操作性的價(jià)值。
因此,Rust的速度非??欤瑑?nèi)存效率很高,同時(shí)還保持了極高的可靠性。它的并發(fā)能力正是每秒處理數(shù)萬(wàn)甚至數(shù)十萬(wàn)筆交易所需要的,這使得Rust成為Web3應(yīng)用程序和虛擬世界交易的理想選擇。
Go:簡(jiǎn)單高效,頭部語(yǔ)言
Go是一種開(kāi)源的通用編程語(yǔ)言,它是一種并發(fā)的、帶垃圾回收的、快速編譯的語(yǔ)言。Go語(yǔ)言可以在不損失應(yīng)用程序性能的情況下,降低代碼的復(fù)雜性。
谷歌首席軟件工程師Rob Pike直言,我們之所以開(kāi)發(fā)Go,是因?yàn)檫^(guò)去10多年間軟件開(kāi)發(fā)的難度令人沮喪。
除比特幣是由C++開(kāi)發(fā)以外,目前最主流坊的客戶端均由Go語(yǔ)言開(kāi)發(fā),這足以彰顯Go語(yǔ)言在整個(gè)區(qū)塊鏈行業(yè)的地位。
Go語(yǔ)言能夠在區(qū)塊鏈領(lǐng)域發(fā)揮的優(yōu)勢(shì)如下:
·多模塊異步協(xié)同工作
區(qū)塊鏈?zhǔn)嵌嗄K異步協(xié)同工作的,分成了P2P層、錢包層、內(nèi)核層。其中,內(nèi)核層、錢包層里都有很多不同的子模塊,在負(fù)責(zé)不同的事情。Go語(yǔ)言的特點(diǎn)就很適合這方面的開(kāi)發(fā)。
·社區(qū)共同協(xié)作
區(qū)塊鏈項(xiàng)目主要依賴社區(qū)參與,Go語(yǔ)言在編譯上相較于其他語(yǔ)言更嚴(yán)格,在制定規(guī)范后可以使不同開(kāi)發(fā)者的代碼風(fēng)格趨于相近,有利于協(xié)同工作的展開(kāi)。
·豐富支持
Go語(yǔ)言的社區(qū)生態(tài)比較完善,有很多非常好的開(kāi)源庫(kù)支持,使用起來(lái)非常方便,體驗(yàn)良好。
·主流語(yǔ)言的頭部效應(yīng)
在區(qū)塊鏈項(xiàng)目中,有超過(guò)85%的項(xiàng)目都是基于Go語(yǔ)言開(kāi)發(fā)的,比如Go-Ethereum(用Go語(yǔ)言編寫的以太坊客戶端)、Hyperledger Fabric(為大公司提供區(qū)塊鏈解決方案的項(xiàng)目)、Loom Network、Btcd、Gochain、Dero等。此外,大部分區(qū)塊鏈工程師都擅長(zhǎng)Go語(yǔ)言,所以當(dāng)新項(xiàng)目開(kāi)始的時(shí)候,基本都會(huì)首選Go語(yǔ)言。
總的來(lái)說(shuō),區(qū)塊鏈開(kāi)發(fā)所使用的編程語(yǔ)言,需要滿足執(zhí)行率高、高并發(fā)、跨平臺(tái),對(duì)于網(wǎng)絡(luò)開(kāi)發(fā)的要求也很高等條件,而Go語(yǔ)言恰恰滿足以上這些特性。
Haskell:純函數(shù)式,潛力黑馬
Haskell是一種通用的函數(shù)式編程語(yǔ)言,在區(qū)塊鏈的應(yīng)用中,Haskell通常被定位為Cardano的智能合約編程語(yǔ)言Plutus的底層定制語(yǔ)言。
Haskell是一門非常數(shù)學(xué),也非常純粹的語(yǔ)言。由于它是一種靜態(tài)類型的語(yǔ)言,代碼在編譯過(guò)程中很容易被評(píng)估,所以類型檢查可以確保代碼的簡(jiǎn)潔、清晰和正確。
從本質(zhì)上來(lái)說(shuō),Haskell為描述和評(píng)估函數(shù)提供了一個(gè)理論框架,其中每個(gè)函數(shù)都是數(shù)學(xué)意義上的函數(shù),具有高度安全性。在Hskell中,函數(shù)執(zhí)行低層次的任務(wù),并指定程序所需完成的任務(wù)。
Hskell使用惰性求值,在無(wú)必要的情況下,它會(huì)繞過(guò)不相關(guān)的代碼,程序運(yùn)行速度更快。此外,Hskell使用起來(lái)也非常方便,因?yàn)樗昧俗詣?dòng)內(nèi)存管理(AMM),開(kāi)發(fā)者在開(kāi)發(fā)他們的DAPP時(shí)不需要將內(nèi)存管理任務(wù)寫入代碼中。
需要說(shuō)明的是,截至2021年,使用Hskell語(yǔ)言的Web3開(kāi)發(fā)者的數(shù)量依然較少,該語(yǔ)言尚未被多數(shù)開(kāi)發(fā)者所接受。盡管學(xué)習(xí)Hskell的門檻較高,庫(kù)很少,開(kāi)發(fā)者人數(shù)較少且增長(zhǎng)緩慢,但是Hskell在生產(chǎn)高質(zhì)量軟件方面仍然發(fā)揮著至關(guān)重要的作用,掌握額外的Haskell對(duì)開(kāi)發(fā)者來(lái)說(shuō),更容易脫穎而出。
寫在最后
事實(shí)上,Web3正在快速發(fā)展,我們無(wú)法預(yù)測(cè)哪門編程語(yǔ)言能夠成為10年后的主流,也不知道接下來(lái)區(qū)塊鏈領(lǐng)域會(huì)發(fā)生什么,但可以確定的一件事是,編程語(yǔ)言的整體發(fā)展趨勢(shì)是越來(lái)越通用且易于上手。