> On Jun 29, 2016, at 4:59 PM, Xiaodi Wu <[email protected]> wrote:
> 
> There must be a typo in these examples. `MemoryLayout(x.dynamicType).size` 
> perhaps?

Dunno if it’s intentional or not. Hooman Mehr already suggested we add instance 
properties:
> On Jun 28, 2016, at 8:27 PM, Hooman Mehr via swift-evolution 
> <[email protected]> wrote:
> 
> How about we get rid of dynamicType by adding instance level properties as 
> well:
> 
> public struct MemoryLayout<T> {
>     
>     public static var size: Int { return sizeof(T) }
>     public static var interval: Int { return strideof(T) }
>     public static var alignment: Int { return alignof(T) }
>     
>     public var size: Int { return sizeof(T) }
>     public var interval: Int { return strideof(T) }
>     public var alignment: Int { return alignof(T) }
>     
>     init(_ : @autoclosure () -> T) {}
> }
> 
> print(MemoryLayout<Int>.size) // 8
> print(MemoryLayout<Int>.interval) // 8
> print(MemoryLayout<Int>.alignment) // 8
> 
> let x = 8
> 
> print(MemoryLayout(x).size) // 8
> print(MemoryLayout(x).interval) // 8
> print(MemoryLayout(x).alignment) // 8


Doing that makes that list look like this:
MemoryLayout<Int8>.size           // 1, correct
MemoryLayout(Int8.self).size      // 1, almost certainly correct
MemoryLayout(Int8).size           // 1, almost certainly correct
MemoryLayout(0 as Int8).size      // 1, correct
MemoryLayout<Int8.Type>.size      // 8, correct
MemoryLayout(Int8.Type.self).size // 8, correct, but is oddly worded
MemoryLayout(Int8.Type).size      // 8, correct

I thought of something else… if we had a way to intentionally trigger a 
compile-time error in code that’s otherwise correct, we could define the 
`init(_: T.self)` function like this:
extension MemoryLayout {
    public init(_ : T.Type) { #throwErrorIfReached("Incorrect Usage... 
NOCOMPILINGFORYOU!!!") }
}

Then the list of statements which compile would be much simpler:
let x: Int8 = 0
MemoryLayout<Int8>.size      // 1, correct and unambiguous
MemoryLayout(x).size         // 1, correct and unambiguous (assuming the 
instance properties are added)
MemoryLayout<Int8.Type>.size // 8, correct and unambiguous

But that’s its own proposal, and one I’m not sure is worth making.

- Dave Sweeris


_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to