杰克17星評(píng)價(jià)
2020-04-29 13:44:12
函數(shù)式編程能夠支持更高效的區(qū)塊鏈基礎(chǔ)設(shè)施,誰(shuí)在使用它,為什么?
說區(qū)塊鏈技術(shù)很吸引人,這是一種輕描淡寫的說法。數(shù)以百計(jì)的區(qū)塊鏈項(xiàng)目已經(jīng)被部署,還有數(shù)百個(gè)項(xiàng)目將在未來幾個(gè)月推出。隨著公司開發(fā)更先進(jìn)的區(qū)塊鏈基礎(chǔ)設(shè)施和應(yīng)用程序,圍繞區(qū)塊鏈技術(shù)展開的未來將變得更加確定。
在區(qū)塊鏈平臺(tái)開發(fā)中使用的一些最著名的編程語(yǔ)言是面向?qū)ο蟮恼Z(yǔ)言。到目前為止,像C++、Python和Ruby這樣的語(yǔ)言已經(jīng)主導(dǎo)了區(qū)塊鏈的發(fā)展場(chǎng)景。
如果最近的發(fā)展有什么可說的,那么非函數(shù)式編程語(yǔ)言莫屬了。他們提供區(qū)塊鏈技術(shù)的獨(dú)特功能,幫助展示其重要的比較優(yōu)勢(shì)。
那么,目前正在使用哪些函數(shù)式編程語(yǔ)言來開發(fā)開放區(qū)塊鏈協(xié)議呢?這里有幾個(gè)例子。
函數(shù)式編程語(yǔ)言
·OCaml
OCaml是一種函數(shù)式編程語(yǔ)言,它經(jīng)受住了時(shí)間的考驗(yàn)。它有一個(gè)靜態(tài)類型系統(tǒng),它有助于消除運(yùn)行時(shí)錯(cuò)誤。與用cor Java編寫的程序相比,用OCaml編寫的程序通常會(huì)更快地啟動(dòng)和運(yùn)行,并且消耗更少的內(nèi)存。
OCaml的其他特性還包括一流的詞法閉包、參數(shù)多態(tài)性、異常處理、尾遞歸和模式匹配,以及支持鏈接到C原語(yǔ)的外部函數(shù)接口。還有用于自動(dòng)內(nèi)存管理的垃圾收集器特性。
·Haskell
Haskell是一種基于lambda演算的純函數(shù)編程語(yǔ)言。它具有用戶友好的語(yǔ)法、廣泛的物理庫(kù)集合和用于支持教育的奇妙資源。這些對(duì)于開發(fā)人員的參考資料起著重要的作用。
Haskell還具有頂級(jí)的工具、聲明式的風(fēng)格和靜態(tài)的強(qiáng)類型。在構(gòu)建高性能應(yīng)用程序時(shí),這些特性使Haskell成為一個(gè)很好的選擇。
·Erlang
Erlang是一種函數(shù)式編程語(yǔ)言,用于構(gòu)建在計(jì)算機(jī)網(wǎng)絡(luò)上分布的強(qiáng)大的程序系統(tǒng)。它已經(jīng)在電信行業(yè)使用了30多年,目前90%的互聯(lián)網(wǎng)流量都是通過erlang-受控節(jié)點(diǎn)進(jìn)行的。作為一種函數(shù)式語(yǔ)言,它更側(cè)重于對(duì)表達(dá)式的評(píng)估。表達(dá)式使用函數(shù)來獲取基本值。
Erlang在任何其他編程語(yǔ)言之前就開始支持多線程。它提供垃圾收集,使用虛擬機(jī),并具有模式匹配,這允許進(jìn)行緊湊和清晰的程序。Erlang為其他編程語(yǔ)言(如C、C++和Rust)提供了接口。
Erlang被認(rèn)為是一種高級(jí)語(yǔ)言,特別是在開發(fā)需要的后端系統(tǒng)時(shí)。
·大量的并發(fā)活動(dòng)
·實(shí)時(shí)響應(yīng)
·不間斷操作和容錯(cuò)
現(xiàn)在您已經(jīng)了解了函數(shù)式編程語(yǔ)言的一兩個(gè)例子,讓我們來看看是什么使它們特別適合于區(qū)塊鏈。
函數(shù)式編程語(yǔ)言的優(yōu)點(diǎn)
·不變性
一般來說,函數(shù)式編程語(yǔ)言沒有可變的變量;一旦你設(shè)置了一個(gè)值,它就不能被改變。這使得代碼行為更容易預(yù)測(cè),并減少了系統(tǒng)錯(cuò)誤的數(shù)量,提高了系統(tǒng)的穩(wěn)定性。
·容錯(cuò)
容錯(cuò)是系統(tǒng)繼續(xù)運(yùn)行的地方,即使發(fā)生了故障。一些函數(shù)式編程語(yǔ)言,比如Erlang,默認(rèn)特性是容錯(cuò)。
·易于并行化,高度分布
函數(shù)式編程語(yǔ)言使您能夠創(chuàng)建高度并行且高度分布的系統(tǒng)。內(nèi)置的迭代功能,如map和reduce,在區(qū)塊鏈開發(fā)中很有用。
雖然有更多的優(yōu)勢(shì)讓我們深入研究更有趣的東西。但您聽說過任何包含函數(shù)式編程的區(qū)塊鏈嗎?繼續(xù)閱讀…
使用函數(shù)式編程的區(qū)塊鏈協(xié)議
·Tezos
Tezos是一個(gè)區(qū)塊鏈項(xiàng)目,旨在提供世界上第一個(gè)”自我修正的加密貨幣”。它是一個(gè)自治的、分散的區(qū)塊鏈平臺(tái),它使用區(qū)塊鏈治理來幫助它隨著時(shí)間的推移升級(jí)它的協(xié)議。在另一種授權(quán)的(DPoS)方法中,即與所謂的流動(dòng)性證明”方法達(dá)成了共識(shí)。
Tezos是在OCaml中實(shí)現(xiàn)的,它是一種函數(shù)式編程語(yǔ)言,提供高速度、明確的語(yǔ)法和語(yǔ)義,以及一個(gè)使Tezos成為證明正確性的良好候選的生態(tài)系統(tǒng)。正式驗(yàn)證是開發(fā)人員能夠在數(shù)學(xué)上證明他們的智能合約代碼的準(zhǔn)確性的時(shí)候。
·Cardano(卡爾達(dá)諾)
Cardano是一個(gè)分散的、基于區(qū)塊鏈的開源平臺(tái),它使用的是一種叫做Ouroboros的數(shù)學(xué)計(jì)算方法。Ouroboros可以通過由持票人投票產(chǎn)生共識(shí)。
Cardano區(qū)塊鏈?zhǔn)怯肏askell編寫的,它使用的是一種純函數(shù)式編程語(yǔ)言,使用強(qiáng)大的靜態(tài)類型和正式的規(guī)范,來定義它的智能合約。Plutus的語(yǔ)法相當(dāng)類似于Haskell,但與Haskell不同的是,該語(yǔ)言受到了熱切的評(píng)價(jià)。
·?ternity
?ternity”是一個(gè)基于區(qū)塊鏈的平臺(tái),它擁有智能合約和分散的應(yīng)用程序。和Tezos和Cardano一樣,?ternity”是用Erlang編寫的。
Sophia是ML家族的一種編程語(yǔ)言。它沒有一個(gè)任意的可變狀態(tài),但是對(duì)于每個(gè)契約實(shí)例,有一個(gè)有限的狀態(tài)形式。它是一種健壯的語(yǔ)言,能夠指定并自動(dòng)證明智能合約的屬性,因此它非常適合于高價(jià)值、系統(tǒng)關(guān)鍵的智能合約。
除了Erlang之外,核心協(xié)議中還包含了許多其他的技術(shù)特性,這些特性使其脫穎而出:
·狀態(tài)通道——該技術(shù)用于顯著提高事務(wù)的可伸縮性和智能合約,方法是將它們從較慢的主鏈(非鏈)轉(zhuǎn)移到其他地方。除了可伸縮性之外,對(duì)狀態(tài)通道的額外好處是增加了隱私,因?yàn)閰⑴c通道的各方之間的所有事務(wù)或合同都是私有的。此外,由于用戶之間的所有交互都是私有的,所以可以并行執(zhí)行智能合同和事務(wù)。
·Bitcoin-NG——為了提高移動(dòng)分散應(yīng)用程序的可用性,還必須增加主鏈的事務(wù)速度。這是通過實(shí)現(xiàn)Bitcoin-NG實(shí)現(xiàn)的,這是一種下一代的共識(shí)協(xié)議,它支持更高的交易速度,同時(shí)保持系統(tǒng)的分散。
·命名系統(tǒng)——一個(gè)集成的命名系統(tǒng)也是一種統(tǒng)一的一部分。任何地址、智能合約或oracle都可以有一個(gè)人類可讀的名字,而不是一串?dāng)?shù)字和字母,就像大多數(shù)其他區(qū)塊鏈平臺(tái)一樣。這改善了用戶友好性,并幫助了智能合約開發(fā)者。
·Integrated Oracles——任何一個(gè)AE用戶都可以成為或使用一個(gè)oracle,在這個(gè)區(qū)塊鏈上有一種特殊的交易。Oracles報(bào)告了真實(shí)世界的事件,為智能合約提供了觸發(fā)器。這提高了智能合約的效用,并實(shí)現(xiàn)了它們的全部破壞性潛力。
·在鏈上的治理——實(shí)現(xiàn)了一種股權(quán)的變更,允許AE用戶正式地表達(dá)他們對(duì)任何主題的意見。任何AE用戶都可以用他們的AE余額簽署一個(gè)交易來提出問題或回答問題。?ternity治理體系類似于在區(qū)塊鏈中實(shí)現(xiàn)的一種流動(dòng)性民主形式。投票結(jié)果向開發(fā)人員表明,社區(qū)對(duì)各種主題的看法是什么,包括基本的系統(tǒng)變量,如塊大小、塊獎(jiǎng)勵(lì)或塊時(shí)間。投票結(jié)果不具約束力,但形式上具有象征性意義。
·工作證明的挖掘——與許多新的區(qū)塊鏈平臺(tái)不同,它采用了有爭(zhēng)議的治理機(jī)制,并建立了有爭(zhēng)議的共識(shí)構(gòu)建機(jī)制,而這種機(jī)制依賴于經(jīng)過驗(yàn)證的工作量證明方法。
如果您對(duì)terof背后的團(tuán)隊(duì)感到好奇——你會(huì)知道這個(gè)項(xiàng)目得到了Erlang和區(qū)塊鏈社區(qū)中一些最有經(jīng)驗(yàn)的開發(fā)人員的支持。Robert Virding,Erlang的聯(lián)合創(chuàng)建者,是開源的Erlang社區(qū)中最多產(chǎn)、最著名的成員之一,Sascha Hanse,世界級(jí)的區(qū)塊鏈開發(fā)者,都是這個(gè)團(tuán)隊(duì)的一部分。在這場(chǎng)運(yùn)動(dòng)的最前線是創(chuàng)始人Yanislav Malahov,,他被稱為以太坊的教父,因?yàn)樗婚_始就參與了這個(gè)項(xiàng)目。
結(jié)論
函數(shù)式編程語(yǔ)言正在進(jìn)入?yún)^(qū)塊鏈領(lǐng)域。它們的特性可以使它們特別適合于分布式賬本協(xié)議和智能合約的開發(fā)。在區(qū)塊鏈空間中,一些技術(shù)最先進(jìn)的項(xiàng)目轉(zhuǎn)向了可伸縮性、穩(wěn)定性和容錯(cuò)能力的函數(shù)式編程。那些關(guān)注區(qū)塊鏈技術(shù)的開發(fā)人員應(yīng)該考慮探索函數(shù)式編程。很有可能的是,它是最實(shí)用智能合約平臺(tái)的基礎(chǔ)。
卡布奇諾4星評(píng)價(jià)
2020-04-29 13:44:58
區(qū)塊鏈?zhǔn)菍?duì)軟件正確性要求極高的領(lǐng)域。過去軟件bug和安全漏洞帶來的損失,一般就是停機(jī)維護(hù),被拖個(gè)庫(kù)就已經(jīng)是很重大的影響了。而區(qū)塊鏈軟件的漏洞被利用,那將是災(zāi)難性的,因?yàn)樯厦媾艿亩际钦娼鸢足y。隨著區(qū)塊鏈技術(shù)對(duì)傳統(tǒng)經(jīng)濟(jì)領(lǐng)域滲透的加深,這種風(fēng)險(xiǎn)將會(huì)大大提升。
傳統(tǒng)軟件工程只重視產(chǎn)品的快速上線快速迭代,從來沒有把軟件的正確性擺在一個(gè)優(yōu)先級(jí)很高的位置,究其根本還是傳統(tǒng)領(lǐng)域軟件出bug帶來的成本不高。
行業(yè)里其實(shí)已經(jīng)有一些關(guān)鍵領(lǐng)域是對(duì)軟件的正確性要求極高的,比如航天系統(tǒng),金融領(lǐng)域一些核心系統(tǒng)等。1962年軟件bug造成火箭偏航,損失1850萬美元;1978年CAD軟件bug造成體育競(jìng)技場(chǎng)倒塌,損失上億美元;1985年放射機(jī)軟件bug導(dǎo)致病人受到大量輻射,1987年金融交易軟件bug導(dǎo)致美國(guó)股災(zāi),等等。
這些問題促使人們?nèi)ニ伎既绾伪WC軟件正確性,而這些年來業(yè)界針對(duì)這種對(duì)軟件正確性要求高的領(lǐng)域,也確實(shí)發(fā)展了一套技術(shù)手段來支持,形式驗(yàn)證、類型系統(tǒng)、純函數(shù)式編程等。這些方法對(duì)程序員要求更高,開發(fā)時(shí)間也更長(zhǎng),所以在大部分編程領(lǐng)域,這種方法顯得不是那么經(jīng)濟(jì),換句話說大部分程序員其實(shí)并不了解這個(gè)領(lǐng)域的技術(shù)。而現(xiàn)在傳統(tǒng)程序員開始進(jìn)入?yún)^(qū)塊鏈軟件的開發(fā),如果不能在思維、流程、工具各方面作出相應(yīng)調(diào)整的話,是很危險(xiǎn)的事情。
但是真正的形式驗(yàn)證成本巨大,只好用來解決一些最核心的問題。而另一種同時(shí)兼顧實(shí)用性的方案是函數(shù)式編程(函數(shù)式編程這個(gè)詞語(yǔ)這些年有些定義模糊,這里特指靜態(tài)類型純函數(shù)式語(yǔ)言,基本上就是ML一族的語(yǔ)言),而Haskell是其中的佼佼者,也是Cardano項(xiàng)目使用的開發(fā)語(yǔ)言。
Haskell是一門 純函數(shù)式 靜態(tài)類型 惰性求值的語(yǔ)言,這里關(guān)鍵字有幾個(gè):
純函數(shù)式是說,函數(shù)除了將輸入轉(zhuǎn)換為輸出以外,不能有其他副作用(比如執(zhí)行IO操作、修改全局變量、或者發(fā)射個(gè)導(dǎo)彈啥的),并且對(duì)于相同的輸入永遠(yuǎn)返回相同的輸出。這意味著不存在變量的概念,數(shù)據(jù)結(jié)構(gòu)也都是immutable的。顯然這樣的函數(shù)會(huì)有很多良好的性質(zhì):好測(cè)試, 線程安全, 代碼可重用, 可讀性強(qiáng)等等。另外這樣的代碼還有一個(gè)性質(zhì)是可證明,因?yàn)槟憧梢詸C(jī)械地把函數(shù)的調(diào)用替代成函數(shù)的實(shí)現(xiàn),而不改變其語(yǔ)意,所以你可以形式地證明比如說兩個(gè)函數(shù)等價(jià)。還有一些其他的好處,比如一些代碼重構(gòu)工具能夠自動(dòng)調(diào)整代碼,編譯器也可以更激進(jìn)地對(duì)代碼進(jìn)行優(yōu)化,因?yàn)樗麄兡軌虼_保對(duì)程序的語(yǔ)意沒有影響。
如果在*純*的基礎(chǔ)上,再加上total的約束,那就更好了,total是說函數(shù)對(duì)參數(shù)的所有取值都有定義,相對(duì)應(yīng)的partial的函數(shù)可能對(duì)某些輸入沒有定義。 不過有點(diǎn)遺憾的是,函數(shù)是否total無法靜態(tài)地檢測(cè)出來,因?yàn)閺某绦蛘Z(yǔ)意的角度,未定義和死循環(huán)是一樣的,所以檢測(cè)total性和停機(jī)問題是一樣的。 (但是如果我們?cè)敢鉅奚鼒D靈完備性的話,是可以支持total檢查的,這樣的語(yǔ)言里可以沒有死循環(huán)和partial函數(shù), 智能合約語(yǔ)言就非常需要這樣的設(shè)計(jì),而智能合約語(yǔ)言 Simplicity 正是這么設(shè)計(jì)的)
靜態(tài)類型系統(tǒng),按照“柯里-霍華德同構(gòu)”定理,類型對(duì)應(yīng)于命題,而程序?qū)?yīng)于證明。當(dāng)我們把問題的模型編碼成類型后,編譯器通過類型檢查可以保證程序的正確性。在實(shí)踐中,類型是可以逐步細(xì)化的,越細(xì)化,能夠通過編譯的實(shí)現(xiàn)就越少,甚至可能細(xì)化到只剩下一個(gè)有意義的實(shí)現(xiàn),這種情況下甚至可以通過工具實(shí)現(xiàn)自動(dòng)生成實(shí)現(xiàn)代碼。類型系統(tǒng)還帶來其他一些便利的工具,比如hoogle,可以根據(jù)類型簽名搜索現(xiàn)有庫(kù)提供的函數(shù)實(shí)現(xiàn)。
關(guān)于Haskell語(yǔ)言其實(shí)可以說的還有很多,未來會(huì)繼續(xù)寫一些具體的編程模式,尤其是與區(qū)塊鏈相關(guān)的,以及它在Cardano項(xiàng)目中的具體實(shí)踐,敬請(qǐng)期待。
更正:Plutus還是圖靈完備的語(yǔ)言,已經(jīng)改成Simplicity。