• Daniel Martí's avatar
    cmd/go: avoid compiling most regexes at init · df557fe3
    Daniel Martí authored
    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: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    df557fe3
lazyre.go 1.39 KB