為什么說(shuō)Erlang是構(gòu)建區(qū)塊鏈的最佳編程語(yǔ)言
每個(gè)區(qū)塊鏈在其底層都混合了不同的機(jī)制來(lái)進(jìn)行工作。不管使用的是什么機(jī)制通常來(lái)說(shuō)都沒(méi)有對(duì)錯(cuò)之分。即使是“分叉”(現(xiàn)有區(qū)塊鏈的復(fù)本),在開(kāi)發(fā)人員追求處理分布式系統(tǒng)的規(guī)模、速度和其他方面的更好方法時(shí),在某些方面也會(huì)有所不同。
區(qū)塊鏈的核心是工程師選擇的編程語(yǔ)言。比特幣是用c++寫(xiě)的;以太坊是用 Go, C++, 寫(xiě)的,現(xiàn)在是 Rust。要在以太坊上建立智能合約,必須有堅(jiān)實(shí)的基礎(chǔ)。大多數(shù)人都聽(tīng)說(shuō)過(guò)這些語(yǔ)言;即使是業(yè)余愛(ài)好者也會(huì)在日常閱讀中遇到這樣或那樣的情況。
然而,有一種語(yǔ)言已經(jīng)進(jìn)入了人們的視野。Erlang雖然不是一個(gè)家喻戶(hù)曉的名字,但實(shí)際上是33年前創(chuàng)建的。事實(shí)上,它是我們今天使用的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的一個(gè)活躍部分。盡管Erlang不如其他更常見(jiàn)的編程語(yǔ)言流行,但Tobias Lindahl斷言Erlang是構(gòu)建區(qū)塊鏈的完美編程語(yǔ)言和學(xué)科基礎(chǔ)。
Lindahl是利用Erlang的20年老手,擁有工程物理科學(xué)碩士學(xué)位,他花了幾年時(shí)間在虛擬機(jī)(VM)上進(jìn)行研究和工作。
從頭開(kāi)始:設(shè)計(jì)一個(gè)更好的區(qū)塊鏈
根據(jù)Lindahl的說(shuō)法,Erlang和區(qū)塊鏈有如此多的共同點(diǎn),只有在從頭開(kāi)始重新構(gòu)思時(shí),才會(huì)將其用于核心區(qū)塊鏈協(xié)議。
Lindahl解釋說(shuō):“既然區(qū)塊鏈如此嚴(yán)重地依賴(lài)于通信,那么把它放在Erlang中本來(lái)是很自然的事情。”該語(yǔ)言是為在電信中構(gòu)建分布式系統(tǒng)而構(gòu)建的。因此,在Erlang中實(shí)現(xiàn)節(jié)點(diǎn)之間的通信非常容易。”
他補(bǔ)充說(shuō),除了為可伸縮的全球節(jié)點(diǎn)網(wǎng)絡(luò)開(kāi)發(fā),Erlang中程序員思考問(wèn)題的方式在處理區(qū)塊鏈中的問(wèn)題時(shí)給他們帶來(lái)了顯著的優(yōu)勢(shì)。
Erlang語(yǔ)言的不變性類(lèi)似于區(qū)塊鏈的不變性。有些東西一旦進(jìn)入鏈條,就永遠(yuǎn)不會(huì)改變。這與您考慮Erlang問(wèn)題的方式非常相似。
為什么Erlang非常適合構(gòu)建區(qū)塊鏈
在競(jìng)爭(zhēng)激烈的區(qū)塊鏈領(lǐng)域,很容易聲稱(chēng)一種解決方案比另一種更好,這種說(shuō)法太常見(jiàn)了。為了支持他的觀點(diǎn),Lindahl解釋了為什么他認(rèn)為Erlang是構(gòu)建區(qū)塊鏈的最佳編程語(yǔ)言。
“有了Erlang,數(shù)據(jù)就不會(huì)變,所以不會(huì)有破壞性的更新。它使得對(duì)程序進(jìn)行推理變得更容易,甚至可以證明一些關(guān)于程序的東西。它也使測(cè)試程序變得更容易。他補(bǔ)充說(shuō),Erlang不僅能夠快速分發(fā)大量的交易數(shù)據(jù),還允許多個(gè)進(jìn)程同時(shí)運(yùn)行而不會(huì)相互沖突。
“當(dāng)一個(gè)進(jìn)程處理某些東西時(shí),它不需要擔(dān)心任何其他進(jìn)程進(jìn)入并改變其數(shù)據(jù)狀態(tài)。對(duì)我來(lái)說(shuō),這是主要的好處。當(dāng)然還有并發(fā)性這一優(yōu)勢(shì)。你可以讓數(shù)千個(gè)進(jìn)程同時(shí)運(yùn)行,而不會(huì)相互影響?!?/p>
因此, Lindahl和開(kāi)發(fā)團(tuán)隊(duì)?ternity能夠無(wú)縫部署重要功能。升級(jí)的第一個(gè)協(xié)議(硬分叉)證明了Tobias的說(shuō)法——它是在沒(méi)有任何問(wèn)題的情況下執(zhí)行的。
“我們使用噪聲協(xié)議在節(jié)點(diǎn)之間進(jìn)行通信。很容易設(shè)置到其他節(jié)點(diǎn)的獨(dú)立節(jié)點(diǎn)連接,而不會(huì)相互干擾。這是erlang的另一個(gè)內(nèi)置特性——無(wú)需處理信號(hào)量或程序的關(guān)鍵部分,就可以輕松管理單獨(dú)的連接,”他說(shuō)。
用Erlang實(shí)現(xiàn)類(lèi)似于噪音的協(xié)議要簡(jiǎn)單得多。處理不同節(jié)點(diǎn)之間的連接很容易,因?yàn)殛P(guān)注點(diǎn)是分離的。您可以只分配一個(gè)Erlang進(jìn)程來(lái)處理一個(gè)到另一個(gè)節(jié)點(diǎn)的連接,這可以一直進(jìn)行下去。你知道沒(méi)有其他過(guò)程會(huì)干擾這個(gè)。所以你不用擔(dān)心其他的連接?!保?/p>
他補(bǔ)充說(shuō),Erlang支持一個(gè)非常有彈性的系統(tǒng),可以根據(jù)需要伸縮。
Lindahl解釋說(shuō):“如果一個(gè)連接死亡,另一個(gè)進(jìn)程會(huì)自動(dòng)接手?!盓rlang有很多內(nèi)置組件專(zhuān)門(mén)用于處理錯(cuò)誤恢復(fù)和容錯(cuò)。因此,很容易運(yùn)行許多Erlang進(jìn)程。您可以或多或少地?zé)o限伸縮,或者更準(zhǔn)確地說(shuō),您可以通過(guò)Erlang伸縮到您需要的任何位置。并且你不還需要擔(dān)心規(guī)模,這是區(qū)塊鏈行業(yè)目前面臨的最大問(wèn)題之一?!?/p>
為什么其他人不使用Erlang來(lái)構(gòu)建區(qū)塊鏈?
Lindahl的觀點(diǎn)非常有說(shuō)服力,這就引出了一個(gè)問(wèn)題:為什么區(qū)塊鏈技術(shù)從一開(kāi)始就不是建立在Erlang之上的,為什么許多著名的區(qū)塊鏈平臺(tái)沒(méi)有在自己的解決方案中包含Erlang?!癊rlang社區(qū)沒(méi)有那么大。使用Erlang的人并不多?!?/p>
“我不認(rèn)為從一開(kāi)始就沒(méi)有使用它的根本原因。顯然,Erlang并不是最適合所有情況的。也許工作量證明(PoW)才是問(wèn)題所在。您不會(huì)在Erlang中實(shí)現(xiàn)它?!?/p>
區(qū)塊鏈:高級(jí)還是低級(jí)?
最終,Lindahl說(shuō),高級(jí)編程和低級(jí)編程之間的區(qū)別決定了如何構(gòu)建區(qū)塊鏈的復(fù)雜性,這將影響到您可以擴(kuò)展平臺(tái)可能性的程度。在區(qū)塊鏈行業(yè),這是一個(gè)游戲規(guī)則的改變:它可以意味著一個(gè)平臺(tái)在其他網(wǎng)絡(luò)上的全球規(guī)模的成功。
Lindahl補(bǔ)充說(shuō):“我認(rèn)為,由于Erlang的高級(jí)特性,您思考問(wèn)題的方式是抽象的。你抽象了,是因?yàn)槟阌懈邔哟蔚谋尘啊?。在低?jí)程序設(shè)計(jì)中,程序員為每個(gè)操作提供指令。在高級(jí)編程中,程序員給出一個(gè)目標(biāo),而計(jì)算機(jī)知道實(shí)現(xiàn)該目標(biāo)所需的所有單獨(dú)操作。
對(duì)于那些有興趣學(xué)習(xí)更多的人, Lindahl建議查閱?ternity 的Documentation中心。他們的Github存儲(chǔ)庫(kù)也是一個(gè)很好的起點(diǎn)。除此之外,一個(gè)由社區(qū)支持的名為Dacade團(tuán)隊(duì)還為?ternity的發(fā)展創(chuàng)建了一個(gè)教程(成功的完成者從中可以獲得100美元的AE代幣)。對(duì)于那些非常想?yún)⑴c其中的人,他們有一個(gè)即將召開(kāi)的會(huì)議,ternity Universe,開(kāi)發(fā)者和企業(yè)家可以直接從他們的開(kāi)發(fā)者和創(chuàng)始人那里得到問(wèn)題的答案。