[swift-evolution] [Pitch] Renaming sizeof, sizeofValue, strideof, strideofValue
Matthew Johnson
matthew at anandabits.com
Thu Jun 2 10:04:21 CDT 2016
> On Jun 2, 2016, at 10:01 AM, Charlie Monroe <charlie at charliemonroe.net> wrote:
>
>> Isn’t this a short-term concern? I thought that requirement was going away.
>
> AFAIK there are still concerns about ambiguity - [Int] - is it an array with one element (Int.self), or is it [Int].self?
IIRC Joe Groff was going to work on sorting out the remaining issues but the plan is to move ahead eventually.
>
>>
>>> For this reason, this proposal prefers using no-label calls for types (otherwise they would have been ofType) and labeled calls for values:
>>>
>>> print(sizeof(Int)) // works
>>> print(sizeof(Int.self)) // works
>>>
>>> func withoutLabel<T>(thetype: T.Type) -> Int { return sizeof(T) }
>>> func withLabel<T>(label label: T.Type) -> Int { return sizeof(T) }
>>>
>>>
>>> // Works
>>> print(withoutLabel(Int))
>>>
>>> // Works
>>> print(withLabel(label: Int.self))
>>>
>>> // Does not work
>>> // error: cannot create a single-element tuple with an element label
>>> // print(withLabel(label: Int))
>>>
>>>
>>> So with this in mind:
>>>
>>> /// Returns the contiguous memory footprint of `T`.
>>> ///
>>> /// Does not include any dynamically-allocated or "remote" storage.
>>> /// In particular, `size(X.self)`, when `X` is a class type, is the
>>> /// same regardless of how many stored properties `X` has.
>>> public func size<T>(_: T.Type) -> Int
>>>
>>> /// Returns the contiguous memory footprint of `T`.
>>> ///
>>> /// Does not include any dynamically-allocated or "remote" storage.
>>> /// In particular, `size(of: a)`, when `a` is a class instance, is the
>>> /// same regardless of how many stored properties `a` has.
>>> public func size<T>(of: T) -> Int
>>>
>>> /// Returns the least possible interval between distinct instances of
>>> /// `T` in memory. The result is always positive.
>>> public func spacing<T>(_: T.Type) -> Int
>>>
>>> /// Returns the least possible interval between distinct instances of
>>> /// `T` in memory. The result is always positive.
>>> public func spacing<T>(of: T) -> Int
>>>
>>> /// Returns the minimum memory alignment of `T`.
>>> public func alignment<T>(_: T.Type) -> Int
>>>
>>> /// Returns the minimum memory alignment of `T`.
>>> public func alignment<T>(of: T) -> Int
>>> -- E
>>
>> _______________________________________________
>> 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>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160602/36964695/attachment.html>
More information about the swift-evolution
mailing list