In prior posts to this blog, we’ve certainly aired our grievances with the prior IR release (v1, whereas we’re now at v2).
You may want to go back and skim the previous retrospective and our BOLT fast interpreter.
But if you don’t want to review those, IR1’s (IR1 was the old IR’s code name) memory layout was completely disorganized, and some of its higher level features proved difficult (@switch) or slow (@for) to implement.
We spent a bit of time developing the BOLT interpreter with a few tricks for greatly accelerating how loops could be processed.
In our previous post we took a first look at the SIEVE IR, presenting it as impartially as possible.
Today we will take a more "opinionated" or normative look at the IR.
On the one hand, we are very proud of this accomplishment — (to our knowledge) the first widely implemented circuit representation for ZK.
However, we’d also like to acknowledge that the IR has its flaws and highlight where we think there is room for improvement.