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
> > <[email protected]> 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
... }.
> > 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".
Offhand, it feels surprising to allow `foo(x)` where foo takes an UnsafePointer.
Proposals submitted as
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/002861.html
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/002863.html
-Kevin Ballard
_______________________________________________
swift-dev mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-dev