Appender and CTFE

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 3 08:19:12 PST 2011


On Thu, 03 Mar 2011 11:03:31 -0500, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 3/3/11 8:34 AM, Steven Schveighoffer wrote:
>> On Thu, 03 Mar 2011 07:41:49 -0500, Trass3r <un at known.com> 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 at 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


More information about the Digitalmars-d mailing list