On Thu, 03 Mar 2011 11:03:31 -0500, Andrei Alexandrescu <[email protected]> wrote:

On 3/3/11 8:34 AM, Steven Schveighoffer wrote:
On Thu, 03 Mar 2011 07:41:49 -0500, Trass3r <[email protected]> wrote:

replace() doesn't work in CTFE anymore cause it was modified to be
based on Appender.
According to klickverbot, other phobos functions share that fate.

I think something should be done about this. Couldn't Appender be
implemented without using a pointer to a struct?

Yes, it is something I intend to do. I want to make an (un@safe) scoped
appender which does not use a pImpl, along with a safe appender which
does use pImpl.

It should be as easy as making the impl struct a public struct.

-Steve

One broader question would be if Appender's optimization is still needed after Steve's improvements to ~=. What is the current performance gap between using ~= and Appender?

It is large. The Appender struct keeps track of its capacity in a local member, instead of having to look it up using the GC. The lookup cache helps, but it's still a convoluted lookup, vs a simple member dereference.

Using trivial benchmarks, I found Appender is about 5x faster than ~=.

-Steve

Reply via email to