自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么函數(shù)式編程非常適合開(kāi)發(fā)區(qū)塊鏈?

區(qū)塊鏈
現(xiàn)在有很多區(qū)塊鏈,但只有少數(shù)幾個(gè)獨(dú)立的實(shí)施方案存在。Tezos是其中之一,作為該鏈的早期架構(gòu)師,我有機(jī)會(huì)從一開(kāi)始就參與了它的創(chuàng)建和開(kāi)發(fā)。早期一個(gè)偶然的決定是遵循函數(shù)式編程范式,使用OCaml編程語(yǔ)言來(lái)構(gòu)建該鏈。在這段經(jīng)歷中,我發(fā)現(xiàn)函數(shù)式編程和區(qū)塊鏈?zhǔn)欠浅:线m的。讓我們來(lái)試試,看看為什么!

現(xiàn)在有很多區(qū)塊鏈,但只有少數(shù)幾個(gè)獨(dú)立的實(shí)施方案存在。Tezos是其中之一,作為該鏈的早期架構(gòu)師,我有機(jī)會(huì)從一開(kāi)始就參與了它的創(chuàng)建和開(kāi)發(fā)。早期一個(gè)偶然的決定是遵循函數(shù)式編程范式,使用OCaml編程語(yǔ)言來(lái)構(gòu)建該鏈。在這段經(jīng)歷中,我發(fā)現(xiàn)函數(shù)式編程和區(qū)塊鏈?zhǔn)欠浅:线m的。讓我們來(lái)試試,看看為什么!

安全性

從一開(kāi)始,很明顯,安全應(yīng)該是技術(shù)設(shè)計(jì)選擇的中心。區(qū)塊鏈和加密貨幣為bug提供了一個(gè)幾乎最壞的環(huán)境。

關(guān)鍵bug不能被公開(kāi)討論,因?yàn)樗鼈儠?huì)影響到實(shí)時(shí)系統(tǒng),但它們需要在許多參與者中同時(shí)部署,而不使用可信的第三方。除了隱蔽的錯(cuò)誤修復(fù)外,這使得解決這些問(wèn)題的選擇非常少。

對(duì)于犯罪黑客來(lái)說(shuō),發(fā)現(xiàn)這些系統(tǒng)中的漏洞有很大的、直接的經(jīng)濟(jì)激勵(lì),因?yàn)樗鼈兡艽_保真正的經(jīng)濟(jì)價(jià)值。

雖然安全是至關(guān)重要的,但不幸的是,沒(méi)有萬(wàn)無(wú)一失的方法來(lái)確保安全。即使是最嚴(yán)格的方法,如形式化驗(yàn)證,仍然是昂貴的,并且受制于規(guī)范本身的漏洞。然而,一些技術(shù)上的選擇可以幫助我們。

選擇OCaml作為編程語(yǔ)言的一個(gè)主要原因是,它可以幫助消除大類錯(cuò)誤。作為一種內(nèi)存管理語(yǔ)言,不需要擔(dān)心緩沖區(qū)溢出等問(wèn)題,但這只是表面現(xiàn)象。Tezos利用OCaml非常強(qiáng)大的靜態(tài)類型系統(tǒng)來(lái)執(zhí)行隔離和權(quán)限。管理交易的代碼不能訪問(wèn)賬本的底層存儲(chǔ);它甚至不能構(gòu)建它需要寫(xiě)到存儲(chǔ)的類型。相反,類型系統(tǒng)限制它寫(xiě)到一個(gè)更高的抽象中,這個(gè)抽象可以檢查和凈化每一個(gè)動(dòng)作。當(dāng)然,封裝并不是函數(shù)式編程所獨(dú)有的,但OCaml的模塊簽名機(jī)制使得審查和完善權(quán)限變得非常簡(jiǎn)單。

Tezos協(xié)議為Michelson嵌入了一個(gè)解釋器,Michelson是Tezos智能合約背后的虛擬機(jī),它本身是靜態(tài)類型和功能的。該解釋器利用OCaml的GADT系統(tǒng)來(lái)確保錯(cuò)誤輸入的Michelson合約甚至不能被構(gòu)建。這是我們從語(yǔ)言本身繼承的另一個(gè)不錯(cuò)的安全屬性。

一句老話聲稱,如果一個(gè)程序是用函數(shù)式編程語(yǔ)言編寫(xiě)的,那么它就能工作。這句話當(dāng)然是輕描淡寫(xiě)的,盡管我確實(shí)記得,經(jīng)過(guò)幾個(gè)月的開(kāi)發(fā),Tezos的第一個(gè)編譯版本確實(shí)在第一次嘗試中運(yùn)行,并且能夠處理交易。

這些屬性都不能保證安全,但它們能解決更明顯的缺陷,使程序員和安全研究人員能夠?qū)W⒂诟邔哟蔚膯?wèn)題。

如果黃金標(biāo)準(zhǔn)是形式驗(yàn)證,那么OCaml的地位就非常好。Coq是一個(gè)領(lǐng)先的交互式定理檢驗(yàn)器和證明檢驗(yàn)器,它是用OCaml寫(xiě)的,可以自然地輸出OCaml。此外,Coq-of-OCaml可以做相反的事情,從現(xiàn)有的OCaml代碼中準(zhǔn)備Coq代碼。

區(qū)塊鏈看起來(lái)像一個(gè)函數(shù)式編程問(wèn)題

隨著Tezos開(kāi)始成形,我意識(shí)到,在實(shí)現(xiàn)區(qū)塊鏈時(shí)需要解決的許多問(wèn)題與函數(shù)式程序員非常熟悉的問(wèn)題類型類似。就其核心而言,區(qū)塊鏈?zhǔn)且环N使用僅附加的數(shù)據(jù)結(jié)構(gòu)來(lái)表示可改變狀態(tài)的方式。當(dāng)你用一個(gè)累加器持有區(qū)塊時(shí),你得到的就是這個(gè)狀態(tài)。這就是我們?cè)诤瘮?shù)式世界中處理數(shù)據(jù)及其不可變性的典型方式。

函數(shù)式編程非常適用的一個(gè)問(wèn)題是處理鏈?zhǔn)街亟M,當(dāng)已經(jīng)應(yīng)用于狀態(tài)的塊需要回滾時(shí),因?yàn)椴煌姆种ё罱K被共識(shí)所選擇。當(dāng)數(shù)據(jù)被存儲(chǔ)為功能樹(shù)時(shí),網(wǎng)絡(luò)參與者可以有效地撤銷(xiāo)這些塊對(duì)狀態(tài)的影響。然后,隨著鏈的進(jìn)展,你需要用垃圾收集器來(lái)清理它并釋放內(nèi)存,這又是函數(shù)式編程世界中非常熟悉的事情。

此外,如果你正在構(gòu)建智能合約,那么你需要一個(gè)智能合約語(yǔ)言,這意味著你需要一個(gè)編譯器,編譯器往往在函數(shù)式編程中處理得非常好,特別是OCaml。從源語(yǔ)言編譯到目標(biāo)語(yǔ)言時(shí)有很多步驟:對(duì)文本進(jìn)行詞法解析以創(chuàng)建單個(gè)標(biāo)記,將這些標(biāo)記組裝成一個(gè)抽象的語(yǔ)法樹(shù),并對(duì)該樹(shù)的各個(gè)部分進(jìn)行轉(zhuǎn)換,直到我們到達(dá)目標(biāo)語(yǔ)言,有時(shí)要經(jīng)過(guò)一些中間表示,其中類型系統(tǒng)對(duì)轉(zhuǎn)換進(jìn)行約束。所有這些步驟的代碼在用OCaml編寫(xiě)時(shí)可以非常優(yōu)雅和高效。

編譯后的智能合約,也得益于用函數(shù)式寫(xiě)法。每個(gè)合約都有自己的不可變的數(shù)據(jù)與之相關(guān),所以你不能讓它成為一個(gè)純函數(shù)。然而,我們可以做的是將該存儲(chǔ)和合約加載到一個(gè)孤立的虛擬機(jī)中執(zhí)行。這是最接近純函數(shù)的東西,是確定性的,不受外部值的影響。

為什么是OCaml?

OCaml不是一個(gè)明顯的選擇。作為一種編程語(yǔ)言,它仍然有些小眾。然而,它是一種成熟的語(yǔ)言,提供了強(qiáng)類型函數(shù)式編程語(yǔ)言的安全性,同時(shí)又不影響性能。它扎根于法國(guó)學(xué)術(shù)界,并被Facebook、Jane Street Capital和Docker等公司用于安全敏感項(xiàng)目。它也是一種用于編寫(xiě)編譯器的流行語(yǔ)言。你可以用OCaml寫(xiě)出非??勺x、可靠和高效的代碼,雖然它不能防止直接的編程錯(cuò)誤,但強(qiáng)大的類型系統(tǒng)和函數(shù)式編程帶來(lái)的無(wú)副作用有助于讓你對(duì)代碼的正確性有很高的信心。

Haskell是一種比較流行的函數(shù)式編程語(yǔ)言,它提供了一種基于懶惰評(píng)估的非常純粹的范式,但要寫(xiě)出性能和成語(yǔ)兼?zhèn)涞腍askell代碼是比較困難的。

一個(gè)常見(jiàn)的反對(duì)意見(jiàn)是,使用像OCaml這樣的不常見(jiàn)的編程語(yǔ)言會(huì)使招聘程序員更加困難。這種說(shuō)法對(duì)于試圖招募成千上萬(wàn)的開(kāi)發(fā)人員的公司來(lái)說(shuō)可能有一定的分量,但很顯然,早期的核心協(xié)議開(kāi)發(fā)團(tuán)隊(duì)的最有效規(guī)模要比這小得多。此外,我發(fā)現(xiàn)對(duì)構(gòu)建這些類型的系統(tǒng)有訣竅的開(kāi)發(fā)人員在幾個(gè)月內(nèi)學(xué)會(huì)這門(mén)語(yǔ)言并不困難。

WhatsApp能夠通過(guò)一個(gè)小型的、專注的Erlang開(kāi)發(fā)者團(tuán)隊(duì)擴(kuò)展到數(shù)以億計(jì)的用戶,這在早期給了我很大的啟發(fā),我想說(shuō),這種啟發(fā)經(jīng)得起時(shí)間的考驗(yàn)。

雖然OCaml被用于Tezos的基礎(chǔ),但圍繞它構(gòu)建工具和應(yīng)用程序的開(kāi)發(fā)者社區(qū)通常用各種流行語(yǔ)言來(lái)做。同樣,對(duì)于編寫(xiě)智能合約,有一些高級(jí)語(yǔ)言可以給你帶來(lái)類似Python或JavaScript的體驗(yàn),這只是一些例子。

結(jié)論

總之,區(qū)塊鏈和函數(shù)式編程之間存在著非常自然的契合,如果不使用正確的工具來(lái)完成正確的工作,那將是一種恥辱! 有許多問(wèn)題有待解決,各地的開(kāi)發(fā)者有機(jī)會(huì)應(yīng)用他們的技能,為這個(gè)新生(但蓬勃發(fā)展)的類別建立更好的工具、應(yīng)用程序和基礎(chǔ)設(shè)施。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2018-06-14 10:32:25

2021-08-06 23:10:07

區(qū)塊鏈開(kāi)發(fā)實(shí)業(yè)

2021-11-01 22:33:45

區(qū)塊鏈智慧城市元宇宙

2022-06-01 23:27:38

區(qū)塊鏈加密貨幣數(shù)字資產(chǎn)

2021-09-29 16:53:53

區(qū)塊鏈數(shù)據(jù)技術(shù)

2015-12-21 13:28:41

LinuxLinux基金會(huì)團(tuán)隊(duì)

2020-05-14 20:42:09

區(qū)塊鏈區(qū)塊鏈技術(shù)供應(yīng)鏈

2018-08-21 21:55:53

2022-07-13 17:26:13

區(qū)塊鏈汽油物流

2013-07-09 09:43:04

函數(shù)式思維函數(shù)式編程編程

2022-09-15 15:23:30

通信400-MHz

2021-09-30 22:59:19

區(qū)塊鏈加密貨幣數(shù)字貨幣

2021-02-03 16:54:39

區(qū)塊鏈比特幣技術(shù)

2021-11-17 22:12:18

區(qū)塊鏈供應(yīng)鏈技術(shù)

2019-09-03 09:56:51

2013-11-26 10:14:15

面向?qū)ο?/a>函數(shù)式

2009-11-06 10:48:14

函數(shù)式編程Scala

2021-11-04 23:16:41

區(qū)塊鏈互聯(lián)網(wǎng)技術(shù)

2018-08-01 13:59:44

區(qū)塊鏈協(xié)議應(yīng)用層

2018-05-25 00:25:17

區(qū)塊鏈技術(shù)智能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)