Vote for std.digest: ACCEPTED!

Johannes Pfau nospam at example.com
Tue Sep 4 04:01:27 PDT 2012


Am Fri, 31 Aug 2012 01:37:10 +0400
schrieb Dmitry Olshansky <dmitry.olsh at gmail.com>:

> On 30-Aug-12 12:33, Johannes Pfau wrote:
> > Am Thu, 30 Aug 2012 00:55:40 +0400
> [snip]
> 
> >> The end result is we need to get a version of copy that:
> >> - doesn't break existing code
> >> - takes destination by ref when possible thus fixing this pattern.
> >>
> >
> > Would it be good enough if we special cased arrays to have the same
> > behavior as now and used 'auto ref' for all other output ranges?
> >
> > I think we can't avoid breaking some code though. If some code
> > relied on the second parameter being passed by value, there's
> > nothing we can do?
> >
> 
> Yes, that's the catch. Even introducing special case for arrays
> doesn't prevent code breakage.
> 
> > E.g:
> > ----
> > auto a = copy([0], start); // a = start ~ 0
> > auto b = copy([1], start); // b = start ~ 1
> > auto c = copy([2], start); // c = start ~ 2
> >
> 
> Then it seems to me that the only way out is to 'educate the masses'
> on the proper copy idiom. And we already have sort of the same thing
> with std.algorithm.remove.
> Interestingly, copy documentation doesn't indicate how output ranges 
> work with it, instead focusing on arrays and (probably) forward
> ranges. AFAICT output range doesn't have a "leftover" portion.
> 
> What about adding copyInto algorithm that requires output range and 
> leaves the usual copy to work on forward ones? (it then would require 
> ref argument or class instance obviously).
> 
> A couple of releases ago I actually added one function in what I was 
> meant to be a family of functions. The aim of *Into was to fix 
> allocation happiness of e.g. replace and similar algorithms when the 
> resulting object is created only to be forwarded to some output range:
> 
> http://dlang.org/phobos/std_array.html#replaceInto
> (that reminds me to add std.regex.replaceInto)
> 
> The other use case is e.g. preallocated buffers, and ATM it seems the 
> only way to get GC-free replace/join etc. before we get allocators.
> 

First attempt to implement copyInto:
https://github.com/D-Programming-Language/phobos/pull/772



More information about the Digitalmars-d mailing list