std.container.RedBlackTree versus C++ std::set

monarch_dodra monarchdodra at gmail.com
Wed Feb 13 22:56:35 PST 2013


On Wednesday, 13 February 2013 at 23:22:03 UTC, Ivan Kazmenko 
wrote:
> Hi!
> -----
> Ivan Kazmenko.

Keep in mind that C++ and D have very different philosophies 
regarding copy construction.

C++ has "strong ownership", so for example, whenever you copy a 
string/vector, or pass it by value, the whole damn thing has to 
be completely duplicated. It's so expansive that C++ has gone out 
of its way to use pass-by-reference semantics, as well (now) 
RValue references.

D, on the other hand (being GC), has a "shallow ownership" 
philosopy: Basically, when you make a copy, nothing happens, 
appart from the binary copy of the object. You want to pass a 
string by value? that's 8 bytes of data. Period. The *most* 
complex CC I have *ever* seen in D merely increments a reference 
counter. That's it. 90% (99%?) of the time, there isn't even a 
postblit implemented. Because of this, D has embraced pass by 
value.

Not to mention, if you are using classes, those are already 
pointer types. Why pass them by ref?

--------

The conclusion is that the comparison is not fair: D's pass by 
value is not *very* different from C++'s pass by ref (in amount 
of data copied).

If you *do* want a fair-er comparison, then I'd suggest you 
implement a ".dup" on your object, and see how many times THAT 
gets called. Guess what: 0.

I'm not saying D's approach is perfect, just that D's library is 
optimized for D-like types.

Just the same, a lot the stl is not properlly optimized for 
little POD types, as they get passed around by ref, when their 
actual size is the same as the pointer referencing them...


More information about the Digitalmars-d-learn mailing list