How to work with hashmap from memutils properly?
Siarhei Siamashka
siarhei.siamashka at gmail.com
Wed Feb 16 10:31:38 UTC 2022
On Friday, 11 February 2022 at 19:04:41 UTC, Sergey wrote:
>> Is this an attempt to implement a high performance solution
>> for the Benchmarks Game's LRU problem in D language?
>
> Yes. There is no D version there. And I'm just curious how fast
> is D in those problems.
Dlang (LDC), Crystal, Rust and C++ (Clang) all can generate
equally fast code. That's because they are using the same LLVM
backend for generating code. If you encounter a significant
performance difference, then there has to be a good reason for
that. And figuring out what exactly causes this difference allows
to fix the under-performing code in most cases.
A better question is how much effort is required to reach _peak_
performance using each of these programming languages? Or how
much effort is required to reach _good enough_ performance?
Let's look at the benchmark results from that site:
* https://programming-language-benchmarks.vercel.app/d-vs-rust
*
https://programming-language-benchmarks.vercel.app/crystal-vs-rust
* https://programming-language-benchmarks.vercel.app/d-vs-crystal
It may seem like Rust is kinda winning there. But is it a faster
language? Or did some people just invest a lot of their time into
creating better Rust code for these benchmarks? This time is not
tracked and not compared for different languages, while it's
probably the most important metric.
My personal opinion is that both Dlang and Crystal primarily
focus on developer convenience and rapid development. Rust
focuses on extreme safety at the expense of developer
convenience. C++ is neither safe nor convenient, but at least
it's fast and has excellent backward compatibility with the old
code.
Does it make sense to spend time on improving D code on that
benchmark site and reach performance parity with the other
languages? I don't know.
> It is interesting finding about the size of the LRU. Already
> seen your comment in the benchmark github.
Yes, I took a look and their initial implementation of the LRU
benchmark for Crystal was initially written by somebody, who is
apparently not very fluent with the language. This was difficult
for me to ignore, so I had an impulse to fix it and this
escalated into a kind of Rust vs. Crystal performance duel.
Now the size of the LRU cache has been changed to something more
reasonable in that benchmark and hash tables are back in the game
:-) You can try to contribute your D code to this benchmark site
and then work on making it faster.
> Though version with memutils still not working :)
Do you suspect that it's a bug in
https://github.com/etcimon/memutils ? I never heard about this
library before. But associative arrays are important enough and
it's reasonable to expect a decent implementation in the standard
library without having to use some third-party magic sauce for
that.
More information about the Digitalmars-d-learn
mailing list