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.