В чем разница между переменной и сигналом, а также между функцией и шаблоном в Circcom?
Это может быть вопрос новичка:
В документе говорится, что сигналы являются частью схемы, а переменные аналогичны переменным в других языках программирования. Но что касается проверяемых вычислений, я бы предположил, что вычисления, выполняемые над переменными, также будут проверены и, следовательно, станут частью схемы. В этом смысле могу ли я рассматривать сигналы как интерфейс шаблона, а переменные как внутренние состояния? Если да, то каковы различия между внутренними сигналами и переменными?
Или когда следует использовать переменную, а когда следует использовать сигнал?
У меня те же вопросы по функциям и шаблонам. Почему нам нужны оба, а не один? Когда следует использовать функцию, а когда шаблон?
Моя основная путаница заключается в том, что я думал, что circom создаст схему, инкапсулирующую все, что определено в файлах circom. Но в языке определены два типа конструкций (переменная/функция и сигнал/шаблон), причем одна из них более ограничительна, чем другая, и в качестве причины более строгих ограничений сигнала/шаблона указывается «быть частью схемы», что делает его более строгим. похоже, что переменные/функции не являются частью схемы.
Спасибо!
2 ответа
Думаю, теперь я могу ответить на свой вопрос. (с помощью этого сообщения https://dev.to/spalladino/a-beginners-intro-to-coding-zero-knowledge-proofs-c56#:~:text=For%20instance%2C%20Circom%20only%20allows,be%20the%20set%20of%20ограничений.)
Видимо я думал, что будет проверена вся программа, но на самом деле программист сам решает, *какая часть программы будет проверена. Файл circom имеет 1. часть выполнения «<--» и 2. часть проверки «===". Выполнение не проверяется автоматически, если не сопровождается спецификациями проверки.
Это позволяет программисту писать сложные исполнения, которые не проверяются, и проверять интерфейс для проверки связи между входами и выходами.
Я все еще пытаюсь понять, почему это хорошая идея. Это открывает возможность вычислений с недостаточными ограничениями и делает вычисления менее надежными. Кроме того, их труднее писать, потому что теперь мне нужно хорошо подумать о том, как писать ограничения. Преимущество этого в том, что программа становится более выразительной.
Хотелось бы узнать, как этот выбор конструкции повлияет на эффективность технологии в крупных проектах. Легко ли избежать недостаточно ограниченных вычислений в большом проекте, каков опыт разработчиков одновременного написания двух программ (выполнение + проверка) для больших проектов и т. д.
Похоже, вы пытаетесь понять концепцию сигналов и переменных, а также функций и шаблонов в контексте circom, языка программирования схем.
В схемных вычислениях основными компонентами являются сигналы. Это эквивалент проводов в электронной цифровой цепи. Сигналы можно рассматривать как интерфейс шаблона, соединяющий различные компоненты и заставляющий их взаимодействовать или взаимодействовать друг с другом.
С другой стороны, переменные в circom больше похожи на переменные в стандартных языках программирования. Хотя переменные также содержат значения, как и сигналы, они не являются частью сами по себе. Переменные используются внутри функций или вычислений, но они являются частью схемы. Вот почему документация предполагает, что они есть.
Когда использовать переменные, а когда сигналы? По аналогии: если вы создаете обычную программу, вы можете рассматривать сигналы как общедоступные функции, а переменные — как частные функции. Сигналы — это общедоступный интерфейс вашей схемы, то, к чему будут подключаться схемы. Однако переменные используются внутри вас, отсюда и термин «внутренние состояния». Другие схемы не могут видеть их или подключаться к ним напрямую.
Когда дело доходит до функций и шаблонов, думайте с точки зрения ООП (объектно-ориентированное программирование). Шаблон можно рассматривать как класс, определяющий тип объекта с определенными свойствами и методами (сигналами). С другой стороны, функция похожа на метод внутри этого класса.
Причина использования обоих — обеспечение хорошей организации кода и возможности повторного использования. Функции используются, когда операция должна быть абстрагирована и может использоваться несколько раз, в то время как шаблоны инкапсулируют данные и функциональность схемы вместе и могут использоваться для создания нескольких экземпляров этой схемы.
Помните, что основная цель circom — не создание программы, а схема математического доказательства. Вот почему некоторые аспекты языка могут показаться нелогичными или ограничительными по сравнению с традиционными языками программирования.