Help optimize D solution to phone encoding problem: extremely slow performace.
ryuukk_
ryuukk.dev at gmail.com
Fri Jan 19 20:05:07 UTC 2024
On Friday, 19 January 2024 at 17:18:36 UTC, evilrat wrote:
> On Friday, 19 January 2024 at 16:55:25 UTC, ryuukk_ wrote:
>>
>> You do hash map lookup for every character in D, it's slow,
>> whereas in Rust you do it via pattern matching, java does the
>> same, pattern matching
>>
>>
>> Yet another reason to advocate for pattern matching in D and
>> switch as expression
>
> There is another important difference, i quickly looked up D
> associative array implementation and the search looks like
> nlog(n) complexity with plain loop iteration of hashes, whereas
> rust's implementation is using "swisstable" algorithm
> implementation that has packed SIMD optimized lookups, this is
> likely where the 3x speed difference comes from.
>
> Tried to look up rust implementation and it is SOOO generic
> that I was unable to decipher it to find the actual key search
> and stores.
>
> Anyway here is an interesting article about rust implementation
> https://faultlore.com/blah/hashbrown-tldr/
I'm not talking about the difference between the hashmap
implementation, but the difference between the algorithm used to
lookup the characters
https://github.com/renatoathaydes/prechelt-phone-number-encoding/blob/9b1d7f026943841638a2729922cf000b1b3ce655/src/java/Main2.java#L106-L134
vs
https://github.com/renatoathaydes/prechelt-phone-number-encoding/blob/40cd423fc9dd1b1b47f02d8ab66ca03420820e84/src/d/src/dencoder.d#L10-L49
If D had pattern matching and switch as expression, the faster
method would be:
1. the most obvious choice
2. the fastest by default
3. the most clean
To save from having to write a old-school verbose `switch`, i
suspect he went with a hashmap, wich is slower in that case,
hence why i keep advocate for that feature, or i should say, that
upgrade to `switch`, wich java has adopted, as well as rust:
https://github.com/renatoathaydes/prechelt-phone-number-encoding/blob/40cd423fc9dd1b1b47f02d8ab66ca03420820e84/src/rust/phone_encoder/src/main.rs#L146-L168
More information about the Digitalmars-d-learn
mailing list