Small Buffer Optimization for string and friends
H. S. Teoh
hsteoh at quickfur.ath.cx
Sun Apr 8 07:24:12 PDT 2012
On Sun, Apr 08, 2012 at 04:11:10PM +0200, Tove wrote:
> On Sunday, 8 April 2012 at 13:53:07 UTC, H. S. Teoh wrote:
> >On Sun, Apr 08, 2012 at 12:56:38AM -0500, Andrei Alexandrescu
> >wrote:
> >[...]
> >>1. What happened to the new hash project? We need to take that to
> >>completion.
> >[...]
[...]
> >The major outstanding issues are:
> >
> >- Qualified keys not fully working: the current code has a few corner
> > cases that don't work with shared/immutable/inout keys. One major
> > roadblock is how to implement this:
> >
> > alias someType T;
> > inout(T) myFunc(inout(T) arg, ...) {
> > int[inout(T)] aa;
> > ...
> > }
> >
> > The problem is that inout gets carried over into the AA template,
> > which breaks because it instantiates into something that has:
> >
> > struct Slot {
> > hash_t hash;
> > inout(T) key; // <-- this causes a compile error
> > Value value;
> > }
[...]
> doesn't this work?
> immutable std.traits.Unqual!(inout(T)) key;
I suppose so, but the problem is more with the return type of various AA
functions. If the user writes int[inout(T)] aa, then he would expect
that aa.keys should return inout(T)[]. But the problem here is that this
is impossible to express in the current system, because inout has a
different meaning when you write it in the AA method, than its meaning
in the context of the calling function. For example, this doesn't quite
work:
struct AA {
...
inout(Key) keys() {
...
// Problem: inout here doesn't mean what it
// means in the context of the caller
}
}
T
--
Tech-savvy: euphemism for nerdy.
More information about the Digitalmars-d
mailing list