Skip to content

Commit

Permalink
Adam/fix allow explicit field init (AztecProtocol/barretenberg#460)
Browse files Browse the repository at this point in the history
* fix: msgpack error

* fix: allow explicit field init
  • Loading branch information
ludamad authored May 19, 2023
1 parent 2459453 commit b8b9687
Showing 1 changed file with 7 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@
namespace barretenberg {
template <class Params> struct alignas(32) field {
public:
// We don't initialize data by default since we'd lose a lot of time on pointless initializations.
// We don't initialize data in the default constructor since we'd lose a lot of time on huge array initializations.
// Other alternatives have been noted, such as casting to get around constructors where they matter,
// however it is felt that sanitizer tools (e.g. MSAN) can detect garbage well, whereas doing
// hacky casts where needed would require rework to critical algos like MSM, FFT, Sumcheck.
// Instead, the recommended solution is use an explicit = 0 where initialization is important.
field() noexcept {}
// Instead, the recommended solution is use an explicit {} where initialization is important:
// field f; // not initialized
// field f{}; // zero-initialized
// std::array<field, N> arr; // not initialized, good for huge N
// std::array<field, N> arr {}; // zero-initialized, preferable for moderate N
field() = default;

constexpr field(const uint256_t& input) noexcept
: data{ input.data[0], input.data[1], input.data[2], input.data[3] }
Expand Down

0 comments on commit b8b9687

Please sign in to comment.