> On Jun 27, 2016, at 4:53 PM, Andrew Trick <[email protected]> wrote:
> 
> 
>> On Jun 23, 2016, at 6:40 PM, Andrew Trick via swift-evolution 
>> <[email protected]> wrote:
>> 
>> https://github.com/atrick/swift-evolution/blob/voidpointer/proposals/XXXX-unsaferawpointer.md
> 
> Would anyone like to bikeshed the allocation API? Here are two options with a 
> slight stylistic difference:
> 
> # Option 1:
> 
> extension UnsafeMutableRawPointer {
>    init<T>(allocatingCapacity: Int, of: T.Type)
> 
>    func deallocate<T>(capacity: Int, of: T.Type)
> }
> 
> let ptrToA = UnsafeMutableRawPointer(allocatingCapacity: 1, of: A.self)
>  .initialize(A.self, with: A())
> ptrToA.deinitialize(count: 1).deallocate(capacity: 1, of: A.self)
> 
> # Option 2:
> 
> extension UnsafeMutableRawPointer {
>    static allocate<T>(capacity: Int, of: T.Type) -> UnsafeMutableRawPointer
> 
>    func deallocate<T>(capacity: Int, of: T.Type)
> }
> 
> let ptrToA = UnsafeMutableRawPointer.allocate(capacity: 1, of: A.self)
>  .initialize(A.self, with: A())
> ptrToA.deinitialize(count: 1).deallocate(capacity: 1, of: A.self)

Since no one else has weighed in, and DaveA and I are in violent agreement, I'm 
going to revise the proposal to change the allocation API from:

  let rawPtr = UnsafeRawPointer(allocatingCapacity: n, of: T.self)

to

  let rawPtr = UnsafeRawPointer.allocate(capacity: n, of: T.self)

The only reason I had proposed the former was to mimic the current
UnsafePointer API. However, an initializer's primary purpose should be to
construct an instance. This functions primary purpose is to allocate
memory, returning an new instance as a useful side effect. This also
provides natural symmetry with:

  rawPtr.deallocate(capacity: n, of: T.self)

-Andy
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to