[noise] Zero-allocation
sopium
sopium at mysterious.site
Tue Feb 21 18:02:01 PST 2017
Hi,
On Tuesday, Feb 21 Trevor Perrin <trevp at trevp.net> wrote:
> Hi Sopium,
>
> I've been slow to improve Screech, so I'm happy to see other people
> doing better rust libraries. At first glance your code looks pretty
> nice.
Good to know. Thanks!
> I sort of wanted Screech to be a zero-allocation library, but probably
> the code is cleaner when you use vectors.
Well using `Vec` is certainly an opinionated choice. It might
have some run time performance cost as well. So I would also like
to avoid it if possible.
I have to admit that I don't have a whole lot of experience with
zero-allocation code. That said, many of the `Vec`s used now can
be simply replaced with arrays once this issue[0] is fixed
(and associated-constants stabilizes), though that probably won't
come any time soon. The rest `Vec`s in user-facing APIs should
then probably live behind a feature flag.
(Off topic, but it might also make sense to put the crypto
wrappers behind a feature flag, becuase there seems to be
currently no clear winner in Rust crypto libraries for now.)
[0]: https://github.com/rust-lang/rust/issues/34344
Another possible alternative is to use associated types for those
variable length input/output buffers, and use an `Array` trait to
generically access them, something like:
```
trait Array {
fn len() -> usize;
fn as_slice(&self) -> &[u8];
fn as_mut(&mut self) -> &mut [u8];
}
```
This seems the most practical for now, and I will explore to see
if it could actually work.
Yet another option is to use some `alloca`, should it become
available in Rust.
> Anyways, you should link your library in the Noise Wiki:
>
> https://github.com/noiseprotocol/noise_wiki/wiki
Will do.
> I'd like to see other people test and review it. If we're feeling
> good about your library in a few weeks I'd be happy to link it from
> the Noise homepage (and remove the link to Screech, unless I'm able to
> spend time on it).
>
> Trevor
Regards,
Sopium
More information about the Noise
mailing list