Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: remove type arrays for flat slices #3466

Merged
merged 5 commits into from
Nov 27, 2023
Merged

Conversation

TomAFrench
Copy link
Member

Description

Problem*

Resolves

Summary*

This PR removes the element type sizes array for flat slices as we can use the var_index value directly without performing a lookup against a type array.

Additional Context

Documentation*

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [Exceptional Case] Documentation to be submitted in a separate PR.

PR Checklist*

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

* master: (56 commits)
  chore: Remove concept of storage slot from the compiler (#3582)
  chore: Update ACIR artifacts (#3591)
  feat: export `CompiledCircuit` from codegened TS (#3589)
  fix: use 128 bits for constant bit shift (#3586)
  fix: Somewhat reduce mem2reg memory usage (#3572)
  fix: Remove quotes from println output (#3574)
  chore: Rename error2 variable (#3584)
  chore: nargo fmt (#3587)
  feat: codegen typed interfaces for functions in `noir_codegen` (#3533)
  chore: add dependency on noir_js from docs package (#3559)
  chore: Docs 0.19.3 (#3545)
  chore(debugger): Inject abstract foreign call executor to debugger (#3550)
  chore: nargo fmt (#3549)
  fix: Compiler version error message (#3558)
  chore(docs): Update link to docs' GitHub (#3555)
  chore(fmt): refactor the way we handle shapes in the formatter (#3546)
  feat: add --check option to nargo fmt for dry-run formatting verification (#3530)
  chore: Update ACIR artifacts (#3528)
  chore: Release Noir(0.19.3) (#3514)
  chore: Updates bb dependency to 0.15.1 (#3536)
  ...
Copy link
Contributor

Changes to circuit sizes

Generated at commit: 2a9dbc21508524f40ad251e70c32175e66e4241a, compared to commit: 70ee787662cf52bfaada85b7d2e434f8e3893575

🧾 Summary (10% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
array_dynamic -47 ✅ -28.31% -200 ✅ -5.08%
brillig_unitialised_arrays -6 ✅ -54.55% -15 ✅ -46.88%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
conditional_1 6,991 (-350) -4.77% 38,799 (0) 0.00%
nested_array_dynamic 5,704 (-6) -0.11% 15,099 (-24) -0.16%
slice_dynamic_index 2,409 (-20) -0.82% 10,610 (-91) -0.85%
regression_mem_op_predicate 45 (-12) -21.05% 3,537 (-44) -1.23%
array_dynamic 119 (-47) -28.31% 3,734 (-200) -5.08%
brillig_unitialised_arrays 5 (-6) -54.55% 17 (-15) -46.88%

@TomAFrench
Copy link
Member Author

TomAFrench commented Nov 27, 2023

@kevaundray This actually gives us pretty significant improvements on both opcodes + constraints in the kernel circuits.

Master
+------------------------------------------+------------------------+--------------+----------------------+
| Package                                  | Language               | ACIR Opcodes | Backend Circuit Size |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_init                      | PLONKCSat { width: 3 } | 33999        | 529116               |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_inner                     | PLONKCSat { width: 3 } | 92945        | 709260               |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_ordering                  | PLONKCSat { width: 3 } | 136632       | 406444               |
+------------------------------------------+------------------------+--------------+----------------------+
| public_kernel_private_previous           | PLONKCSat { width: 3 } | 49144        | 511140               |
+------------------------------------------+------------------------+--------------+----------------------+
| public_kernel_public_previous            | PLONKCSat { width: 3 } | 49136        | 511132               |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_merge                             | PLONKCSat { width: 3 } | 514          | 45415                |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_base                              | PLONKCSat { width: 3 } | *            | *                    |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_root                              | PLONKCSat { width: 3 } | 2275         | 103892               |
+------------------------------------------+------------------------+--------------+----------------------+

This PR
+------------------------------------------+------------------------+--------------+----------------------+
| Package                                  | Language               | ACIR Opcodes | Backend Circuit Size |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_init                      | PLONKCSat { width: 3 } | 30052        | 514033               |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_inner                     | PLONKCSat { width: 3 } | 74056        | 635242               |
+------------------------------------------+------------------------+--------------+----------------------+
| private_kernel_ordering                  | PLONKCSat { width: 3 } | 110781       | 297721               |
+------------------------------------------+------------------------+--------------+----------------------+
| public_kernel_private_previous           | PLONKCSat { width: 3 } | 43646        | 489795               |
+------------------------------------------+------------------------+--------------+----------------------+
| public_kernel_public_previous            | PLONKCSat { width: 3 } | 43638        | 489787               |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_merge                             | PLONKCSat { width: 3 } | 514          | 45415                |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_base                              | PLONKCSat { width: 3 } | *            | *                    |
+------------------------------------------+------------------------+--------------+----------------------+
| rollup_root                              | PLONKCSat { width: 3 } | 2275         | 103892               |
+------------------------------------------+------------------------+--------------+----------------------+

We're also performing a bunch of constant index reads on arrays which don't get written to after initialization either so we can save a lot of constraints there too.

@TomAFrench TomAFrench marked this pull request as ready for review November 27, 2023 19:30
@TomAFrench
Copy link
Member Author

This PR is mildly janky, essentially we remove the type array when its just [0,1,2,3,4,5,6...] as we can just read the underlying array directly. We could improve this to also handle when the array elements take up multiple fields but are still constant size.

@TomAFrench TomAFrench added this pull request to the merge queue Nov 27, 2023
Merged via the queue into master with commit 8225b2b Nov 27, 2023
35 checks passed
@TomAFrench TomAFrench deleted the tf/remove-flat-type-arrays branch November 27, 2023 23:56
TomAFrench added a commit that referenced this pull request Nov 28, 2023
* master: (65 commits)
  chore: nargo fmt (#3612)
  fix: Flatten public inputs according to their index in numerial rather than ascii order (#3605)
  chore(docs): correct typo in `poseidon_hash` example in standard_library (#3608)
  feat: aztec-packages (#3599)
  chore: update code formatting to prevent parameter line wrapping (#3588)
  chore: Update ACIR artifacts (#3597)
  chore: Pull out aztec macros to their own crate and create an API for them in the compiler frontend (#3578)
  chore(ci): deduplicate javascript testing workflows (#3563)
  chore: Release Noir(0.19.4) (#3548)
  chore: update barretenberg to 0.16.0 (#3598)
  chore: move suite of test programs up to repository root (#3485)
  feat: send and receive unflattened public inputs to backend (#3543)
  feat: remove type arrays for flat slices (#3466)
  chore: clippy fix (#3561)
  chore: fix wrapping issue for constraints (#3590)
  feat: add support for tuple values in `noir_codegen` (#3592)
  chore: Remove concept of storage slot from the compiler (#3582)
  chore: Update ACIR artifacts (#3591)
  feat: export `CompiledCircuit` from codegened TS (#3589)
  fix: use 128 bits for constant bit shift (#3586)
  ...
TomAFrench added a commit that referenced this pull request Nov 28, 2023
* master: (47 commits)
  chore(docs): Links to Aztec docs from errors (#3423)
  chore: nargo fmt (#3612)
  fix: Flatten public inputs according to their index in numerial rather than ascii order (#3605)
  chore(docs): correct typo in `poseidon_hash` example in standard_library (#3608)
  feat: aztec-packages (#3599)
  chore: update code formatting to prevent parameter line wrapping (#3588)
  chore: Update ACIR artifacts (#3597)
  chore: Pull out aztec macros to their own crate and create an API for them in the compiler frontend (#3578)
  chore(ci): deduplicate javascript testing workflows (#3563)
  chore: Release Noir(0.19.4) (#3548)
  chore: update barretenberg to 0.16.0 (#3598)
  chore: move suite of test programs up to repository root (#3485)
  feat: send and receive unflattened public inputs to backend (#3543)
  feat: remove type arrays for flat slices (#3466)
  chore: clippy fix (#3561)
  chore: fix wrapping issue for constraints (#3590)
  feat: add support for tuple values in `noir_codegen` (#3592)
  chore: Remove concept of storage slot from the compiler (#3582)
  chore: Update ACIR artifacts (#3591)
  feat: export `CompiledCircuit` from codegened TS (#3589)
  ...
kevaundray added a commit that referenced this pull request Dec 1, 2023
🤖 I have created a release *beep* *boop*
---


<details><summary>0.20.0</summary>

## [0.20.0](v0.19.5...v0.20.0)
(2023-12-01)


### ⚠ BREAKING CHANGES

* avoid integer overflows
([#2713](#2713))
* return Pedersen structure in stdlib
([#3190](#3190))
* noir-wasm outputs debug symbols
([#3317](#3317))
* move mimc to hash submodule
([#3361](#3361))
* bump MSRV to 1.71.1
([#3353](#3353))
* Add semver checks for the compiler version in Nargo.toml
([#3336](#3336))
* Move circuit serialization circuit into acir
([#3345](#3345))
* change stdlib function `pedersen` to `pedersen_commitment`
([#3341](#3341))
* expose pedersen hash in acir and bb solver
([#3269](#3269))
* Switch to new pedersen implementation
([#3151](#3151))
* Pass ACIR to ACVM by reference rather than passing ownership
([#2872](#2872))
* Make for loops a statement
([#2975](#2975))
* **traits:** trait functions with a default implementation must not be
followed by a semicolon
([#2987](#2987))
* **wasm:** improve and simplify wasm compiler interface
([#2976](#2976))
* **wasm:** update wasm artifacts to match cli artifacts
([#2973](#2973))
* Maintain shape of foreign call arguments
([#2935](#2935))
* update to `bb` version 0.7.3
([#2729](#2729))
* **noir_js:** Rename inner and outer proof methods
([#2845](#2845))
* `generateWitness` now returns a serialized witness file
([#2842](#2842))
* Issue an error when a module is declared twice & fix module search
path ([#2801](#2801))
* Default integers to u64
([#2764](#2764))

### Features

* `compute_note_hash_and_nullifier` check
([#3216](#3216))
([4963c6c](4963c6c))
* **abi:** Throw errors rather than returning string from
`noirc_abi_wasm`
([#2817](#2817))
([df7b42c](df7b42c))
* **abi:** Tuples as inputs/outputs to main
([#2899](#2899))
([d8bd78f](d8bd78f))
* **acir:** Enable dynamic indices on non-homogenous arrays
([#2703](#2703))
([622d2e4](622d2e4))
* **acir:** Handle dynamic array operations for nested slices
([#3187](#3187))
([e026319](e026319))
* **acir:** Set dynamic array values
([#3054](#3054))
([e871866](e871866))
* **acvm_js:** Export black box solver functions
([#2812](#2812))
([da8a98e](da8a98e))
* **acvm:** Separate ACVM optimizations and transformations
([#2979](#2979))
([5865d1a](5865d1a))
* Add --check option to nargo fmt for dry-run formatting verification
([#3530](#3530))
([4469707](4469707))
* Add `destroy` method to `Noir`
([#3105](#3105))
([7e40274](7e40274))
* Add `execute` method to `Noir` class
([#3081](#3081))
([17bdd7e](17bdd7e))
* Add `FieldElement::from&lt;usize&gt;` implementation
([#3647](#3647))
([8b7c5aa](8b7c5aa))
* Add `noir_codegen` package
([#3392](#3392))
([6c4cd4d](6c4cd4d))
* Add ACIR serializer C++ codegen
([#2961](#2961))
([7556982](7556982))
* Add an options object to `BarretenbergBackend` constructor
([#3105](#3105))
([7e40274](7e40274))
* Add aztec selectors for event structs
([#2983](#2983))
([982380e](982380e))
* Add bb interface implementation
([#2902](#2902))
([fe92dc0](fe92dc0))
* Add check for overlapping generic traits
([#3307](#3307))
([8cf81b6](8cf81b6))
* Add conditional compilation of methods based on the underlying field
being used ([#3045](#3045))
([2e008e2](2e008e2))
* Add crate for pub modifier
([#3271](#3271))
([e7a1a1a](e7a1a1a))
* Add debugger commands to introspect (and modify) the current state
([#3391](#3391))
([9e1ad85](9e1ad85))
* Add experimental REPL-based debugger
([#2995](#2995))
([281c696](281c696))
* Add exports of JS black box solvers to noirJS
([#3295](#3295))
([8369871](8369871))
* Add generic count check for trait methods
([#3382](#3382))
([a9f9717](a9f9717))
* Add JS types for ABI and input maps
([#3023](#3023))
([599e7a1](599e7a1))
* Add LSP command to profile opcodes in vscode
([#3496](#3496))
([6fbf77a](6fbf77a))
* Add lsp formatting
([#3433](#3433))
([286c876](286c876))
* Add noir types package
([#2893](#2893))
([e8fc868](e8fc868))
* Add package version to Nargo.toml metadata
([#3427](#3427))
([9e1717c](9e1717c))
* Add profile info print out
([#3425](#3425))
([a8b5fa8](a8b5fa8))
* Add semver checks for the compiler version in Nargo.toml
([#3336](#3336))
([0e530cf](0e530cf))
* Add special case for boolean AND in acir-gen
([#3615](#3615))
([824039b](824039b))
* Add support for tuple values in `noir_codegen`
([#3592](#3592))
([346d75f](346d75f))
* Allow a trait to be implemented multiple times for the same struct
([#3292](#3292))
([51831df](51831df))
* Allow providing custom foreign call executors to `execute_circuit`
([#3506](#3506))
([d27db33](d27db33))
* Allow traits to have generic functions
([#3365](#3365))
([0f9af65](0f9af65))
* Avoid integer overflows
([#2713](#2713))
([7d7d632](7d7d632))
* Aztec-packages
([#3599](#3599))
([2cd6dc3](2cd6dc3))
* Aztec-packages
([#3626](#3626))
([e0a96ea](e0a96ea))
* Cache debug artifacts
([#3133](#3133))
([c5a6229](c5a6229))
* Check where clauses when searching for trait impls
([#3407](#3407))
([84c6604](84c6604))
* Codegen typed interfaces for functions in `noir_codegen`
([#3533](#3533))
([290c463](290c463))
* Compile without a backend
([#3437](#3437))
([d69cf5d](d69cf5d))
* Complex slice inputs for dynamic slice builtins
([#3617](#3617))
([8b23b34](8b23b34))
* Contract events in artifacts
([#2873](#2873))
([4765c82](4765c82))
* Copy on write optimization for brillig
([#3522](#3522))
([da29c02](da29c02))
* Data bus ([#3508](#3508))
([6b0bdbc](6b0bdbc))
* **debugger:** Highlight current src code loc
([#3174](#3174))
([6b87582](6b87582))
* **debugger:** Print limited source code context
([#3217](#3217))
([dcda1c7](dcda1c7))
* Default integers to u64
([#2764](#2764))
([01cb041](01cb041))
* Dynamic indexing of non-homogenous slices
([#2883](#2883))
([72c3661](72c3661))
* Enable the `fmt` command in the help menu
([#3328](#3328))
([63d414c](63d414c))
* Expand trait impl overlap check to cover generic types
([#3320](#3320))
([a01549b](a01549b))
* Export `CompiledCircuit` from codegened TS
([#3589](#3589))
([e06c675](e06c675))
* Expose pedersen hash in acir and bb solver
([#3269](#3269))
([0108b6c](0108b6c))
* Extract Brillig VM to allow step debugging
([#3259](#3259))
([f6431f9](f6431f9))
* Format infix expressions
([#3001](#3001))
([7926ada](7926ada))
* **formatter:** Add formatter support for array literals
([#3061](#3061))
([a535321](a535321))
* Handle constant index operations on simple slices
([#3464](#3464))
([7ae12f8](7ae12f8))
* Handle warnings in evaluator
([#3205](#3205))
([5cfd156](5cfd156))
* Implement `bound_constraint_with_offset` in terms of `AcirVar`s
([#3233](#3233))
([8d89cb5](8d89cb5))
* Implement automatic dereferencing for index expressions
([#3082](#3082))
([8221bfd](8221bfd))
* Implement automatic dereferencing for indexing lvalues
([#3083](#3083))
([6e2b70a](6e2b70a))
* Implement euclidean division and signed division in terms of
`AcirVar`s ([#3230](#3230))
([b8b7782](b8b7782))
* Implement impl specialization
([#3087](#3087))
([44716fa](44716fa))
* Implement integer printing
([#3577](#3577))
([6601408](6601408))
* Implement raw string literals
([#3556](#3556))
([87a302f](87a302f))
* Implement string escape sequences
([#2803](#2803))
([f7529b8](f7529b8))
* Implement where clauses on impls
([#3324](#3324))
([4c3d1de](4c3d1de))
* **lsp:** Add "info" codelens
([#2982](#2982))
([80770d9](80770d9))
* **lsp:** Add goto definition for functions
([#3656](#3656))
([7bb7356](7bb7356))
* Maintain shape of foreign call arguments
([#2935](#2935))
([f7869e6](f7869e6))
* Make generic impls callable
([#3297](#3297))
([8d9b738](8d9b738))
* Manage breakpoints and allow restarting a debugging session
([#3325](#3325))
([f502108](f502108))
* Nargo test runtime callstacks and assert messages without string
matching ([#2953](#2953))
([1b6a4e6](1b6a4e6))
* **noir_js:** Allow providing foreign call handlers in noirJS
([#3294](#3294))
([c76b0f8](c76b0f8))
* Noir-wasm outputs debug symbols
([#3317](#3317))
([f9933fa](f9933fa))
* Noir-wasm takes dependency graph
([#3213](#3213))
([a2c8ebd](a2c8ebd))
* Old docs issues
([#3195](#3195))
([26746c5](26746c5))
* Optimize euclidean division acir-gen
([#3121](#3121))
([2c175c0](2c175c0))
* Oracle mocker for nargo test
([#2928](#2928))
([0dd1e77](0dd1e77))
* Pass ACIR to ACVM by reference rather than passing ownership
([#2872](#2872))
([b3a9c34](b3a9c34))
* Pass brillig bytecode to VM by reference
([#3030](#3030))
([4ee290b](4ee290b))
* Perform compile-time euclidean division on constants
([#3231](#3231))
([3866d7e](3866d7e))
* Prevent unnecessary witness creation in euclidean division
([#2980](#2980))
([c6f660e](c6f660e))
* Properly track equivalence of witnesses generated for black box
functions ([#3428](#3428))
([20b70c2](20b70c2))
* Provide formatting subcommand
([#2640](#2640))
([a38b15f](a38b15f))
* Publish aztec build of noir_wasm
([#3049](#3049))
([3b51f4d](3b51f4d))
* Refactor debugger and separate core from UI
([#3308](#3308))
([8466810](8466810))
* Remove redundant predicate from brillig quotients
([#2784](#2784))
([a8f18c5](a8f18c5))
* Remove type arrays for flat slices
([#3466](#3466))
([8225b2b](8225b2b))
* Remove unnecessary truncation of boolean multiplication
([#3122](#3122))
([39dbcf1](39dbcf1))
* Replace boolean range constraints with arithmetic opcodes
([#3234](#3234))
([949222c](949222c))
* Return compilation errors from noir_wasm
([#3091](#3091))
([55f63c9](55f63c9))
* Return Pedersen structure in stdlib
([#3190](#3190))
([be30d59](be30d59))
* Reuse witnesses more when interacting with memory
([#3658](#3658))
([5a4a73d](5a4a73d))
* Reuse witnesses which have been assigned constant values during ACIR
gen ([#3137](#3137))
([9eb43e2](9eb43e2))
* Save Brillig execution state in ACVM
([#3026](#3026))
([88682da](88682da))
* Send and receive unflattened public inputs to backend
([#3543](#3543))
([a7bdc67](a7bdc67))
* Solve `fixed_base_scalar_mul` black box functions in rust
([#3153](#3153))
([1c1afbc](1c1afbc))
* **ssa:** Multiple slice mergers
([#2753](#2753))
([8f76fe5](8f76fe5))
* **stdlib:** Optimize constraint counts in sha256/sha512
([#3253](#3253))
([d3be552](d3be552))
* Switch to new pedersen implementation
([#3151](#3151))
([35fb3f7](35fb3f7))
* **traits:** Add impl Trait as function return type
[#2397](#2397)
([#3176](#3176))
([4cb2024](4cb2024))
* **traits:** Add trait impl for buildin types
([#2964](#2964))
([2c87b27](2c87b27))
* **traits:** Added checks for duplicated trait associated items (types,
consts, functions)
([#2927](#2927))
([d49492c](d49492c))
* **traits:** Allow multiple traits to share the same associated
function name and to be implemented for the same type
([#3126](#3126))
([004f8dd](004f8dd))
* **traits:** Implement trait bounds typechecker + monomorphizer passes
([#2717](#2717))
([5ca99b1](5ca99b1))
* **traits:** Improve support for traits static method resolution
([#2958](#2958))
([0d0d8f7](0d0d8f7))
* **traits:** Multi module support for traits
([#2844](#2844))
([4deb07f](4deb07f))
* Use ranges instead of a vector for input witness
([#3314](#3314))
([b12b7ec](b12b7ec))
* **wasm:** Improve and simplify wasm compiler interface
([#2976](#2976))
([1b5124b](1b5124b))
* **wasm:** Update wasm artifacts to match cli artifacts
([#2973](#2973))
([ce16c0b](ce16c0b))


### Bug Fixes

* "Missing trait impl" error in trait dispatch
([#3440](#3440))
([52daaec](52daaec))
* `compute_note_hash_and_nullifier` compiler check
([#3351](#3351))
([4e2d35f](4e2d35f))
* **3275:** Activate brillig modulo test with negative integers
([#3318](#3318))
([31c493c](31c493c))
* **3300:** Cache warnings into debug artefacts
([#3313](#3313))
([cb5a15b](cb5a15b))
* ACIR optimizer should update assertion messages
([#3010](#3010))
([758b6b6](758b6b6))
* **acvm:** Return false rather than panicking on invalid ECDSA
signatures ([#2783](#2783))
([155abc0](155abc0))
* Add `pub` modifier to grumpkin functions
([#3036](#3036))
([f8990d7](f8990d7))
* Add compiler error message for invalid input types
([#3220](#3220))
([989e80d](989e80d))
* Add size checks to integer literals
([#3236](#3236))
([7f8fe8c](7f8fe8c))
* Adding proving key initialization
([#3322](#3322))
([3383740](3383740))
* Allow `where` clause on all functions and improve error message
([#3465](#3465))
([1647e33](1647e33))
* Allow constructors in parentheses in `if` conditions and `for` ranges
([#3219](#3219))
([ad192d1](ad192d1))
* Allow two `TypeVariable::Constant(N)` to unify even if their constants
are not equal ([#3225](#3225))
([cc4ca4b](cc4ca4b))
* Apply predicate to over/underflow checks
([#3494](#3494))
([fc3edf7](fc3edf7))
* **aztec_nr:** Serialise arrays of structs
([#3401](#3401))
([e979a58](e979a58))
* Change non-constant argument errors from `to_be_radix` from ICE to
proper error ([#3048](#3048))
([19ce286](19ce286))
* Check for overflow with hexadecimal inputs
([#3004](#3004))
([db1e736](db1e736))
* Compiler version error message
([#3558](#3558))
([026a358](026a358))
* Complete debug metadata
([#3228](#3228))
([2f6509d](2f6509d))
* Conditionally run the "Create or Update PR" step in acir artifacts
rebuild workflow
([#2849](#2849))
([63da875](63da875))
* Corrected the formatting of error message parameters in index out of
bounds error ([#3630](#3630))
([3bba386](3bba386))
* **debugger:** Step through foreign calls and breakpoints inside
Brillig blocks ([#3511](#3511))
([5d77d7a](5d77d7a))
* Determinism of fallback transformer
([#3100](#3100))
([12daad1](12daad1))
* Disable modulo for fields
([#3009](#3009))
([7e68976](7e68976))
* Disallow returning constant values
([#2978](#2978))
([79c2e88](79c2e88))
* Do not perform dead instruction elimination on mod,div unless rhs is
constant ([#3141](#3141))
([af3d771](af3d771))
* Do not simply divisions
([#3664](#3664))
([e5b981b](e5b981b))
* Docker builds ([#3620](#3620))
([f3eac52](f3eac52))
* **docs:** Update `editUrl` path for docusaurus
([#3184](#3184))
([4646a93](4646a93))
* Download expected `bb` version if installed backend has version
mismatch ([#3150](#3150))
([3f03435](3f03435))
* Error message for assigning the wrong type is backwards
[#2804](#2804)
([#2805](#2805))
([b2d62bf](b2d62bf))
* Finer bit size in bound constrain
([#2869](#2869))
([68385e2](68385e2))
* Fix aztec library after nargo fmt
([#3014](#3014))
([f43083c](f43083c))
* Fix crash when using undeclared traits
([#3509](#3509))
([8bb095a](8bb095a))
* Fix lexer error formatting
([#3274](#3274))
([74bd517](74bd517))
* Fix method `program_counter`, change method signature
([#3012](#3012))
([5ea522b](5ea522b))
* Fix panic in some cases when calling a private function
([#2799](#2799))
([078d5df](078d5df))
* Fix panic when using repeated arrays which define variables
([#3221](#3221))
([c4faf3a](c4faf3a))
* Fix should_fail_with
([#2940](#2940))
([4f07b84](4f07b84))
* Fix subtract with underflow in flattening pass
([#2796](#2796))
([f2ed505](f2ed505))
* Fixing versioning workflow
([#3296](#3296))
([3d5e43a](3d5e43a))
* Flatten public inputs according to their index in numerial rather than
ascii order ([#3605](#3605))
([a1f6343](a1f6343))
* Follow dependencies when looking for a struct
([#3405](#3405))
([561b1b8](561b1b8))
* Force recompilation when `output_debug` flag is set.
([#2898](#2898))
([9854416](9854416))
* **frontend:** Error on unsupported integer annotation
([#2778](#2778))
([90c3d8b](90c3d8b))
* Impl methods are no longer placed in contracts
([#3255](#3255))
([b673b07](b673b07))
* Improve error message when multiplying unit values
([#2950](#2950))
([57b7c55](57b7c55))
* Include .nr and .sol files in builds
([#3039](#3039))
([ae8d0e9](ae8d0e9))
* Issue an error when a module is declared twice & fix module search
path ([#2801](#2801))
([7f76910](7f76910))
* Lack of cjs package version
([#2848](#2848))
([adc2d59](adc2d59))
* Make for loops a statement
([#2975](#2975))
([0e266eb](0e266eb))
* Match rust behaviour for left-shift overflow
([#3518](#3518))
([2d7ceb1](2d7ceb1))
* Minor problems with `aztec` publishing
([#3095](#3095))
([0fc8f20](0fc8f20))
* Move mimc to hash submodule
([#3361](#3361))
([3ec29f1](3ec29f1))
* Overflow checks for constant folding
([#3420](#3420))
([b7a6383](b7a6383))
* Parse parenthesized lvalues
([#3058](#3058))
([50ca58c](50ca58c))
* Prevent duplicated assert message transformation
([#3038](#3038))
([082a6d0](082a6d0))
* Prevent mutating immutable bindings to mutable types
([#3075](#3075))
([d5ee20e](d5ee20e))
* **println:** Enable printing of arrays/strings &gt;2 in fmt strings
([#2947](#2947))
([309fa70](309fa70))
* Recompile artefacts from a different noir version
([#3248](#3248))
([7347b27](7347b27))
* Remove cast for field comparisons in brillig
([#2874](#2874))
([1fc1fdb](1fc1fdb))
* Remove duplication of code to load stdlib files
([#2868](#2868))
([b694aab](b694aab))
* Remove quotes from println output
([#3574](#3574))
([127b6aa](127b6aa))
* Remove sha2_block test
([#3360](#3360))
([a48c03b](a48c03b))
* Restrict fill_internal_slices pass to acir functions
([#3634](#3634))
([0cad9aa](0cad9aa))
* Return error rather than panicking on unreadable circuits
([#3179](#3179))
([d4f61d3](d4f61d3))
* Show println output before an error occurs in `nargo execute`
([#3211](#3211))
([2f0b80d](2f0b80d))
* Silence unused variable warnings in stdlib
([#2795](#2795))
([5747bfe](5747bfe))
* Somewhat reduce mem2reg memory usage
([#3572](#3572))
([9b9ed89](9b9ed89))
* Split conditional_regression tests
([#2774](#2774))
([8ed8832](8ed8832))
* **ssa:** Do not replace previously constrained values
([#2647](#2647))
([d528844](d528844))
* **traits:** Trait functions with a default implementation must not be
followed by a semicolon
([#2987](#2987))
([a3593c0](a3593c0))
* Transform hir before type checks
([#2994](#2994))
([a29b568](a29b568))
* Update link to recursion example
([#3224](#3224))
([10eae15](10eae15))
* Use 128 bits for constant bit shift
([#3586](#3586))
([2ca9b05](2ca9b05))
* Use pedersen_hash for merkle tree
([#3357](#3357))
([6b74d31](6b74d31))
* Verify impls arising from function calls exist
([#3472](#3472))
([d7f919d](d7f919d))


### Miscellaneous Chores

* `generateWitness` now returns a serialized witness file
([#2842](#2842))
([57d3f37](57d3f37))
* Bump MSRV to 1.71.1
([#3353](#3353))
([78f2127](78f2127))
* Change stdlib function `pedersen` to `pedersen_commitment`
([#3341](#3341))
([964b777](964b777))
* Move circuit serialization circuit into acir
([#3345](#3345))
([122119b](122119b))
* **noir_js:** Rename inner and outer proof methods
([#2845](#2845))
([71dbbb8](71dbbb8))
* Update to `bb` version 0.7.3
([#2729](#2729))
([fce68d1](fce68d1))
</details>

<details><summary>0.37.0</summary>

## [0.37.0](v0.36.0...v0.37.0)
(2023-12-01)


### ⚠ BREAKING CHANGES

* Move circuit serialization circuit into acir
([#3345](#3345))
* expose pedersen hash in acir and bb solver
([#3269](#3269))
* Switch to new pedersen implementation
([#3151](#3151))
* Pass ACIR to ACVM by reference rather than passing ownership
([#2872](#2872))
* **wasm:** improve and simplify wasm compiler interface
([#2976](#2976))
* Maintain shape of foreign call arguments
([#2935](#2935))

### Features

* **acvm_js:** Export black box solver functions
([#2812](#2812))
([da8a98e](da8a98e))
* **acvm:** Separate ACVM optimizations and transformations
([#2979](#2979))
([5865d1a](5865d1a))
* Add `FieldElement::from&lt;usize&gt;` implementation
([#3647](#3647))
([8b7c5aa](8b7c5aa))
* Add ACIR serializer C++ codegen
([#2961](#2961))
([7556982](7556982))
* Add conditional compilation of methods based on the underlying field
being used ([#3045](#3045))
([2e008e2](2e008e2))
* Add debugger commands to introspect (and modify) the current state
([#3391](#3391))
([9e1ad85](9e1ad85))
* Aztec-packages
([#3599](#3599))
([2cd6dc3](2cd6dc3))
* Expose pedersen hash in acir and bb solver
([#3269](#3269))
([0108b6c](0108b6c))
* Extract Brillig VM to allow step debugging
([#3259](#3259))
([f6431f9](f6431f9))
* Implement euclidean division and signed division in terms of
`AcirVar`s ([#3230](#3230))
([b8b7782](b8b7782))
* Maintain shape of foreign call arguments
([#2935](#2935))
([f7869e6](f7869e6))
* Pass ACIR to ACVM by reference rather than passing ownership
([#2872](#2872))
([b3a9c34](b3a9c34))
* Pass brillig bytecode to VM by reference
([#3030](#3030))
([4ee290b](4ee290b))
* Refactor debugger and separate core from UI
([#3308](#3308))
([8466810](8466810))
* Replace boolean range constraints with arithmetic opcodes
([#3234](#3234))
([949222c](949222c))
* Save Brillig execution state in ACVM
([#3026](#3026))
([88682da](88682da))
* Solve `fixed_base_scalar_mul` black box functions in rust
([#3153](#3153))
([1c1afbc](1c1afbc))
* Switch to new pedersen implementation
([#3151](#3151))
([35fb3f7](35fb3f7))
* **wasm:** Improve and simplify wasm compiler interface
([#2976](#2976))
([1b5124b](1b5124b))


### Bug Fixes

* ACIR optimizer should update assertion messages
([#3010](#3010))
([758b6b6](758b6b6))
* **acvm:** Return false rather than panicking on invalid ECDSA
signatures ([#2783](#2783))
([155abc0](155abc0))
* Determinism of fallback transformer
([#3100](#3100))
([12daad1](12daad1))
* Fix method `program_counter`, change method signature
([#3012](#3012))
([5ea522b](5ea522b))
* Minor problems with `aztec` publishing
([#3095](#3095))
([0fc8f20](0fc8f20))
* Prevent duplicated assert message transformation
([#3038](#3038))
([082a6d0](082a6d0))
* Return error rather than panicking on unreadable circuits
([#3179](#3179))
([d4f61d3](d4f61d3))


### Miscellaneous Chores

* Move circuit serialization circuit into acir
([#3345](#3345))
([122119b](122119b))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants