• Russ Cox's avatar
    reflect: faster FieldByName, FieldByNameFunc · 5e3224ce
    Russ Cox authored
    The old code was a depth first graph traversal that could, under the
    right conditions, end up re-exploring the same subgraphs multiple
    times, once for each way to arrive at that subgraph at a given depth.
    
    The new code uses a breadth first search to make sure that it only
    visits each reachable embedded struct once.
    
    Also add fast path for the trivial case.
    
    benchmark                old ns/op    new ns/op    delta
    BenchmarkFieldByName1         1321          187  -85.84%
    BenchmarkFieldByName2         6118         5186  -15.23%
    BenchmarkFieldByName3      8218553        42112  -99.49%
    
    R=gri, r
    CC=golang-dev
    https://golang.org/cl/6458090
    5e3224ce
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
exp Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
old/netchan Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...