The purpose of ManagedBufferPointer is to create a buffer with a custom 
class-metadata to be able to implement a custom deinit (e.g. to destroy the 
tail allocated elements).
It was used in Array (before I replaced it with the new 
tail-allocated-array-built-ins). But now it’s not used anymore in the standard 
library.

As a replacement for ManagedBufferPointer one can just derive a class from 
ManagedBuffer and implement the deinit in the derived class.

final class MyBuffer : ManagedBuffer<MyHeader, MyElements> {
  deinit {
    // do whatever needs to be done
  }
}

// creating MyBuffer:
let b = MyBuffer.create(minimumCapacity: 27, makingHeaderWith: { myb in return 
MyHeader(...) })

IMO ManagedBuffer is much cleaner than ManagedBufferPointer (it doesn’t need 
this custom bufferClass to be passed to the constructor). Also 
ManagedBufferPointer doesn’t use SIL tail-allocated arrays internally. Although 
this is not something visible to the programmer, it makes life easier for the 
compiler.

So I suggest that we deprecate ManagedBufferPointer.

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

Reply via email to