- Improving the efficiency of the parser regarding the anonnymous components and tuples.
- Improving the substitution process: better compilation times for --O1 and --O2.
- Improving the handling of the underscore substitution.
- Extending the substitution to allow the inheritance of signal tags.
- Removing unused signal when applying --O1. (If a signal does not appear in any constraint, it is removed).
- Solving bug in the release of the memory of the components.
- Improving error messages: invalid access and invalid assignment.
- Avoiding side effects in out of bounds log operations.
- Adding check to detect components that are created but do not receive all their inputs.
- Fixing field size of goldilocks when writing r1cs file.
- Fixing a problem with the use of integer division and ===, <== operators. If an integer division is involved in the expression of one of these operators, then we consider the expression as no quadratic.
- Fixing bug in code generation of constraint equalities with arrays
- Fixed bug in C++ witness generation: function release_memory_component failed when releasing the memory of an array of components with some empty positions
- Fixed bug in logging of arithmetic expressions
- New feature of anonymous components: programmers can pass the parameters indicate the input names receiving the values.See here.
- circom now exits with 0 when it finishes successfully (last version exists with Exist(0) which broke some projects).
- Improving tags assignment: case multiple assignments in an array giving the same value to a tag.
- Allowing in cpp the use of binary, octal and hexadecimal numbers as inputs from a json file
- Adding support for non-64bit architectures.
- Witness_calculator adapted to work with negative numbers in the json input.
- Fixing bug in C++ witness generation: function Fr_toInt in fr.asm
- Improving error handling division by zero (instead of throwing a panic)
- Improving the memory consumption during the C++ witness generation.
- Adding a warning if the programmer is using the operator <-- when it is possible to use <== instead (if the right side is a quadratic expression and the instruction is not contained in a custom template).
- Signal ids in custom templates changed to 64 bits.
- Array sizes are expected to be usize. Now, we throw an error in other case.
- Separating optimization option -O2 in two different options: --O2 and --O2rounds. Explanation can be found here. The default option is currently --O2.
- Writing Sections 4 and 5 of the r1cs file, only if "pragma custom_templates" is used (which is needed if custom templates are present).
- Improving --O1 optimization.
- Adding a new documentation section about the different compilation options and flags.
- Fixing -l option to disallow several values for one option: each value must have its own -l option.
- Adding a link option -l that works as usual in other programming languages, to include a directory to look for the circuits indicated by the directive include.
- Adding a warning if the programmer is using the operator <-- when it is possible to use <== instead (if the right side is a quadratic expression).
- circom returns 0 if everything was correct and a number greater than 0 if something was wrong.
- Changing the log operator to work as usual in other programming languages.
- The keyword parallel can be used per instance instead of per template. Now, parallel can be indicated before the instantiation call to make parallel such a particular instance.
- Wasm Functions getMinorVersion and getPatchVersion to obtain the minor and the patch version.
- Fixing main.cpp to allow handling a main component without inputs.
- New log version has to be applied in every version of wasm files. (By a mistake, it was not updated for every wasm files.)
- Log operation receives as parameters a list of expressions and string. (Documentation is here.
- New heuristics that improves the constraint simplification process is added by default. The old version of the simplification process can be still used using the option "--use_old_simplification_heuristics".
- Initialization of every array position to 0 in both C and WASM witness generator.
- New check of size vector when vector assignment:
+ If a vector is assigned in a smaller vector, then an error is produced.
+ If a vector is assigned in a larger vector, then a warning is produced. (The remaining positions will have their previous values, or 0
otherwise. - Improvement of the trace error message.
- Adding three new prime numbers in circom and a flag to choose which one to use.
- Adding custom templates to circom. (Documentation is here).
- Adding published binaries for mac, linux and windows.
- Removing non-determinism in linear constraints that cannot be removed.
- Making deterministic the code generation.
- Adding signal one in the wires counting for optimization option '-O0'.
- Bug in conditional creation of components inside loops
- Improvement of unused signals removal in constraint optimization.
- macos (x86_64) support for cpp backend added: use template to generate makefile (Not available for M1).
- wabt dependency swapped to wast dependency instead.
- Improvement of the known/unknown analysis.
- Single signal declaration with initialization added for both <== and <--.
- Input signal size check added in wasm/JS and C++ generated code.
- Recommendation of using C++ when the memory needed is beyond WebAssembly limit added.
- Making deterministic the R1CS file: constraints will be always written in the R1CS file in the same order.
- Bug in C++ error trace management for asserts in functions.
- Bug in multiple line(s) comments.
- Bug in unassigned inputs of arrays of size 0.
- Bug in the use of constant division operation on constraints.
- Bug in evaluation of expressions involving subcomponents signals.
- Improvement in the check all array dimensions in its definition have known size.
- A new verbose flag is added: If –verbose is set the compiler shows log messages during constraint generation.
- Bug in functions that return calls to other functions.
- A check that all inputs are set is added in the wasm/JS and C++ generated code.
- Improvement of the “merge_code” implementation in code generators.
- Error trace printed in the C++ code when an assert fails.
- Compiler versions in circom programs handling added (improving the pragma instruction).
- Arrays of components with uninstantiated positions are handled.
- Comments in the wat code only generated when –wat flag is used.
- Bug in the line number generation for wasm error message.
- Bug: R1CS map is an array of 64bit elements (instead of 32bit).
- Bug on the initial memory size (too large) defined in the generated wasm code and error message handling in wasm generation added.
- Bug with use of circuit file names with dots.