I’ve not done much work lately on my forked-from-QXW, written-in-C crossword filler, as getting that code up to snuff amounts to a rewrite. But one thing it has going for it is that it is very fast.
Anyhow, down this rabbit hole I go, and one thing that is clear is that the interpreted language versions are not fast. Representative times to fill a grid:
cpython: 114 s node js: 49 s pypy: 26 s C (qxw): 0.5 s
Amazing how much faster pypy is compared to CPython running the same code!
Well, I spent an afternoon optimizing the python and JS fillers, and got a decent speed-up:
pypy: 5 s node js: 2 s (24x improvement)
Not bad, and in the realm of being usable for an online filler app. Much of the speedup came from avoiding common interpreted language constructs (like regex) that one would never go near in C.
I cobbled together enough of a web UI for this in order to fill this new puzzle on my phone while the 4 year old was having a long snooze in my lap. Guess what 20-Down we’ve been shopping for lately?