On 11/23/16 4:44 PM, ketmar wrote:
On Wednesday, 23 November 2016 at 21:40:52 UTC, Steven Schveighoffer wrote:
So the better way is to sort based on byte array, and just use memcmp
for everything.

i am not completely sure that this is really better. sorting and
generating tables is done in glue layer, which can be different for
different codegens. and `.compare` method, that is used for sorting
strings may be used in other places too. by introducing something like
`switchCompare()` we will add unnecessary complexity to the compiler,
will make sort order less obvious, and won't really get significant
speedup, as binary search doesn't really do alot of comparisons anyway.

I'm not certain of how difficult this will be, or how much risk there is. What I am certain of is that the user doesn't care that the compiler really isn't sorting the strings alphabetically, and that he wants the fastest code possible for a switch statement.

I can't see why you need to deal with the glue layer at all -- just tell the glue layer that it's a list of strings and not dstrings ;)

I also don't actually know that memcmp is faster than wmemcmp, so maybe there is even an advantage to changing behavior for dstring searching.

i thing it is better to be fixed in druntime.

This can be a solution, for sure. And in reality, it's not *that* much slower -- you are still doing a binary search.

I wonder if there is a "binary search among arrays" algorithm that can be optimized for this.

-Steve

Reply via email to