Skip to content

Releases: noir-lang/noir

v0.36.0

23 Oct 12:08
801c718
Compare
Choose a tag to compare

0.36.0 (2024-10-22)

⚠ BREAKING CHANGES

Features

Bug Fixes

  • Add missing visibility for auto-import names (#6205) (c3cb38a)
  • Address inactive public key check in verify_signature_noir (#6270) (e4325aa)
  • Allow array map on empty arrays (#6305) (51ae1b3)
  • Change tag attributes to require a ' prefix (#6235) (b43dcb2)
  • Check for Schnorr null signature (#6226) (2430920)
  • Display function name and body when inlining recursion limit hit (#6291) (33a1e7d)
  • Do not warn on unused self in traits (#6298) (4d524bf)
  • Don't warn on unuse global if it has an abi annotation (#6258) (e13f617)
  • Don't warn on unused struct that has an abi annotation (#6254) (8a31632)
  • Don't warn twice when referring to private item (#6216) (619c545)
  • Enforce correctness of decompositions performed at compile time (#6278) (53252fd)
  • frontend: Do not warn when a nes...
Read more

nightly-2024-10-24: feat: merge and sort imports (#6322)

24 Oct 02:28
07ab515
Compare
Choose a tag to compare
# Description

## Problem

Manually arranging imports is time consuming.

## Summary

Added two new configurations, `reorder_imports` (true by default) and
`imports_granularity` (`Preserve` by default), similar to the ones found
in rustfmt. With the default configuration imports are reorganized
alphabetically but not merged.

While implementing this I bumped into one code in the test programs like
this:

```noir
use foo;
use foo::bar;
```

Merging those in Rust ends up like this:

```noir
use foo::{bar, self};
```

We don't have `self` in imports, so I had two choices:
1. Try to leave the above unmodified.
2. Implement `self` in imports.

It turned out that implement `self` in imports is very easy: when we
desugar imports, if the last segment is "self" we just remove it. Then
`use foo::self` is desugared into `use foo`.

## Additional Context

None.

## Documentation

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

---------

Co-authored-by: Tom French <[email protected]>

nightly-2024-10-23: chore: remove usage of slices in pedersen hash (#6295)

23 Oct 02:28
8dec847
Compare
Choose a tag to compare
# Description

## Problem\*

Resolves <!-- Link to GitHub Issue -->

## Summary\*

This PR reworks the pedersen hash implementation to work on arrays as
this removes some brillig overhead.

## Additional Context



## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

nightly-2024-10-22: fix: Allow array map on empty arrays (#6305)

22 Oct 02:28
51ae1b3
Compare
Choose a tag to compare
# Description

## Problem\*

Resolves a private issue sent to me on slack

## Summary\*

Array map is a fairly old method written before we had
`std::mem::zeroed`. Now that we have zeroed, we can allow mapping empty
arrays since we can use `zeroed` to get the filler `U` value for the
starting elements.

## Additional Context

While I was at it I included a small clarification to `reduce`'s docs
that it requires a non-empty array

## Documentation\*

Check one:
- [ ] No documentation needed.
- [x] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

nightly-2024-10-21

21 Oct 02:29
67ac0d6
Compare
Choose a tag to compare
nightly-2024-10-21 Pre-release
Pre-release
feat: Warn about private types leaking in public functions and struct…

nightly-2024-10-20

20 Oct 02:31
67ac0d6
Compare
Choose a tag to compare
nightly-2024-10-20 Pre-release
Pre-release
feat: Warn about private types leaking in public functions and struct…

nightly-2024-10-19: fix: Do not warn on unused self in traits (#6298)

19 Oct 02:27
4d524bf
Compare
Choose a tag to compare
# Description

## Problem\*

Resolves #6297 

## Summary\*

Sets `warn_if_unused` to `false` for the `self` parameter of a function
if it's for a trait implementation.

## Additional Context



## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [ ] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

nightly-2024-10-18: fix: Reject invalid expression with in CLI parser (#6287)

18 Oct 02:28
052aee8
Compare
Choose a tag to compare
# Description

## Problem\*

Resolves #5560

## Summary\*

Rejects an invalid `--expression-value` in the CLI, which would later
cause a panic in `acvm::compiler::transformers::csat`.

An example error message looks like:

```text
error: invalid value '1' for '--expression-width <EXPRESSION_WIDTH>': minimum value is 3
```

## Additional Context

The issue suggests that
[CSatTransformer::new](https://github.com/noir-lang/noir/blob/ae87d287ab1fae0f999dfd0d1166fbddb927ba97/acvm-repo/acvm/src/compiler/transformers/csat.rs#L24-L27)
should return a `Result` explaining the problem it has with `width`,
rather than doing an `assert!` (without any message) and crashing the
program. I agree, however looking at the chain of calls, none of the
half-dozen functions we go through to reach this use `Result`, and the
`CSatTransformer` is the only option we have. This suggests to me that
this limitation is perhaps supposed to be well-known to the user, ie.
it's not the case that one transformer has X limit and another has Y
limit.

For this reason I added a `pub const MIN_EXPRESSION_WIDTH: usize = 3;`
to the `acvm::compiler` module and using that as a common value for the
assertion as well as the validation in the CLI. Should the assumption of
a single global value change, removing that will force us to update the
validation logic as well.

That said if you prefer going the `Result` route I'm not against it, it
just seemed like an overkill for this single use case.
 
## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [ ] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

nightly-2024-10-17: chore: regression test for #5462 (#6286)

17 Oct 02:28
ae87d28
Compare
Choose a tag to compare
# Description

## Problem\*

Regression test for github.com/noir-lang/noir/issues/5462

## Summary\*

- Added the test from [5462](github.com/noir-lang/noir/issues/5462)
- Updated the issue needed to re-enable the `array_regex` execution test

## Additional Context



## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.

nightly-2024-10-16: chore: regression test for #5462 (#6286)

16 Oct 02:29
ae87d28
Compare
Choose a tag to compare
# Description

## Problem\*

Regression test for github.com/noir-lang/noir/issues/5462

## Summary\*

- Added the test from [5462](github.com/noir-lang/noir/issues/5462)
- Updated the issue needed to re-enable the `array_regex` execution test

## Additional Context



## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.