On Monday, 24 November 2025 at 14:37:22 UTC, Jabba Laci wrote:
I implemented [Advent of Code 2015, Day 6, Part
1](https://adventofcode.com/2015/day/6) in D. The code is here:
https://github.com/jabbalaci/AdventOfCode2015/tree/main/day06/d/part1 . It runs for 3 seconds. I found it a bit much, so I also wrote it in Python. To my surprise, the Python program also ran for 3 seconds. I expected that the D program should be much faster.
I used a dictionary, where the key is a `Tuple!(int, int)`.
Maybe its hashing is too slow? How could it be sped up?
Another question: for `process_line()`, I pass the dictioary by
reference, since I want to modify the dictionary inside this
procedure. Without `ref`, the original `d` in `main()` remained
empty. However, I've already written programs when I passed a
dictionary without `ref` and the changes to the dictionary were
visible outside of the procedure. What's the rule here?
after some investigating it just seems that its mostly down to
using a hashtable
in the process line function
2540 msecs go by
2394 msecs are entirely from the if statemante with the AAs
when I profiled I also saw a lot of AA functions being called
you effectively are not comparing D vs Python
you are comparing pythons hashtable implementation vs Ds
hashtable implementation
Python functions and datatypes can be highly optimized C code I
believe the hashtable is one such case,
and D is still the same speed and faster depending on computer
using your code D was roughly twice as fast as Python on my
computer
when you are comparing two languages you have to be careful to
not accidentally add accidental bottlenecks, where you are not
comparing the bottle neck rather than the languages