]> Cypherpunks.ru repositories - gostls13.git/commit
go/types, types2: don't build unnecessary error strings in implements
authorRobert Findley <rfindley@google.com>
Fri, 12 Aug 2022 21:51:55 +0000 (17:51 -0400)
committerRobert Findley <rfindley@google.com>
Mon, 15 Aug 2022 20:41:00 +0000 (20:41 +0000)
commitde0f4d190fc98c9dcc3d3537ae889be2c5eb7bd5
tree79cdd3a90153820f5d1ee96989b42723dbb4128b
parent7b45edb45016307151266731ccd158e14504598f
go/types, types2: don't build unnecessary error strings in implements

When accessing (*Checker).implements from types.AssignableTo or
types.ComparableTo, we don't need to build error strings -- they won't
be used.

This string manipulation showed up as a hot spot in gopls completion,
which checks a lot of type predicates when searching for candidate
completions.

This CL yields the following results for gopls' completion benchmarks:

StructCompletion-8         24.7ms ±34%  26.0ms ±17%     ~     (p=0.447 n=10+9)
ImportCompletion-8         1.41ms ± 2%  1.45ms ± 4%   +2.42%  (p=0.027 n=8+9)
SliceCompletion-8          27.0ms ±18%  25.2ms ± 3%   -6.67%  (p=0.008 n=9+8)
FuncDeepCompletion-8       57.6ms ± 4%  22.4ms ± 4%  -61.18%  (p=0.000 n=8+9)
CompletionFollowingEdit-8   157ms ±13%   103ms ±15%  -34.70%  (p=0.000 n=10+10)

Notably, deep completion (which searches many candidates) is almost 3x
faster after this change.

Fixes #54172

Change-Id: If8303a411aed3a20bd91f7b61e346d703084166c
Reviewed-on: https://go-review.googlesource.com/c/go/+/423360
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
src/cmd/compile/internal/types2/api.go
src/cmd/compile/internal/types2/instantiate.go
src/cmd/compile/internal/types2/lookup.go
src/cmd/compile/internal/types2/operand.go
src/go/types/api.go
src/go/types/instantiate.go
src/go/types/lookup.go
src/go/types/operand.go