[swift-dev] `withUnsafePointer` mutates `self`

Joe Groff jgroff at apple.com
Wed Dec 16 13:42:11 CST 2015


> On Dec 16, 2015, at 11:24 AM, Kevin Ballard via swift-dev <swift-dev at swift.org> wrote:
> 
> On Wed, Dec 16, 2015, at 12:12 AM, Dave Abrahams wrote:
>> 
>>> Come to think of it, what's the actual use-case for withUnsafePointer()?
>> 
>> I'm not sure we still have one that isn't covered by &x; that's my point.
>> 
>>> If a value is mutable, you can already use &x or withUnsafeMutablePointer(), and if it's immutable, you can't call withUnsafePointer() today anyway. The proposed change would just make withUnsafePointer() into the equivalent of `var x = value; callSomethingWith(&x)`. The only reason to really want a withUnsafePointer() function is if it can give you an UnsafePointer to an immutable value without copying it, but we can't do that. I'm inclined to say we should just get rid of withUnsafePointer() entirely, at least until such time as Swift has a way to pass immutable values by-ref.
>> 
>> I'm inclined to agree.  Proposal?
> 
> Sure, I'll write one up. I suspect that withUnsafePointer() / withUnsafeMutablePointer() are likely to be rarely used today, and most uses can probably be trivially replaced with just passing a &x ref, so this shouldn't be a big deal.

We can't remove withUnsafe[Mutable]Pointer; as I mentioned to Dave, it's necessary to persist a pointer for more than one immediate call.

> 
> I'll also go ahead and write up one suggesting that we should allow for using &x when x is immutable when passing a parameter to a function that takes UnsafePointer.

That would be useful, though I would argue that the '&' shouldn't be necessary. We aren't C; '&x' means "this call mutates x", not "I'm taking a pointer to x".

-Joe


More information about the swift-dev mailing list