圖靈完備是指一台機器,只要有足夠的時間和記憶體以及必要的指令,就可以解決任何計算問題,無論多麼複雜。這個術語通常用於描述現代程式語言,因為它們大多數都是圖靈完備的(C++、Python、JavaScript 等)。
在現代電腦出現之前,艾倫圖靈假設有一天會出現一台可以解決任何問題的機器。這台機器後來被稱為圖靈機。
艾倫把他的機器想像成一長條磁帶,上面以二進位代碼(1 和 0)的形式寫有訊息。該機器還將有一個讀/寫頭,它沿著磁帶移動,一個接一個地讀取每個方塊。程式碼會向機器詢問一個計算問題,而磁帶的長度將達到解決方案所需的長度。
當磁頭沿著磁帶移動時,機器會遵循簡單的指令控制它如何反應。它讀取磁帶,按照說明進行操作,並在移動時執行特定操作以寫入新代碼。這種新的程式碼模式就是問題的答案。圖靈的假設機器可以回答任何可以用程式碼表達的計算問題(並且有一個可計算的答案)。
當裝置或程式語言可以透過執行任何程式或解決圖靈機可以運作或解決的任何問題來複製圖靈機時,就被認為是圖靈完備的。另一方面,如果設備或程式語言無法做到這一點,則稱其為圖靈不完備。
簡單的計算器是系統的一個示例,圖靈不完備,因為它只能進行幾種類型的計算。相較之下,可程式科學計算器(能夠執行各種計算)可以被視為圖靈機。
雖然區塊鏈技術的某些應用是圖靈完備的,但其他應用卻是圖靈不完備的。這會根據所實現的腳本技術而變化。例如,比特幣中使用的腳本語言被故意設計為圖靈不完整,因為它達到了其目的,並且增加的複雜性可能會帶來問題。透過保持簡單,開發人員可以高精度預測它在有限數量的使用情況下將如何反應。
另一方面,以太坊是作為圖靈完整的區塊鏈建構的。這很重要,因為它需要了解構成智能合約的協議。透過圖靈完備,以太坊有能力理解和實施任何未來的協議,甚至是那些尚未想到的協議。換句話說,以太坊的圖靈完備性意味著它能夠使用其程式碼庫執行幾乎任何任務,只要它有正確的指令、足夠的時間和處理能力。