Why is std.algorithm so complicated to use?

Timon Gehr timon.gehr at gmx.ch
Tue Jul 10 04:36:02 PDT 2012


On 07/10/2012 11:41 AM, Jacob Carlborg wrote:
> On 2012-07-10 09:09, Jonathan M Davis wrote:
>
>> It's a complete failure because not every range works with every
>> range-based
>> function? We have isInputRange, isForwardRange, isRandomAccessRange,
>> hasSlicing, etc. for a reason. Different ranges have different
>> capabilities, and
>> different algorithms generate different types of ranges based on what
>> they do.
>> For instance, filter cannot possibly have slicing, because it's on O(n)
>> operation to determine which elements match the predicate. You have to
>> iterate
>> through _all_ of the elements. Rather than doing that (and therefore not
>> working with infinite ranges and being inefficient with non-infinite
>> ranges), it's
>> lazy, and if you _do_ want to process all of the elements to know
>> filter's
>> length and therefore make it slicable, you generate a new range from it -
>> generally with std.array.array. map is in the same boat. It has to
>> generate
>> new range type, and the choice is between being lazy and efficient (and
>> therefore require a call to array) or being inefficient and calling array
>> internally.
>
> Well, I haven't been able to use a single function from std.algorithm
> without adding a lot of calls to "array" or "to!(string)". I think the
> things I'm trying to do seems trivial and quite common. I'm I overrating
> std.algorithm or does it not fit my needs?
>

If you consider it a problem to call array or to!string when you want
to get an array, then it does not fit your needs.


More information about the Digitalmars-d mailing list