GOPHERSPACE.DE - P H O X Y
gophering on hngopher.com
HN Gopher Feed (2017-07-10) - page 1 of 10
 
___________________________________________________________________
Iterators and Streams in Rust and Haskell
62 points by psibi
https://www.fpcomplete.com/blog/2017/07/iterators-streams-rust-h...
___________________________________________________________________
 
iainmerrick - 56 minutes ago
I feel like the author has felt obliged to include the full
results, which is noble, but it's mostly obscuring the interesting
results.What does it matter if the "cheating" versions are faster,
since they're doing something completely different? (OK, in
principle it could be the same with an unrealistically magical
optimizer.)Seems to me the key point is that a bunch of high-level
constructs in both Rust and Haskell are very nearly as fast as a
tight loop in C. That's great!The versions that are much slower
don't seem very surprising, as they involve boxing the ints. (Edit
to add: OK, reading more closely, I guess 'Haskell iterator 5' is
interesting to dig into.)
 
pklausler - 1 hours ago
> But look again: C is taking 87 nanoseconds, while Rust and
Haskell both take about 175 microseconds. It turns out that GCC it
able to optimize this into a downward-counting loop, which
drastically improves the performance. We can do similar things in
Rust and Haskell to get down to nanosecond-level performance, but
that's not our goal today. I do have to say: well done GCC
.Downward-counting or not, it is simply impossible for GCC to
generate code that executes all 1,000,000 iterations of the loop in
87ns.  That would be 87 femtoseconds per iteration, on average.More
likely, GCC figured out how to collapse the entire loop into a
closed-form expression that is a function of the loop length.
 
  gpderetta - 1 hours ago
  I.e. benchmarking is hard.
 
    e12e - 20 minutes ago
    Being able to tell that a loop is gone shouldn't be too hard
    with a diff of the assembler output with optimizations on and
    off - at least for fairly trivial code.
 
  kccqzy - 43 minutes ago
  I don't think so. https://godbolt.org/g/GBZgER
 
    nemetroid - 20 minutes ago
    Perhaps the entire call of the function was replaced by a
    constant, then.