| ▲ | tjadfsaj 3 hours ago | |
Nonempty type wrappers are a stark reminder that we are missing out on refinement types. | ||
| ▲ | bunderbunder 3 hours ago | parent | next [-] | |
I was thinking about its implementation, too, and ended up deciding that it was probably a performance optimization. `Vec<T>` stores all data on the heap, so getting anything out of it involves a pointer deref and possibly also an array bounds check. This `NonEmpty<T>` type keeps the first element of the list in a location that supports some low-level optimization that might make a significant difference in situations where accessing the first element is much more common than accessing subsequent elements. | ||
| ▲ | andrepd 3 hours ago | parent | prev [-] | |
Rust has a proposal for this, in the form of pattern types. It's on nightly, but quite far from being ready for prime time. | ||