> On Dec 15, 2015, at 6:39 PM, Dave Abrahams via swift-dev > <swift-dev@swift.org> wrote: > > >> On Dec 15, 2015, at 6:33 PM, Kevin Ballard via swift-dev >> <swift-dev@swift.org> wrote: >> >> On Tue, Dec 15, 2015, at 03:03 PM, Joe Groff via swift-dev wrote: >>> >>> Yeah, it seems to me like a reasonable refinement for 'withUnsafePointer' >>> to take an immutable parameter. Since this is a stdlib API change, you >>> should suggest that on swift-evolution. >> >> A change like that is going to break any code that relies on the inout >> optimization (where it uses call-by-reference instead of copy-in copy-out >> when possible). Yes, such code is in violation of Swift semantics today, but >> it does work. > > Two questions: > > 1. Don’t we want a withUnsafeMutablePointer for the mutating cases (where the > inout optimization can take effect) anyway?
Yeah, a withUnsafeMutablePointer variant that is inout would be necessary. > 2. Joe, these APIs predate many of your changes that make &x transparently > convert to Unsafe[Mutable]Pointer arguments. Are they obsolete? Can we > replace them with { x: Unsafe[Mutable]Pointer in … }(&y) ? Not if you need the same pointer across multiple calls, or you need to convert or adjust the pointer before the call. A call like foo(&x) that involves a pointer conversion only guarantees that pointer for that exact call, as if you'd written withUnsafe[Mutable]Pointer(&x) { foo($0) }. -Joe _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev