Jonathan M Davis:
- 'in' operator returning a pointer to the element.
Really? I use that all the time with AAs. Without that, you
would have to do
two lookups to get an object which might not be in the
container, so it would be less efficient.
LDC1 compiler introduced a small optimization, it looks for
nearby associative array lookups and removes the second of them
where possible. In my code I have seen this frees me to use "in"
nearby followed by [], with the same efficiency of a single AA
lookup. With this small optimization, D "in" is free to return a
more clean boolean.
This optimization doesn't work if you want to store the pointer
returned by "in" to use it later, but in my code this pattern
doesn't happen, I think it's quite uncommon.
Java/JavaScript/Lua show that the language design has to focus on
what's hard to optimize away for the compiler, like offering ways
to the programmer to specify higher level semantics (like
asserting: foo(a,b) is equal to foo(b,a)), instead of focusing on
what a not dumb static compiler (not even a JIT) is able to
optimize away.
Bye,
bearophile