[swift-evolution] Open Issues Affecting Standard Library API Stability

Harlan Haskins harlan at harlanhaskins.com
Wed Jul 6 13:30:08 CDT 2016


I’ve also seen unsafeAddressOf(_:) used when interfacing with C function pointers when the lifetime of an object is guaranteed. Many C APIs vend an API like:

void perform_action(void (*callback)(void *data), void *initial_data);

For which it is expected to use unsafeAddressOf on a class instance, like:

perform_action({ data in
  let _self = unsafeBitCast(data, to: MyClass.self)
  _self.foo()
}, data: unsafeAddressOf(self))

It’s unsafe and error-prone, sure, but that’s why we have `unsafe` in the name 😅 — I’ve had to use this to interface with libclang.

(For an existing example of this, see SwiftGtk: https://github.com/TomasLinhart/SwiftGtk/blob/master/Sources/Application.swift <https://github.com/TomasLinhart/SwiftGtk/blob/master/Sources/Application.swift>)

— Harlan

> On Jul 6, 2016, at 11:01 AM, Jacob Bandes-Storch via swift-evolution <swift-evolution at swift.org> wrote:
> 
> On Tue, Jul 5, 2016 at 10:50 PM, Dmitri Gribenko via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
> > Remove unsafeAddressOf. We are not aware of any real usecases for it. If there are any, it should be renamed to unsafeAddress(of:) to follow the guidelines.
> Obvious, unless someone comes up with use cases during the review period.
> 
> 
> 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/20160706/816b3670/attachment.html>


More information about the swift-evolution mailing list