On Tuesday, 24 April 2012 at 11:24:44 UTC, Regan Heath wrote:
On Mon, 23 Apr 2012 16:43:20 +0100, Steven Schveighoffer
<schvei...@yahoo.com> wrote:
While dealing with unicode in my std.stream rewrite, I've
found that hand-decoding dchars is way faster than using
library calls.
After watching Andrei's talk on generic and generative
programming I have to ask, which routines are you avoiding ..
it seems we need to make them as good as the hand coded code
you've written...
from memory (don't have the code in front of me right now), it
was std.uni.decode, and using foreach(dchar d; str) (which cannot
be inlined currently).
IIRC, std.uni.decode was not being inlined. So I tried
hand-inlining it (I also discovered some optimizations it was not
using), and it made a huge difference.
In regards to this discussion, I think icmp can also be improved
when run on a char array, by doing a byte comparison (no dchar
decoding) until it finds a difference. That might be a huge
speedup. Right now, all dchars are being decoded, and translated
to the toLower counterpart. It may have an opposite effect,
however, if there are a lot of strings that are equivalent when
ignoring case, but not exactly the same.
-Steve