What about putting array.empty in object.d?

Jonathan M Davis jmdavisProg at gmx.com
Thu Mar 22 11:31:54 PDT 2012


On Thursday, March 22, 2012 07:12:22 Steven Schveighoffer wrote:
> Note that the default std::list has O(1) length (as does dcollections'
> LinkedList). It's not as inevitable as you think.

It depends on bothe container its implementation as to how efficient length/size 
is (and in the case of linked lists, it's generally a question of whether you 
want splicing to be efficient or size/length to be efficient). But you don't have 
to worry about how efficient length/size's implementation is when checking 
whether a container is empty if you just always use empty rather than length 
== 0, so it's a good habit to get into. There's generally no advantage to 
using length == 0 over empty.

There's a slight advantage with D and arrays only in that empty isn't built into
arrays, so you have to import std.array to use empty, and empty is just a
wrapper around length == 0, which will then be _slightly_ less efficient without
-inline, but I'd still argue for using empty, because it avoids the whole issue
of length/size's efficiency.

Regardless, fortunately, it's not as big an issue in D as in C++ thanks to the 
fact that Phobos defines length to be O(1) - and it's good that dcollections 
does the same.

- Jonathan M Davis


More information about the Digitalmars-d mailing list