Hello swift-evolution,

I've been thinking about a standard library 'Data' type for a while, analogous 
to NSData in the same way Swift's Arrays and Dictionaries are analogous to 
NSArrays and NSDictionaries. A first-class container for binary data that is 
available to every Swift user, conforms to Swift semantics, and is safer and 
easier to work with than UnsafeBufferPointer seems like a natural fit for the 
standard library.

As such, I've put together a very preliminary proposal, which can be found 
here: 
https://github.com/austinzheng/swift-evolution/blob/d2/proposals/XXXX-stdlib-data.md
 
<https://github.com/austinzheng/swift-evolution/blob/d2/proposals/XXXX-stdlib-data.md>.
 I present it not as a way to impose a vision of what such a Data type should 
look like, but rather as a way to catalyze discussion (including discussion as 
to whether or not a Data type is even a good idea in the first place).

Some thoughts:

- It's not clear if the methods to convert to and from base-64 encoded data are 
necessary. The state flag that tries to mark whether or not a Data represents 
base-64-encoded string stored as a data may be unnecessary as well.

- I didn't really go into how NSData should be bridged. Special consideration 
needs to be given to how any native Data type would interact with the overlays 
described in 
https://github.com/apple/swift-evolution/blob/master/proposals/0069-swift-mutability-for-foundation.md
 
<https://github.com/apple/swift-evolution/blob/master/proposals/0069-swift-mutability-for-foundation.md>.
 It's possible (and only if a compelling technical reason exists) that the 
Foundation implementation of NSData can in the future be moved into 
Swift/supplanted by such a native data type, with API extensions to provide 
conformance to the Objective-C Foundation API. This proposal should not be seen 
as an attempt to usurp Foundation's job, though - there are plenty of 
to-be-value types in Foundation whose inclusion directly in the standard 
library makes little sense.

- Perhaps Data should be generic over various types of fixed-width integers 
(signed and unsigned, 8, 16, 32, 64, machine-width, etc). In that case it might 
also provide generic views (for example, to allow iteration over a Data<UInt64> 
as if it were a collection of UInt8 bytes). I'm not yet sure if this is 
feasible or desirable.

Finally, it's possible that this is strictly Swift 4 territory, in which case 
I'm happy to withdraw from discussion until the time is right later this year.

Best regards,
Austin
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to