]> Cypherpunks repositories - gostls13.git/commit
reflect: faster FieldByName, FieldByNameFunc
authorRuss Cox <rsc@golang.org>
Wed, 5 Sep 2012 13:35:53 +0000 (09:35 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 5 Sep 2012 13:35:53 +0000 (09:35 -0400)
commit5e3224ce79f9f200940fb7e605d96c5b1499e64f
tree7c056beb1f3b8bb87f1569cb3abf9432c758db75
parent845f4d6b47895a86d2fba6e4178698612f2a54bc
reflect: faster FieldByName, FieldByNameFunc

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
src/pkg/reflect/all_test.go
src/pkg/reflect/type.go