Існує багато способів втілити щось, у що можна реалізувати тюрінг-машину.
Якщо ви дивитесь на процесори, найбільш придатним є, мабуть, модель машини реєстрації . Найпростіший з них (з точки зору символів) - це багатомільйонний два символи ( mark
і blank
). Якщо ви йдете на що - то не зовсім як езотеричне, то inc(r)
, dec(r)
і jz(r,z)
(стрибок , якщо регістр r
дорівнює нулю в інструкції z
) або clr(r)
(прозорий r
) inc
, je(i,j,z)
(перехід , якщо регістр я і J рівні інструкції г).
Я бачив згадку про машину реєстру, яка є:
- inc (i, m) - приріст регістру i та перехід до рядка m
- jzdec (i, m1, m2) - якщо регістр i дорівнює 0, перейдіть до рядка m, інакше зменшення i, і перейдіть до рядка m2
який також є повним - його машина реєстру Мінських, хоча вона має інші обмеження щодо даних на стрічці (це має бути номер Gödel, що зберігає стан, а не окремі регістри)
Це воно. Нічого більше.
Отже, чому замість цього не використовуються ці ультрарискові процесори? Справжній біль написати компілятор для них, і ви відмовитеся від багатьох інших речей, які може зробити процесор. Дуже приємно мати побітку and
, add
а не намагатися робити все із збільшенням регістрів і циклічним циклом. Це основа улюбленої мови програмування під назвою Brainfuck, яка має 8 інструкцій.
>
приріст покажчика даних
<
зменшення покажчика даних
+
збільшення даних за покажчиком даних
-
зменшення даних за покажчиком даних
.
вивести дані за покажчиком даних
,
зчитувати введення даних, зберігаючи дані в покажчику даних
[
якщо дані вказівника дорівнюють нулю, замість того, щоб переміщувати вказівник інструкції вперед, переходьте його до команди після відповідної ]
команди
]
якщо дані за вказівником ненульові, замість того, щоб переміщувати вказівник інструкції вперед, перейдіть назад до команди після відповідної ]
команди
Можна знайти компілятори до Brainfuck, хоча в ньому насправді не цікаво робити навіть прості речі. Якщо ви не насолоджуєтесь розчаруванням, що є метою мови.
Пов'язане читання: