Почему язык сценариев должен быть "намеренно неполным по Тьюрингу"?
Итак, я читал о Bitcoin Script в их официальной документации и нашел следующую строку: "Скрипт прост, основан на стеке и обрабатывается слева направо. Он специально не является полным по Тьюрингу, без циклов". Я пытался рассуждать трудно, но не мог понять, почему кто-то делает язык "намеренно не полным по Тьюрингу". Что является причиной этого? Что произойдет, если язык станет полным по Тьюрингу? И, продолжая далее, имеет ли отношение "без циклов" какое-либо отношение к сценарию, не являющемуся полным по Тьюрингу?
2 ответа
Возможные причины:
- безопасность: если циклов нет, программа всегда завершается. пользователь не может повесить переводчика. если, кроме того, существует ограничение на размер скрипта, вы можете иметь довольно ограниченные временные ограничения. Другой пример языка без петель - это запросы Google. если бы Google позволил зацикливаться, пользователи могли бы убить свои серверы
- простота: отсутствие циклов делает язык намного проще для чтения и записи непрограммистами
- нет необходимости: если в этом нет необходимости, то зачем?
Основная причина в том, что биткойн-скрипты выполняются всеми майнерами при обработке / проверке транзакций, и мы не хотим, чтобы они застревали в бесконечном цикле. Другая причина заключается в том, что согласно этому сообщению от Майка Хирна, биткойн-скрипт был запоздалой мыслью Сатоши, чтобы попытаться включить несколько типов транзакций, которые он имел в виду. Это может объяснить тот факт, что он не очень хорошо продуман и мало выражен.
Ethereum использует другой подход, разрешая произвольные циклы, но заставляя пользователя платить за этапы выполнения.