[swift-evolution] [Pitch] Renaming sizeof, sizeofValue, strideof, strideofValue

Dave Abrahams dabrahams at apple.com
Sun Jun 5 19:36:01 CDT 2016


on Thu Jun 02 2016, Matthew Johnson <swift-evolution at swift.org> wrote:

>  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.

FWIW, there is no such plan.  A number of us would like to see something
happen in this area, but we are waiting to see the results of Joe's
work.

>
>  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
>  https://lists.swift.org/mailman/listinfo/swift-evolution
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>

-- 
-Dave



More information about the swift-evolution mailing list