Newsgroups, off-topic
Steven Schveighoffer
schveiguy at yahoo.com
Fri Apr 23 10:19:45 PDT 2010
On Fri, 23 Apr 2010 12:28:55 -0400, Joseph Wakeling
<joseph.wakeling at webdrake.net> wrote:
> Steven Schveighoffer wrote:
>> As long as you discount the vast differences in allocation performance,
>> the code generated should be just as good as code generated by a C++
>> compiler. Your interpretation of performance did not focus on the right
>> part :) Your test application heavily used allocation and reallocation,
>> things that have nothing to do with how fast the code compiled by the
>> compiler is, but are based more on the algorithms behind the
>> allocation. An equivalent C++-based GC would probably show similar
>> performance (in fact, I think D's GC was based on a C++ GC).
>>
>> This is all taken with a grain of salt of course, the perception is
>> often more important than the technical details. This thread being a
>> prime example of it.
>
> I do see the point about allocation and reallocation -- what was
> bothering me a bit was that even taking those aspects out of the code
> and preallocating everything, I could write C++ code that _didn't_
> preallocate and still ran (much) faster ... :-)
If you are comparing vector's push_back to D's array append after
pre-allocating, you are still not comparing apples to apples...
Array appending is working without context -- it has no idea who owns the
data or how big it is until it does a GC query. vector owns the data and
knows exactly how big it is, so no expensive lookup needed. The benefit
of D arrays is you can pass them, or slices of them, around without
copying or worrying about them being deallocated very cheaply.
D's standard library should have a construct that duplicates the
performance of vector, I'm not sure if there is anything right now. I
thought Appender would do it, but you have said in the past it is slow.
This needs to be remedied.
-Steve
More information about the Digitalmars-d-learn
mailing list