> On Dec 16, 2015, at 11:59 AM, Kevin Ballard <ke...@sb.org> wrote:
> 
> On Wed, Dec 16, 2015, at 11:49 AM, Joe Groff wrote:
>>  
>>> On Dec 16, 2015, at 11:47 AM, Kevin Ballard <ke...@sb.org 
>>> <mailto:ke...@sb.org>> wrote:
>>>  
>>> On Wed, Dec 16, 2015, at 11:42 AM, Joe Groff wrote:
>>>>  
>>>>> On Dec 16, 2015, at 11:24 AM, Kevin Ballard via swift-dev 
>>>>> <swift-dev@swift.org <mailto:swift-dev@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.
>>>  
>>> Rare cases like that can be covered by either declaring a nested function 
>>> taking the pointer and calling it, calling an anonymous local closure of 
>>> the right type, or even using withExtendedLifetime(&x) { (ptr: 
>>> UnsafePointer<T>) in ... }.
>>  
>> These are all just withUnsafePointer with different spelling.
>  
> That's true, but they all have the benefit of not requiring extra stdlib 
> functions. swiftdoc.org lists 36 global functions, a full 4 of which are 
> withUnsafePointer + variants. The existence of the functions also implies 
> that they're necessary to work with pointers (especially the documentation). 
> My suspicion is that nearly all current uses of these functions can be 
> replaced with &x refs with no change in functionality. Even the stdlib only 
> has a handful of uses of withUnsafeMutablePointer (and none at all for 
> withUnsafePointer), and looking through them quickly, it looks like only the 
> ones in public/core/Runtime.swift.gyb require a workaround.
>  

The standard library isn't a representative sample, since it doesn't interact 
directly with that much C code. I would check out Github for more information; 
I've had a number of discussions with developers who were doing things that are 
only possible with withUnsafePointer.

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

Reply via email to