And following up to myself. Please look here: https://github.com/erica/swift-evolution/blob/0f93c3c31b1d59358a61a5e2608dc71a598d9316/proposals/XXXX-sidestride.md
Plus, I fixed the typos in strideof/strideofValue's counts. -- E > On Jun 2, 2016, at 8:43 AM, Erica Sadun via swift-evolution > <swift-evolution@swift.org> wrote: > > Supporting Dave A, type-based calls are much more likely to be used than > instance calls, unlike with dynamicType/type(of:) > > Term stdlib search gist search Google site:github +swift > sizeof 157 169 4880 > sizeofValue 4 34 584 > alignof 44 11 334 > alignofValue 5 5 154 > strideof 347 19 347 > strideofValue 4 5 163 > Type-based calls like sizeof() are poor candidates for parameter labels. > While it's acceptable to write sizeof(Int), but one must write size(of: > Int.self) (with the trailing self) when the function has a label. 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@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution