Why is std.algorithm so complicated to use?

Jacob Carlborg doob at me.com
Tue Jul 10 09:29:46 PDT 2012


On 2012-07-10 17:11, Christophe Travert wrote:

> What is wrong with foo.chain(["bar"])?

I think it conceptually wrong for what I want to do. I don't know if I 
misunderstood ranges completely but I'm seeing them as an abstraction 
over a collection. With most mutable collection you can add/append an 
element.

> you might try this (untested)
>
>
> string function(Parameter) stringify = (x)
> {
>   return (x.isConst? "const("~x.type~")": x.type)
>      ~ (x.name.any?" "~translateIdentifier(x.name):"");
> }
>
> auto params = parameters
>    .map!stringify()
>    .chain(variadic? []: ["..."])
>    .joiner(", ");
>
> context ~= params;
>
> I am not sure this will be more efficient. joiner may be slowed down by
> the fact that it is called with a chain result, which is slower on
> front. But at leat you save yourself the heap-allocation of the params
> array*.
>
> I would use:
> context ~= parameters.map!stringify().joiner(",  ");
> if (variadic) context ~= ", ...";
>
> To make the best implementation would require to know how the String
> context works.
>
> *Note that here, stringify is not lazy, and thus allocates. It
> could be a chain or a joiner, but I'm not sure the result would really
> be more efficient.

String is a wrapper around str.array.Appender.

-- 
/Jacob Carlborg




More information about the Digitalmars-d mailing list