toString refactor in druntime

Manu via Digitalmars-d digitalmars-d at puremagic.com
Sat Nov 1 06:39:33 PDT 2014


On 31 October 2014 06:15, Steven Schveighoffer via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> On 10/30/14 2:53 PM, Jonathan Marler wrote:
>>>
>>>
>>> Before we start ripping apart our existing APIs, can we show that the
>>> performance is really going to be so bad? I know virtual calls have a
>>> bad reputation, but I hate to make these choices absent real data.
>>>
>>> For instance, D's underlying i/o system uses FILE *, which is about as
>>> virtual as you can get. So are you avoiding a virtual call to use a
>>> buffer to then pass to a virtual call later?
>>>
>> I think its debatable how useful this information would be but I've
>> written a small D Program to try to explore the different performance
>> statistics for various methods.  I've uploaded the code to my server,
>> feel free to download/modify/use.
>>
>> Here's the various methods I've tested.
>> /**
>>     Method 1: ReturnString
>>               string toString();
>>     Method 2: SinkDelegate
>>               void toString(void delegate(const(char)[]) sink);
>>     Method 3: SinkDelegateWithStaticHelperBuffer
>>               struct SinkStatic { char[64] buffer; void
>> delegate(const(char)[]) sink; }
>>           void toString(ref SinkStatic sink);
>>     Method 4: SinkDelegateWithDynamicHelperBuffer
>>               struct SinkDynamic { char[] buffer; void
>> delegate(const(char)[]) sink; }
>>           void toString(ref SinkDynamic sink);
>>           void toString(SinkDynamic sink);
>>
>>   */
>>
>> Dmd/No Optimization (dmd dtostring.d):
>>
>> RuntimeString run 1 (loopcount 10000000)
>>    Method 1     : 76 ms
>>    Method 2     : 153 ms
>
>
> I think the above result is deceptive, and the test isn't very useful. The
> RuntimeString toString isn't a very interesting data point -- it's simply a
> single string. Not many cases are like that. Most types have multiple
> members, and it's the need to *construct* a string from that data which is
> usually the issue.
>
> But I would caution, the whole point of my query was about data on the
> platforms of which Manu speaks. That is, platforms that have issues dealing
> with virtual calls. x86 doesn't seem to be one of them.
>
> -Steve

I want to get back to this (and other topics), but I'm still about 30
posts behind, and I have to go...
I really can't keep up with this forum these days :/

I'll be back on this topic soon...


More information about the Digitalmars-d mailing list