At the time of writing, the following is written in the Public VM Architecture page in the documentation.
Q: Do we want to support JUMP/JUMPI instructions for public ACIR++ functions? Would be very nice to have but creates discontinuity between public/private functions.
Can this be expanded here? How does it create discontinuity between public and private functions?
Thanks for posting
Private functions are compiled into circuits, so they can’t have jump instructions (if you have an
if statement in a circuit, both ‘branches’ of the statement get executed; there’s no “jump”). Public functions, on the other hand, are compiled to opcodes, and those opcodes are then ‘executed’ in a VM circuit. So for public functions, we can have more traditional (non-circuit) opcodes.