Maszyna Turinga

1053

Turing Complete odnosi się do maszyny, która przy wystarczającej ilości czasu i pamięci wraz z niezbędnymi instrukcjami może rozwiązać każdy problem obliczeniowy, bez względu na to, jak skomplikowany. Termin ten jest zwykle używany do opisu nowoczesnych języków programowania, ponieważ większość z nich to Turing Complete (C ++, Python, JavaScript itp.).

Co to jest maszyna Turinga?

Przed współczesnymi komputerami Alan Turing postawił hipotezę, że pewnego dnia będzie maszyna, która rozwiąże każdy problem. Ta maszyna stała się znana jako Maszyna Turinga.

Alan wyobrażał sobie swoją maszynę jako długą taśmę z zapisanymi na niej informacjami w postaci kodu binarnego (1 i 0). Maszyna miałaby również głowicę do odczytu / zapisu, która przesuwa się wzdłuż taśmy odczytując każdy kwadrat, jeden po drugim. Kod wymagałby od komputera problemu obliczeniowego, a taśma byłaby tak długa, jak to było potrzebne do osiągnięcia rozwiązania.

Gdy głowa przesuwa się wzdłuż taśmy, maszyna postępuje zgodnie z prostymi instrukcjami, które regulują jej reakcję. Odczytuje taśmę, postępuje zgodnie z instrukcjami i wykonuje określoną akcję, aby napisać nowy kod podczas ruchu. Ten nowy wzorzec kodu jest odpowiedzią na problem. Hipotetyczna maszyna Turinga może rozwiązać każdy problem obliczeniowy, który można wyrazić w kodzie (i który ma obliczalną odpowiedź).

Urządzenie lub język programowania uważa się za Turing Complete, gdy może replikować maszynę Turinga, uruchamiając dowolny program lub rozwiązując problem, który maszyna Turing może uruchomić lub rozwiązać. Z drugiej strony, jeśli urządzenie lub język programowania nie jest w stanie tego zrobić, mówi się, że jest to Turing Incomplete.

Prosty kalkulator jest przykładem systemu, który jest niepełny Turinga, ponieważ może wykonywać tylko kilka rodzajów obliczeń. Natomiast programowalny kalkulator naukowy (zdolny do wykonywania wszelkiego rodzaju obliczeń) można uznać za maszynę Turinga.

Blockchain i kompletność Turinga

Podczas gdy niektóre zastosowania technologii blockchain są Turing Complete, inne są Turing niekompletne. Różni się to w zależności od zastosowanej technologii skryptowej. Na przykład język skryptowy używany w Bitcoin został celowo zaprojektowany jako Turing Incomplete, ponieważ spełnia swoje zadanie, a zwiększona złożoność może potencjalnie powodować problemy. Upraszczając, programiści mogą z dużą dokładnością przewidzieć, jak zareaguje w skończonej liczbie sytuacji, w których jest używany.

Z drugiej strony Ethereum jest zbudowany jako blockchain Turinga. Jest to ważne, ponieważ musi zrozumieć umowy, które składają się na inteligentne umowy. Będąc Turing Complete, Ethereum jest w stanie zrozumieć i wdrożyć wszelkie przyszłe umowy, nawet te, o których jeszcze nie pomyślano. Innymi słowy, kompletność Turinga Ethereum oznacza, że ​​jest w stanie wykorzystać swoją bazę kodu do wykonania praktycznie każdego zadania, o ile ma prawidłowe instrukcje, wystarczającą ilość czasu i moc przetwarzania.