[swift-evolution] Unmanaged, and COpaquePointer vs. Unsafe(Mutable)Pointer

Jacob Bandes-Storch jtbandes at gmail.com
Tue Dec 8 12:32:27 CST 2015

On Tue, Dec 8, 2015 at 9:42 AM, Joe Groff <jgroff at apple.com> wrote:

> COpaquePointer is IMO a vestige that should be eliminated completely. We'd
> ultimately like to import opaque C structs as distinct, non-constructible
> types in Swift, so that they can still be well-typed
> UnsafePointer<OpaqueThing> types in Swift.
> -Joe

That would be nice. But there is still the "context pointer" use case,
where conversions to/from UnsafePointer<Void> are needed. Would it make
sense for the Unmanaged type to deal in UnsafePointer<Void>, rather than

On Tue, Dec 8, 2015 at 9:37 AM, John McCall <rjmccall at apple.com> wrote:

> - Add implicit conversion from COpaquePointer to
> Unsafe(Mutable)Pointer<Void>, and/or vice versa.
> - Even better, add implicit conversion from Unmanaged<T> to COpaquePointer
> or UnsafePointer<Void>, behaving the way toOpaque() currently does. Also,
> replace Unmanaged.fromOpaque() with an initializer Unmanaged(_:
> UnsafePointer<Void>).
> We try very hard to avoid adding new implicit conversions.
> John.

My impression is that Unmanaged is pretty much only used for cases like
this. It seems a bit redundant given that UnsafePointer exists, and
converting between them is tedious as a user. Would it make sense to move
the passUnretained/takeRetainedValue/etc. functions onto UnsafePointer?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151208/13d4f55d/attachment.html>

More information about the swift-evolution mailing list