> On Oct 14, 2017, at 10:29, Braden Scothern via swift-users 
> <swift-users@swift.org> wrote:
> 
> There is a lot of value in these being mutating functions when working with C 
> APIs that need a buffer for it to write to.
> 
> If you have a collection and ensure it had allocated it's memory, you can 
> then have the C API write directly into the collection's storage avoiding 
> extra copy operations.
> 
> I personally take advantage of this a lot. Because I'm wrapping a C library 
> in Swift as part of my work.
> 
> If this was changed to only non mutating functions, it still wouldn't be able 
> to guarantee that the buffer isn't mutating the collection without always 
> doing a deep copy. It is very easy to go from an UnsafeBufferPointer -> 
> UnsafeMutableBufferPointer and have people change things.

The types wouldn’t change, just whether the method is marked `mutating`.

The reason I have doubts whether it’s worth it is that even if the 
implementation gets duplicated as non-mutating, it won’t prevent cases where a 
{*}BufferPointer needs to be a var: whenever it is passed into a generic 
MutableCollection context, it will need to be a var in order to be usable.
Is it worth it?

Cheers,
Guillaume Lessard

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

Reply via email to