什么是圖靈機(jī)和圖靈完備
在了解區(qū)塊鏈的過(guò)程中,我們經(jīng)常會(huì)聽(tīng)到介紹說(shuō)以太坊是圖靈完備的區(qū)塊鏈平臺(tái)。圖靈完備一般作為一個(gè)特點(diǎn)用來(lái)形容一個(gè)系統(tǒng)或者一套語(yǔ)言,這么說(shuō)吧,我們“人”本身也可以說(shuō)是圖靈完備的,我們每一個(gè)會(huì)決策、會(huì)思考的人,都可以抽象地看成一個(gè)圖靈機(jī),就像李笑來(lái)曾經(jīng)說(shuō)的,“每個(gè)人都有自己的操作系統(tǒng),因?yàn)橛性J(rèn)知能力,還可以自己升級(jí)操作系統(tǒng)?!?/p>
但是,這么簡(jiǎn)單粗暴地理解當(dāng)然是不夠的,下面給大家詳細(xì)講解到底什么是圖靈機(jī)和圖靈完備。
什么是圖靈完備?
說(shuō)到圖靈完備一般得先提到圖靈機(jī)的概念,圖靈機(jī)是英國(guó)數(shù)學(xué)家阿蘭·麥席森·圖靈在1963年提出的、為了研究可計(jì)算問(wèn)題而構(gòu)思的抽象計(jì)算模型——將人們傳統(tǒng)的使用紙筆進(jìn)行數(shù)學(xué)運(yùn)算的過(guò)程,進(jìn)行抽象,由一個(gè)虛擬的機(jī)器替代人們進(jìn)行無(wú)數(shù)次的數(shù)學(xué)運(yùn)算。這個(gè)虛擬的機(jī)器就是圖靈機(jī),也就是現(xiàn)在計(jì)算機(jī)的雛形。
如下圖,虛構(gòu)的圖靈機(jī)長(zhǎng)這個(gè)樣子。形象地來(lái)說(shuō),它就像是老式的電傳機(jī):一個(gè)讀寫(xiě)頭,一根紙帶(可能任意長(zhǎng)),讀寫(xiě)頭不斷讀取紙帶上的符號(hào),并根據(jù)內(nèi)在的狀態(tài)轉(zhuǎn)換規(guī)則轉(zhuǎn)換當(dāng)前狀態(tài),同時(shí)進(jìn)行一些動(dòng)作,比如擦除或改寫(xiě)當(dāng)前字符,向前/向后移動(dòng)讀寫(xiě)頭或保持不動(dòng)等。
所以圖靈完備(Turing Complete)原本是來(lái)自計(jì)算機(jī)的概念,是程序員編寫(xiě)的各種代碼語(yǔ)言,再加上一種能在圖靈機(jī)這種虛擬機(jī)中完美地運(yùn)算的運(yùn)算規(guī)則,因此滿足這樣要求的邏輯系統(tǒng)、裝置或者編程語(yǔ)言就叫圖靈完備。
簡(jiǎn)而概之,圖靈完備的意思就是可以做到圖靈機(jī)所能做到的所有事情,解決所有的可計(jì)算問(wèn)題的邏輯系統(tǒng)、裝置或者編程語(yǔ)言就叫做圖靈完備。
根據(jù)圖靈機(jī)與圖靈完備的定義,圖靈完備的語(yǔ)言有循環(huán)執(zhí)行語(yǔ)句、判斷分支語(yǔ)句等,理論上能解決任何算法。那么它的一個(gè)顯著特點(diǎn)就是支持程序循環(huán)不斷地運(yùn)行下去。缺點(diǎn)就是其有可能進(jìn)入死循環(huán)而導(dǎo)致程序崩潰。
那么相反,圖靈不完備就是不允許或限制循環(huán),可以保證每段程序都不會(huì)死循環(huán),都有運(yùn)行完的時(shí)候。
那么在區(qū)塊鏈支撐的分布式環(huán)境中,圖靈完備是如何應(yīng)用在區(qū)塊鏈中的?它解決了區(qū)塊鏈的什么問(wèn)題?
為什么區(qū)塊鏈行業(yè)需要圖靈完備?
說(shuō)到區(qū)塊鏈,第一個(gè)肯定想到比特幣網(wǎng)絡(luò)。我們都知道,一直到目前為止比特幣系統(tǒng)上是幾乎不支持開(kāi)發(fā)程序應(yīng)用的,這是因?yàn)楫?dāng)初中本聰出于安全問(wèn)題的顧慮,在設(shè)計(jì)比特幣時(shí)只采用了一種堆棧語(yǔ)言,不能做到圖靈機(jī)所能做到的所有事情,所以我們說(shuō)比特幣系統(tǒng)是圖靈不完備的。
不過(guò)比特幣這樣的非圖靈完備的區(qū)塊鏈代碼協(xié)議的優(yōu)點(diǎn)是很安全,從2009年誕生至今近10年的時(shí)間里,區(qū)塊鏈中發(fā)生過(guò)無(wú)數(shù)起黑客攻擊事件,但比特幣幾乎從未因本身腳本原因出現(xiàn)過(guò)資金損失。
那么問(wèn)題來(lái)了,比特幣雖然安全,但是在其系統(tǒng)上不能開(kāi)發(fā)復(fù)雜的邏輯程序,這就使得早些年區(qū)塊鏈的落地場(chǎng)景和應(yīng)用十分少。而隨著區(qū)塊鏈的發(fā)展,這些需求不斷提上議事日程,人們開(kāi)始逐漸需要能夠支持區(qū)塊鏈應(yīng)用開(kāi)發(fā)運(yùn)行的系統(tǒng)出現(xiàn),于是區(qū)塊鏈就引入了圖靈完備的概念。
在比特幣之后,為了能實(shí)現(xiàn)更豐富的功能和使用場(chǎng)景,一些圖靈完備的區(qū)塊鏈系統(tǒng)應(yīng)運(yùn)而生。
其中眾所周知的且最具代表性的就是以太坊。以太坊采用的是智能合約語(yǔ)言,它是一個(gè)圖靈完備的區(qū)塊鏈系統(tǒng),其虛擬機(jī)可運(yùn)行智能合約,理論上能夠解決所有的可計(jì)算問(wèn)題,從而盡最大限度滿足各種現(xiàn)實(shí)應(yīng)用場(chǎng)景的開(kāi)發(fā)。程序員既可以利用以太坊的智能合約來(lái)編寫(xiě)數(shù)字資產(chǎn)的代碼,創(chuàng)建新的數(shù)字資產(chǎn);也可以通過(guò)編寫(xiě)智能合約的代碼,創(chuàng)造非數(shù)字資產(chǎn)的功能,例如目前市場(chǎng)上的各種DApps。
總的來(lái)說(shuō),假如我們把比特幣的區(qū)塊鏈當(dāng)做是一種數(shù)字資產(chǎn)的協(xié)議技術(shù),那么以太坊的區(qū)塊鏈則可以說(shuō)是這個(gè)數(shù)字資產(chǎn)協(xié)議的協(xié)議。
圖靈完備這一技術(shù)的特性使得以太坊上從一開(kāi)始就涌現(xiàn)了大批商業(yè)應(yīng)用,區(qū)塊鏈落地場(chǎng)景也逐漸增多。目前已有遠(yuǎn)超200個(gè)基于以太坊的應(yīng)用誕生,而隨著摩根大通、微軟、英特爾、三星、豐田等眾多企業(yè)巨頭的加盟,以太坊已逐漸從一開(kāi)始的虛擬代碼技術(shù),成為了虛擬世界最大的一條“高速公路”,被賦予了巨大的創(chuàng)新商業(yè)價(jià)值,所以以太坊一般也被稱(chēng)為區(qū)塊鏈2.0。
但是,與此同時(shí),圖靈完備有陷入死循環(huán)的風(fēng)險(xiǎn)。所以以太坊為了保證所寫(xiě)出的程序不存在死循環(huán),就在“智能合約”語(yǔ)言中加入了gas的概念,通過(guò)加入gas費(fèi)用,程序每個(gè)運(yùn)算過(guò)程都會(huì)消耗一定成本,就不會(huì)無(wú)限制地執(zhí)行下去。
總結(jié)
以太坊雖說(shuō)可以搭載很多應(yīng)用,但是復(fù)雜的協(xié)議在設(shè)計(jì)和編碼過(guò)程中難以避免人工失誤,因此常常被黑客找到漏洞發(fā)起攻擊,損失巨大。比如著名的The DAO事件,The DAO資金池中價(jià)值6000多萬(wàn)美元的以太幣在6個(gè)小時(shí)里被洗劫一空。
不管怎樣,技術(shù)是提供便利的,但無(wú)論什么技術(shù)都多少有雙面性,不論是圖靈完備還是區(qū)塊鏈。圖靈完備的開(kāi)發(fā)語(yǔ)言將仍然是未來(lái)的主流,因?yàn)榇蠖鄶?shù)項(xiàng)目都希望實(shí)現(xiàn)多樣的功能,有豐富的使用場(chǎng)景。但是不管做什么項(xiàng)目,安全性一定是不容忽視的考慮因素。