[swift-evolution] Add wrappers for allocWithTailElems_{n} routines

Dave Abrahams dabrahams at apple.com
Tue Dec 13 13:33:06 CST 2016


on Tue Dec 13 2016, Alexey Komnin <swift-evolution at swift.org> wrote:

> Hi everyone!
>
> I really don't know whether you have discussed it before. So, here is the deal.
>
> Currently, Builtin routines like allocWithTailElems_{n} not available
> outside of stdlib. On the other hand, those routines are widely used
> in implementation of containers: Array, Set, Dictionary and others.
>
> On the other hand, some Builtin routines are wrapped by publicly
> available operators and functions like unsafeBitCast, (==).
> ManagedBuffer.create(minimumCapacity:) class method is just a wrapper
> around call to allocWithTailElems_1 builtin function. So, it is
> possible to implement some containers, like Deque or linked-list using
> ManagedBuffer, but it's not enough if developer is going to implement
> advanced data structures like OrderedSet, LRU-cache or something more
> complex.
>
> Instead, the developers are forced to use complex pointer arithmetic
> with UnsafeRawPtr. My point is: I think the language must provide all
> the available tools to build algorithms and data structures. First of
> all, it should provide the tools used for stdlib implementation.
>
> Could we make some ManagedBuffer-alike wrappers around
> allocWithTailElems_{n} routines?

Feel free to design and propose these interfaces (in phase 2 of course).

-- 
-Dave



More information about the swift-evolution mailing list