<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Dec 13, 2016, at 1:37 PM, Karl via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On 13 Dec 2016, at 20:33, Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">on Tue Dec 13 2016, Alexey Komnin &lt;</span><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">swift-evolution@swift.org</a><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">&gt; wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Hi everyone!<br class=""><br class="">I really don't know whether you have discussed it before. So, here is the deal.<br class=""><br class="">Currently, Builtin routines like allocWithTailElems_{n} not available<br class="">outside of stdlib. On the other hand, those routines are widely used<br class="">in implementation of containers: Array, Set, Dictionary and others.<br class=""><br class="">On the other hand, some Builtin routines are wrapped by publicly<br class="">available operators and functions like unsafeBitCast, (==).<br class="">ManagedBuffer.create(minimumCapacity:) class method is just a wrapper<br class="">around call to allocWithTailElems_1 builtin function. So, it is<br class="">possible to implement some containers, like Deque or linked-list using<br class="">ManagedBuffer, but it's not enough if developer is going to implement<br class="">advanced data structures like OrderedSet, LRU-cache or something more<br class="">complex.<br class=""><br class="">Instead, the developers are forced to use complex pointer arithmetic<br class="">with UnsafeRawPtr. My point is: I think the language must provide all<br class="">the available tools to build algorithms and data structures. First of<br class="">all, it should provide the tools used for stdlib implementation.<br class=""><br class="">Could we make some ManagedBuffer-alike wrappers around<br class="">allocWithTailElems_{n} routines?<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Feel free to design and propose these interfaces (in phase 2 of course).</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote></div><br class=""><div class="">Would the optimiser hints also possibly be up for making public (_onFastPath() and so)?</div><div class=""><br class=""></div><div class="">You can use them anyway; I don’t know why they’re underscored…</div></div></div></blockquote><br class=""></div><div>I believe the underscored stuff is consider an implementation detail that <i class="">should</i> be private, but can’t be for some technical reason, and is subject to change without notice. I think.</div><div><br class=""></div><div>Now that I’ve said that, someone’s going to go do an analysis of all the “_*” symbols and point out that 95% of them haven’t changed since the first Mac OS X Public Beta back in 2000. Then someone else will say that “subject to” doesn’t mean “will”.</div><div><br class=""></div><div>- Dave Sweeris</div></body></html>