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.

Reply via email to