[swift-evolution] [Pitch] Renaming sizeof, sizeofValue, strideof, strideofValue
Jose Cheyo Jimenez
cheyo at masters3d.com
Tue Jun 7 01:33:43 CDT 2016
+1 on #3
3. MemoryLayout<Int>.size
http://i.gifntext.com/29412-number-3-my-lord.gif <http://i.gifntext.com/29412-number-3-my-lord.gif>
> On Jun 6, 2016, at 3:37 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>
>
> on Mon Jun 06 2016, Nate Cook <natecook-AT-gmail.com> wrote:
>
>> I'd like to cast another vote in favor of something like the
>> MemoryLayout struct. In general, people aren't always making the right
>> choice about which of these values to use. Combining them into one
>> data type would mean they see that there are three related values and
>> can find out when to use which easily.
>>
>> Would MemoryLayout need to be generic? Accessing a static property on
>> a generic type doesn't seem as straightforward as a function call or
>> the properties of a struct. I think I'd prefer something closer to the
>> way Mirror works, but really, I defer to those with stronger
>> convictions / actual reasons:
>>
>> func type<T>(of value: T) -> T.Type {
>> return T.self
>> }
>>
>> struct MemoryLayout {
>> let size: Int
>> let stride: Int
>> let alignment: Int
>>
>> init<T>(of type: T.Type) {
>
> I see no need for an argument label here.
>
>> size = sizeof(type)
>> stride = strideof(type)
>> alignment = alignof(type)
>> }
>> }
>
> These are all possible syntaxes, but I think #3 is best:
>
> 1. MemoryLayout(Int.self).size
> 2. memoryLayout(Int.self).size
> 3. MemoryLayout<Int>.size
>
> I don't see any advantage of #1 over #2, and there's no need at all to
> define a new nominal type if we only want #2:
>
> func memoryLayout<T>(_ T.type) -> (size: Int, stride: Int, alignment: Int) {
> // implementation
> }
>
>> Nate
>>
>>> On Jun 5, 2016, at 7:54 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>
>>> on Thu Jun 02 2016, John McCall <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>
>>>> On Jun 2, 2016, at 1:43 PM, Russ Bishop <xenadu at gmail.com> wrote:
>>>>
>>>> On Jun 2, 2016, at 11:30 AM, John McCall via swift-evolution <swift-evolution at swift.org>
>>>> wrote:
>>>>
>>>> I still think the value-based APIs are misleading and that it would be better to ask people to just use a type explicitly.
>>>>
>>>> John.
>>>>
>>>> I agree; in fact why aren’t these properties on the type itself? The type is what matters; why can’t the type just tell me it’s size?
>>>> Having free functions or magic operators seems to be another holdover from C.
>>>>
>>>> Int.size
>>>> Int.alignment
>>>> Int.spacing
>>>>
>>>> let x: Any = 5
>>>> type(of: x).size
>>>>
>>>> The compiler should be able to statically know the first three values and inline them. The second is discovering the size dynamically.
>>>>
>>>> Two reasons. The first is that this is a user-extensible namespace via
>>>> static members, so it's somewhat unfortunate to pollute it with names
>>>> from the library. The second is that there's currently no language
>>>> mechanism for adding a static member to every type, so this would have
>>>> to be built-in.
>>>
>>> More fundamental reasons:
>>>
>>>
>>> * `Array<Int>.size` is easily misinterpreted. The identifier
>>> `MemoryLayout` was suggested in order to set the proper mental context
>>> at the use site.
>>>
>>> * I don't want “size,” “alignment,” and “spacing” appearing in the
>>> code-completion list for every type.
>>>
>>> * I can easily imagine users wanting to use static properties by these
>>> names for their own types, with completely different meaning.
>>>
>>>> But I agree that in the abstract a static property would be
>>>> preferable.
>>>>
>>>> John.
>>>>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>>
>>>
>>> --
>>> -Dave
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>
> --
> Dave
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160606/adb07620/attachment.html>
More information about the swift-evolution
mailing list