> On Jun 26, 2017, at 12:58 PM, Joe Groff <jgr...@apple.com> wrote:
> 
>> 
>> On Jun 26, 2017, at 10:20 AM, Charles Srstka via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>> Rats, I was hoping that one of the reasons about being so explicit what 
>> we’re going to access and where with bindMemory() and friends would be to 
>> take care of these sorts of issues.
> 
> There are restrictions that unfortunately prevent unaligned memory support 
> from being the pervasive default; particularly, we want typed pointers to be 
> able to "toll-free-bridge" with typed C pointers, and C also requires 
> well-alignedness of typed memory accesses. Swift's runtime generics model 
> also means that unspecialized code would be using value witness functions to 
> load/store values from memory, and the value witness functions are compiled 
> to assume alignment of their arguments. It would be reasonable for us to add 
> load/storeUnaligned APIs to the RawPointer types that explicitly did 
> unaligned operations; these would however have to be restricted to working 
> only on trivial types that don't require reference counting.
> 
> -Joe

Restricting it to trivial types wouldn’t be bad at all, since stuff you’re 
reading/writing from raw data is generally going to be either 1) trivial types, 
or 2) Codable types whose encode/decode routines are usually going to read and 
write a bunch of... trivial types.

Just reading a whole struct as a chunk of memory has never seemed like a good 
idea to me, if for no other reason than that it’ll only work if the data 
happens to be in the same endian order as the host.

Charles

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to