• 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
all_test.go 40.9 KB