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

David Sweeris davesweeris at mac.com
Wed Jun 29 16:50:46 CDT 2016


That’s the “as proposed” usage for getting the size of a value (from https://gist.github.com/erica/57a64163870486468180b8bab8a6294e) 
// Types
MemoryLayout<Int>.size // 8 
MemoryLayout<Int>.arraySpacing // 8
MemoryLayout<Int>.alignment // 8

// Value
let x: UInt8 = 5
MemoryLayout(x).dynamicType.size // 1
MemoryLayout("hello").dynamicType.arraySpacing // 24
MemoryLayout(29.2).dynamicType.alignment // 8


At least, I thought that was the latest version of the proposal. Maybe I’ve gotten confused.

- Dave Sweeris

> On Jun 29, 2016, at 4:36 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
> 
> 
> 
> On Wed, Jun 29, 2016 at 4:29 PM, David Sweeris via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> (While I was typing this up, I realized that the exact usage you’re worried about, “MemoryLayout(Int.self).size” won’t compile, since `MemoryLayout` currently doesn’t have instance properties. If you’re worried about someone incorrectly typing out “MemoryLayout(Int.self).dynamicType.size”, though…)
> 
> I made a rather critical typo in my earlier reply. It should’ve been “init(_: T.Type)”, instead of “init(_: T.self)”, which is to say this:
> extension MemoryLayout { // assuming `MemoryLayout<T>` is already defined as proposed
>     public init(_ : T.Type) {} // makes it so that `MemoryLayout(T.self)` still has the correct type for `T`
> }
> 
> Here are the results of some quick playgrounding in the WWDC Xcode 8 beta:
> // without `init(_ : T.Type)` defined
> MemoryLayout<Int8>.size                       // 1, correct
> MemoryLayout(Int8.self).dynamicType.size      // 8, almost certainly wrong
> //MemoryLayout(Int8).dynamicType.size           // error
> MemoryLayout(0 as Int8).dynamicType.size      // 1, correct
> MemoryLayout<Int8.Type>.size                  // 8, correct
> MemoryLayout(Int8.Type.self).dynamicType.size // 8, correct, but is oddly worded
> //MemoryLayout(Int8.Type).dynamicType.size      // error
> 
> // with `init(_ : T.Type)` defined
> MemoryLayout<Int8>.size                       // 1, correct
> MemoryLayout(Int8.self).dynamicType.size      // 1, almost certainly correct
> MemoryLayout(Int8).dynamicType.size           // 1, almost certainly correct
> MemoryLayout(0 as Int8).dynamicType.size      // 1, correct
> MemoryLayout<Int8.Type>.size                  // 8, correct
> MemoryLayout(Int8.Type.self).dynamicType.size // 8, correct, but is oddly worded
> MemoryLayout(Int8.Type).dynamicType.size      // 8, correct
> 
> The only value that changes (aside from the errors) is the one “typo” that you were worried about.
> 
> Do this change your mind? 
> 
> These examples make no sense to me. Why are we asking for the size of the dynamicType of MemoryLayout?
>  
> 
> 
> 
> On Jun 29, 2016, at 12:34 PM, Dave Abrahams <dabrahams at apple.com <mailto:dabrahams at apple.com>> wrote:
>> 
>> 
>> on Wed Jun 29 2016, David Sweeris <davesweeris-AT-mac.com <http://davesweeris-at-mac.com/>> wrote:
>> 
>>> Would adding a "init(_: T.self) {...}" solve that issue?
>>> 
>> 
>> ? I don't see how.
>> 
>>> 
>>> Sent from my iPhone
>>> 
>>>> On Jun 29, 2016, at 01:54, Dave Abrahams via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>> 
>>>> My worry is that people will write 
>>>> 
>>>> MemoryLayout(Int.self).size 
>>>> 
>>>> when they mean
>>>> 
>>>> MemoryLayout<Int>.size 
>>>> 
>>>> (often because for some reason they don't like angle brackets).
>>>> 
>>>> I prefer to make the uncommon case much harder to write.
>> 
>> -- 
>> Dave
> 
> 
> - Dave Sweeris
> 
> 
> _______________________________________________
> 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/20160629/1568c742/attachment.html>


More information about the swift-evolution mailing list