On Tuesday, 16 January 2024 at 22:15:04 UTC, Siarhei Siamashka wrote:
On Tuesday, 16 January 2024 at 21:15:19 UTC, Renato wrote:
For the record (I already posted this on GitHub)... here's [my current fastest solution](https://github.com/renatoathaydes/prechelt-phone-number-encoding/blob/dlang-key-hash-incremental/src/d/src/dencoder.d) time using the same algorithm as Rust ...

[...]

... what I am really curious about is what the code I wrote is doing wrong that causes it to run 4x slower than Rust despite doing "the same thing"...

It's a GC allocations fest. Things like this make it slow:

```diff
     {
-        string digit = [digits[0]];
+        string digit = digits[0 .. 1];
         words.insertBack(digit);
```

I was under the impression that `[digits[0]]` would just use a stack allocation??

The profiler does not show any GC anymore, are you sure it's a "GC allocations fest"???


And at the top is the associative array lookup (when profiling the handling of the "phones_1_000_000_with_empty.txt" input file):

```
    36.85%  dencoder  dencoder              [.] _aaInX
    12.38%  dencoder  dencoder              [.] void


Well, I know, but I did everything to make the hash "cheap" to compute so I still don't see a way to improve it.


Reply via email to