[swift-evolution] [Discussion] Cleaning up stdlib pointer and buffer routines (Open Issues Affecting Standard Library API Stability)

Charlie Monroe charlie at charliemonroe.net
Thu Jul 7 02:44:18 CDT 2016


As was pointed out to me in the bug report, the preferred way to get a pointer is to use

Unmanaged.passUnretained(obj).toOpaque()

I see a few issues, though (aside from toOpaque() missing in Xcode 8b1, haven't installed b2 yet):

- it is quite a verbose way of something I consider should be trivial - getting an address of an object.
- it requires the caller to deal with retain cycle which I don't think should be explicit for getting an address of an object.

I'd personally leave it in the language as it feels similar to dynamicType(obj) and can be a nice-to-have debugging tool.

The most confusing part about unsafeAddress(of:) is implicit bridging which creates a new instance e.g. in case of String, in order to satisfy the AnyObject requirement. Fortunately, this will get eliminated by SE-0072 and Unmanaged suffered from the same issue, though it required you to specify either Unmanaged<NSString> or Unmanaged<AnyObject>.

> On Jul 6, 2016, at 8:03 PM, Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org> wrote:
> 
> 
> * Remove unsafeAddressOf. "We are not aware of any real use cases for it. If there are any, it should be renamed to unsafeAddress(of:) to follow the guidelines." (https://bugs.swift.org/browse/SR-1957 <https://bugs.swift.org/browse/SR-1957> rdar://problem/18589289 <>)
> 
> 
> Oops, I just responded to this on another thread. Pasting:
> 
> It's minor, but I use unsafeAddressOf regularly for writing `description` methods:
> 
>     var description: String {
>         return "<\(self.dynamicType): \(unsafeAddressOf(self))>{ more info here... }"
>     }
> 
> I guess this would be covered by some generalized solution for format specifiers in string interpolations, but I gather that won't happen for quite a while... 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160707/312cddea/attachment.html>


More information about the swift-evolution mailing list