]> Cypherpunks repositories - gostls13.git/commit
cmd/go: avoid compiling most regexes at init
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 30 Dec 2018 17:46:22 +0000 (18:46 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Wed, 27 Feb 2019 19:39:47 +0000 (19:39 +0000)
commitdf557fe3ea94ff8888abd6a6ab4cc5d5351d77a6
tree9cb9182a0fe022a4cfbaf81bf5d4e839fc49b40d
parent694ee61277300a4c24d570e75c1b63fff8dea468
cmd/go: avoid compiling most regexes at init

These regexes are all related to commands like get and build, so they're
unnecessary for simpler commands like env. In particular, we need env to
be fast, since libraries like go/packages call it early and often. Some
external Go tools are interactive, so milliseconds matter.

lazyregexp eagerly compiles the patterns when running from within a test
binary, so there's no longer any need to do that as part of non-test
binaries.

Picking up the low-hanging fruit spotted by 'perf record' shaves off
well over a full millisecond off the benchmark on my laptop:

name         old time/op    new time/op    delta
ExecGoEnv-8    4.92ms ± 1%    3.81ms ± 0%  -22.52%  (p=0.004 n=6+5)

This CL required adding a few more methods to the lazy regexp wrapper.

Updates #29382.

Change-Id: I22417ab6258f7437a2feea0d25ceb2bb4d735a15
Reviewed-on: https://go-review.googlesource.com/c/155540
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/cmd/go/internal/get/vcs.go
src/cmd/go/internal/modfetch/codehost/vcs.go
src/cmd/go/internal/modfetch/pseudo.go
src/cmd/go/internal/modfile/rule.go
src/cmd/go/internal/modload/init.go
src/cmd/go/internal/work/exec.go
src/cmd/go/internal/work/security.go
src/go/doc/example.go
src/go/doc/headscan.go
src/internal/lazyregexp/lazyre.go