On Tuesday, 28 May 2013 at 07:26:06 UTC, Sebastian Graf wrote:
On Tuesday, 28 May 2013 at 00:16:23 UTC, bearophile wrote:
Sebastian Graf:
Plus, the compiler is still able to optimize most of the
delegate/range fluff away (as opposed to e.g. C#).
There are several optimizations that D/DMD is not performing
on those ranges and higher order functions. The Haskell
compiler GHC optimized that stuff using purity, library
defined "rewrite rules", stream fusion/deforestation and more.
DMD does nothing of this, or very little. I think so far
Walter has shown no interest in this.
Point taken, but what I actually meant was that the compiler is
allowed to optimize it all away in _theory_. You cannot have
this in C#, where filtering a
big array is faster with a foreach-if combination than with an
array.Where(predicate) linq statement (I blame the cache and
delegate indirection). Since there is no strong compile time
templating, this will not change in the future.
Of course this is a very specific case, but it is something you
have to keep in mind. The difference for some MB-sized arrays
is noticable.
TIL that GHC already has this. I should really continue
learning Haskell.
Even with NGEN or Mono -aot?