> On May 9, 2016, at 1:16 PM, Joe Groff <[email protected]> wrote:
> 
> Andy, I think it's worth clarifying the primary purpose of this proposal. Our 
> main goal here is to provide a legal means for "type-punning" memory access. 
> Like C and C++, it's technically undefined behavior in Swift to cast an 
> UnsafePointer<T> to an UnsafePointer<U> of a different type and load a value 
> out of memory that's of a different type from what was stored there. We don't 
> take much advantage of this yet in Swift's optimizer, since we don't have 
> good alternative API. UnsafeBytePointer seeks to fill this gap by providing a 
> type that can safely do type-punned loads and stores.

Absolutely, that’s the main point. I’ll work on the proposal's language. But I 
should point out that the optimizer has taken advantage of UnsafePointer’s type 
for a long time. We’re only saved because when we convert UMP types, we usually 
pass the memory off to an external C function, which acts as a boundary to 
optimization.

The current proposal grew out of my auditing the standard library, attempting 
to weed out undefined behavior.

Also note that I initially wanted to propose a much less ambitious API that 
allowed type punning, but otherwise left UMP unchanged. However, I got some 
strong feedback early on that if converting UMP types leads to undefined 
behavior, then it should be prohibited in the API, unless the programming 
explicitly requests the conversion. I happen to agree with that feedback. Since 
you and others also wanted a more complete API for manual memory layout, I saw 
that as one solution to both problems.

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

Reply via email to