May be totally wrong about this but I always thought that 
ManagedBuffer(Pointer) would be really useful in conjunction w/ Metal. In 
particular, MTLBuffer gives you a region of memory that is in common 
configurations shared btwn the CPU and GPU. I believe the idea is you write 
your vertex data or textures or whatever into that region, which you then 
associate with a particular command you issue to the GPU.

-Colin

> On Oct 19, 2016, at 6:28 PM, Alexis via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> A bit late to this game, because I didn’t fully understand the “point” of 
> ManagedBuffer(Pointer). After a good week of messing around with these in 
> Dictionary/Array/String, I now have Opinions.
> 
> I agree ManagedBufferPointer is largely unnecessary. However it’s seeming a 
> lot like ManagedBuffer (and its equivalents) are suboptimal for the standard 
> library’s purposes too!
> 
> In particular, pretty much every one of these buffers that I see wants to be 
> a subclass of some NS* collection so that it can be toll-free bridged into 
> objective C. This means that all those types are forced to directly drop down 
> to allocWithTailElems, rather than using a nice abstraction that does it for 
> them. Array does this right now, and I’ve got a PR up for review that’s doing 
> the same thing to the HashedCollections. It’s an outstanding bug that String 
> isn’t doing this (forcing its buffer to be wrapped in another class to be 
> bridged).
> 
> I don’t really feel any pain from directly using allocWithTailElems, it’s a 
> great API. It just leaves me at a loss for when I’d reach for ManagedBuffer 
> at all, as it’s very limited.
> 
> 
>> On Oct 13, 2016, at 3:11 PM, Erik Eckstein via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> I created a proposal: https://github.com/apple/swift-evolution/pull/545 
>> <https://github.com/apple/swift-evolution/pull/545>
>> 
>>> On Oct 11, 2016, at 11:32 PM, Dave Abrahams via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> 
>>> on Tue Oct 11 2016, Károly Lőrentey <swift-evolution@swift.org 
>>> <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>>> +1
>>>> 
>>>> ManagedBuffer has been really useful a couple of times, but I never
>>>> found a use for ManagedBufferPointer. I can’t even say I’m entirely
>>>> sure what need it was originally designed to fulfill.
>>> 
>>> The real need is/was to be able to do the same kind of storage
>>> management in classes not derived from ManagedBuffer.  This can be
>>> important for bridging, where the buffers of various native swift
>>> containers need to be derived from, e.g., NSString or NSArray.  That is,
>>> however, an extremely stdlib-specifc need.
>>> 
>>> 
>>>>> On 2016-10-11, at 00:12, Erik Eckstein via swift-evolution
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> 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
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>> 
>>> -- 
>>> -Dave
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to