[swift-evolution] [Review] SE-0101: Rename sizeof and related functions to comply with API Guidelines

James Berry jberry at rogueorbit.com
Fri Jul 1 00:46:56 CDT 2016

> On Jun 30, 2016, at 10:07 PM, Dave Abrahams <dabrahams at apple.com> wrote:
> on Thu Jun 30 2016, Matthew Johnson <matthew-AT-anandabits.com> wrote:
>>> On Jun 30, 2016, at 8:12 PM, Dave Abrahams <dabrahams at apple.com> wrote:
>>> on Thu Jun 30 2016, Matthew Johnson <matthew-AT-anandabits.com <http://matthew-at-anandabits.com/>> wrote:
>>>> Sent from my iPad
>>>>> On Jun 30, 2016, at 6:59 PM, Erica Sadun via swift-evolution <swift-evolution at swift.org> wrote:
>>>>>>> On Jun 30, 2016, at 5:47 PM, James Berry <jberry at rogueorbit.com> wrote:
>>>>>>> On Jun 30, 2016, at 4:05 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>>>>> on Thu Jun 30 2016, Erica Sadun <erica-AT-ericasadun.com> wrote:
>>>>>>>>> On Jun 30, 2016, at 4:41 PM, Dave Abrahams <dabrahams at apple.com> wrote:
>>>>>>>>>> I mentioned this in a comment on the gist already, but I'm really not
>>>>>>>>>> digging the "array" in `arraySpacing`. We've already moved from top-level
>>>>>>>>>> "stride" to "memory layout spacing," gaining plenty of clarity. I'm
>>>>>>>>>> skeptical that the "array" adds anything more. Moreover, it muddies the
>>>>>>>>>> waters by mentioning a specific type (Array) in a context where you're
>>>>>>>>>> querying the memory layout properties of another type.
>>>>>>>>> OK, I agree with that.  If we have “alignment” rather than
>>>>>>>>> “defaultAlignment,” I suppose we can have plain “spacing.”
>>>>>>>> No way to last-second sell you on interval rather than spacing?
>>>>>>> If you can explain why it's better.
>>>>>>>> // Returns the least possible interval between distinct instances of
>>>>>>>> /// `T` in memory.  The result is always positive.
>>>>>>> For me, “interval” doesn't go with “size” and “alignment,” which are all
>>>>>>> about physical distances and locations.  There are all kinds of
>>>>>>> “intervals,” e.g. time intervals.
>>>>>> Hmm. Sounds like stride to me. stride or byteStride?
>>>>>> James
>>>>> FAQ: "Why aren't you using the obvious phrase `stride` for something that clearly 
>>>>> returns the memory stride?"
>>>>> ANSWER: "As stride already has a well-established meaning in the standard library,
>>>>> this proposal changes the name to spacing, providing a simple but correct name that
>>>>> works well enough in its intended use. Measuring memory is sufficiently esoteric
>>>>> that we prefer to reserve `stride` for a more common use case."
>>>> Counter: some words have more than one well established meaning when
>>>> used in different contexts.  'spacing' isn't too bad here (much better
>>>> than 'arraySpacing') but sticking to the term of art 'stride' would be
>>>> best IMO.  As James mentioned, spacing implies empty space *between*
>>>> items whereas stride matches the meaning of this property *exactly*
>>>> (which is why it is the term of art).
>>>> If a programmer can't distinguish between a 'stride' property on
>>>> MemoryLayout and the 'stride' function they probably have no business
>>>> doing anything which requires use of MemoryLayout in the first place.
>>> I don't believe that “stride” *is* the accepted term of art for this
>>> meaning.  I never heard of the idea of types having an intrinsic
>>> “stride” until I arrived on the Swift project.  That usage came from
>>> “strideof.”  
>>> If you all swear up and down that you've been talking about “the stride
>>> of a type” for more than 2 years, I won't fight you on this.
>>> Otherwise... well, I still won't fight; I'm being crushed by an
>>> avalanche of bikesheds and I can't muster the energy ;->... but I'll
>>> forever be plagued by doubts about the name.
>> I was just throwing in my 2 cents and planned to leave it at that.
>> The primary reason I chimed in is because I didn’t find the rationale
>> in the “answer” compelling.  This isn’t something I feel like bike
>> shedding any further over either.
>> https://en.wikipedia.org/wiki/Stride_of_an_array  
>> Maybe stride isn’t as common as I thought it was (if it was I’m sure
>> you would have heard of it before Swift) but it certainly predates
>> Swift in usage.
> But that's actually a different meaning altogether.  Two “arrays” of
> type T can have different strides.  They're talking about taking a view
> onto an underlying series of contiguous Ts that (potentially) skips over
> elements.

Maybe I come from an esoteric part of the universe. While I’ve never heard of stride applied to a type, in particular, the concept of stride as I know it applies to any item as laid out in memory, and seems to me to apply equally well to any “object” in the loosest form of the word. I believe my first experience with it, some 30 years ago, dealt with the row stride in a frame buffer or bitmap. This meaning is similar to the array reference as above. I disagree that they’re not in that article above talking primarily about the same thing that we are: their very first example, under the “Padding” headline, seems to exactly match our intent. Their additional examples are just hacks/extensions of this concept.

If we were talking about waveforms we’d be talking about period. Stride indicates the same thing with regard to items in memory: how long a step do you need to take to get from the start of one item to the start of the next. So we could use “period”, or “interval”, or “step”, or something. I’m just arguing that the most recognizable word to describe this concept, as applied to any sort of item in memory, is stride. But again, maybe that’s just based on my own experience.

Ultimately, I’m sure it’s not a big deal. I agree with Mathew that people using MemoryLayout aren’t likely to confuse the two uses within swift. It’s just that if I had to describe the concept we’re describing in MemoryLayout, stride would be my first choice, as it seems most apt. Short of that, I’m sure that I could read comments and ultimately figure out that “interval,” or “spacing,” or whatever, really means “stride” ;)


More information about the swift-evolution mailing list