It makes no sense for #size
to be negative, so that should obviously be unsigned at the very least.
- For compatibility with the most platforms (and still an improvement of one bit over the current implementation), it could be a UInt32. This provides the least opportunity for compile or runtime bugs on any 32+ bit platform, at the expense of Slices being at most
1 << 31
items long. - For compatibility with the most popular platforms and greater versatility on those platforms, it could be a UInt64. I don’t think this is the best idea because it could lead to weird bugs on 32 bit systems.
- For compatibility with the widest array of platforms and operating systems,
LibC::PtrdiffT
could be chosen. This could result in some occasional compile-time or runtime errors, but for most cases things would work smoothly.
I will gladly implement this and submit a PR, but I’d like some opinions on which option is the best for Crystal before I do.