• Ilya Tocar's avatar
    unicode: speed-up is16/is32 · bc8bb5b2
    Ilya Tocar authored
    Avoid division in common case. There are 5438 ranges in unicode/tables.go
    4110 of them have stride 1.
    Stride 1 case got significantly faster. Other stride is a bit slower.
    Measured by
    
    import (
    	"testing"
    	"unicode"
    )
    
    func BenchmarkDiv1(b *testing.B) {
    	rtb := &unicode.RangeTable{
    		R16: []unicode.Range16{
    			{0xa800, 0xdfff, 1}, // or 3
    		},
    	}
    	for i := 0; i < b.N; i++ {
    		unicode.Is(rtb, rune(0xc700))
    	}
    }
    
    Div1-6  15.6ns ± 1%   9.9ns ± 1%  -36.54%  (p=0.000 n=10+10)
    Div3-6  15.5ns ± 1%  16.1ns ± 1%   +3.67%  (p=0.000 n=10+10)
    
    Helps a bit with xml parsing from issue #21823
    
    XMLsax-6   30.9s ± 0%   29.6s ± 0%  -4.15%  (p=0.000 n=10+9)
    
    Change-Id: Ibac1a91d7b9474d0c134b0add83e56caa62daa20
    Reviewed-on: https://go-review.googlesource.com/63390
    Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    bc8bb5b2
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...