Performance of ranges verses direct

John Colvin john.loughran.colvin at gmail.com
Wed Dec 11 02:10:17 PST 2013


On Wednesday, 11 December 2013 at 07:29:39 UTC, Frustrated wrote:
>
> Has anyone done any work on comparing the performance of ranges 
> vs using direct straightforward code(optimized in the sense of 
> the way ranges work but by hand).
>
> e.g., How does filter compare to a simple loop over the 
> elements and comparing it. How does a a chain of UFCS compare 
> to doing the same in a simple loop.

In my very unscientific experiments:
range based, functional style D code runs about 75-100% speed of 
the equivalent explicit iterative version.

A lot of the performance loss is down to missed optimisations, in 
particular inlining. gdc/ldc are good at this, dmd not so good so 
you'll likely see bigger performance gaps with dmd than the other 
compilers.


General advice: use ranges, std.range and std.algorithm wherever 
possible. Profile the resulting code and write out the hotspots 
in an imperative style to see if you can squeeze out some extra 
speed.


More information about the Digitalmars-d-learn mailing list