Investor's wiki

Turing completo

Turing completo

Turing Complete si riferisce a una macchina che, con tempo e memoria sufficienti insieme alle istruzioni necessarie, può risolvere qualsiasi problema di calcolo, non importa quanto complesso. Il termine è normalmente usato per descrivere i moderni linguaggi di programmazione poiché la maggior parte di essi sono Turing Complete (C++, Python, JavaScript, ecc.).

Cos'è una macchina di Turing?

Prima dei computer moderni, Alan Turing ipotizzava che un giorno ci sarebbe stata una macchina in grado di risolvere qualsiasi problema. Questa macchina divenne nota come la Macchina di Turing.

Alan ha immaginato la sua macchina come un lungo pezzo di nastro con informazioni scritte su di esso sotto forma di codice binario (1s e 0s). La macchina avrebbe anche una testina di lettura/scrittura che si muove lungo il nastro leggendo ogni quadrato, uno per uno. Il codice richiederebbe alla macchina un problema di calcolo e il nastro sarebbe lungo quanto necessario per ottenere una soluzione.

Mentre la testina si muove lungo il nastro, la macchina segue semplici istruzioni che regolano la sua reazione. Legge il nastro, segue le istruzioni ed esegue una determinata azione per scrivere un nuovo codice mentre si muove. Questo nuovo modello di codice è la risposta al problema. L'ipotetica macchina di Turing potrebbe rispondere a qualsiasi problema computazionale che potesse essere espresso in codice (e che avesse una risposta calcolabile).

Un dispositivo o un linguaggio di programmazione è considerato Turing Complete quando può replicare una Turing Machine eseguendo qualsiasi programma o risolvendo qualsiasi problema che la Turing Machine potrebbe eseguire o risolvere. D'altra parte, se un dispositivo o un linguaggio di programmazione non è in grado di farlo, si dice che sia Turing Incomplete.

Una semplice calcolatrice è un esempio di un sistema che è Turing Incomplete poiché può eseguire solo pochi tipi di calcoli. Al contrario, una calcolatrice scientifica programmabile (in grado di eseguire tutti i tipi di calcoli) può essere considerata una macchina di Turing.

Blockchain e completezza di Turing

Mentre alcune applicazioni della tecnologia blockchain sono Turing Complete, altre sono Turing Incomplete. Questo varia in base alla tecnologia di scripting implementata. Ad esempio, il linguaggio di scripting utilizzato in Bitcoin è intenzionalmente progettato come Turing Incomplete perché serve al suo scopo e una maggiore complessità potrebbe potenzialmente introdurre problemi. Mantenendolo semplice, gli sviluppatori possono prevedere con elevata precisione come reagirà nel numero finito di situazioni in cui viene utilizzato.

Ethereum, d'altra parte, è costruito come una blockchain Turing Complete. Questo è importante perché deve comprendere gli accordi che compongono gli smart contract. Essendo Turing Complete, Ethereum ha la capacità di comprendere e implementare qualsiasi accordo futuro, anche quelli che non sono stati ancora pensati. In altre parole, la completezza di Turing di Ethereum significa che è in grado di utilizzare la sua base di codice per eseguire praticamente qualsiasi attività, purché abbia le istruzioni corrette, tempo e potenza di elaborazione sufficienti.