[swift-evolution] Pitch: Improved Swift pointers

Taylor Swift kelvin13ma at gmail.com
Wed Jul 12 14:16:12 CDT 2017

Hi all, I’ve written up a proposal to modify the unsafe pointer API for
greater consistency, safety, and ease of use.


Swift currently offers two sets of pointer types — singular pointers such
as UnsafeMutablePointer, and vector (buffer) pointers such as UnsafeMutable
*Buffer*Pointer. This implies a natural separation of tasks the two kinds
of pointers are meant to do. For example, buffer pointers implement
Collection conformance, while singular pointers do not.

However, some aspects of the pointer design contradict these implied roles.
It is possible to allocate an arbitrary number of instances from a type
method on a singular pointer, but not from a buffer pointer. The result of
such an operation returns a singular pointer, even though a buffer pointer
would be more appropriate to capture the information about the *number* of
instances allocated. It’s possible to subscript into a singular pointer,
even though they are not real Collections. Some parts of the current design
turn UnsafePointers into downright *Dangerous*Pointers, leading users to
believe that they have allocated or freed memory when in fact, they have

This proposal seeks to iron out these inconsistencies, and offer a more
convenient, more sensible, and less bug-prone API for Swift pointers.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170712/3aaabb30/attachment.html>

More information about the swift-evolution mailing list