]> Cypherpunks.ru repositories - gostls13.git/commit
unicode/utf8: optimize ValidRune
authorJoe Tsai <joetsai@digital-static.net>
Wed, 26 Oct 2016 21:31:48 +0000 (14:31 -0700)
committerJoe Tsai <thebrokentoaster@gmail.com>
Wed, 26 Oct 2016 23:02:52 +0000 (23:02 +0000)
commit8eca08611ac1c65622400f526ab5b9065a4c9d67
treec1e306c0ccb2db8404c7de3048ac0be281d1784a
parent3cfc757c625d8f9fabf2c52e2ae3a8eab3fbdf61
unicode/utf8: optimize ValidRune

Re-writing the switch statement as a single boolean expression
reduces the number of branches that the compiler generates.
It is also arguably easier to read as a pair of numeric ranges
that valid runes can exist in.

No test changes since the existing test does a good job of
testing all of the boundaries.

This change was to gain back some performance after a correctness
fix done in http://golang.org/cl/32123.

The correctness fix (CL/32123) slowed down the benchmarks slightly:
benchmark                   old ns/op     new ns/op     delta
BenchmarkIndexRune/10-4     19.3          21.6          +11.92%
BenchmarkIndexRune/32-4     33.6          35.2          +4.76%

Since the fix relies on utf8.ValidRune, this CL improves benchmarks:
benchmark                   old ns/op     new ns/op     delta
BenchmarkIndexRune/10-4     21.6          20.0          -7.41%
BenchmarkIndexRune/32-4     35.2          33.5          -4.83%

Change-Id: Ib1ca10a2e29c90e879a8ef9b7221c33e85d015d8
Reviewed-on: https://go-review.googlesource.com/32122
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/unicode/utf8/utf8.go