• Robert Griesemer's avatar
    [dev.inline] cmd/internal/src: introduce compact source position representation · 472c792e
    Robert Griesemer authored
    XPos is a compact (8 instead of 16 bytes on a 64bit machine) source
    position representation. There is a 1:1 correspondence between each
    XPos and each regular Pos, translated via a global table.
    
    In some sense this brings back the LineHist, though positions can
    track line and column information; there is a O(1) translation
    between the representations (no binary search), and the translation
    is factored out.
    
    The size increase with the prior change is brought down again and
    the compiler speed is in line with the master repo (measured on
    the same "quiet" machine as for prior change):
    
    name       old time/op     new time/op     delta
    Template       256ms ± 1%      262ms ± 2%    ~             (p=0.063 n=5+4)
    Unicode        132ms ± 1%      135ms ± 2%    ~             (p=0.063 n=5+4)
    GoTypes        891ms ± 1%      871ms ± 1%  -2.28%          (p=0.016 n=5+4)
    Compiler       3.84s ± 2%      3.89s ± 2%    ~             (p=0.413 n=5+4)
    MakeBash       47.1s ± 1%      46.2s ± 2%    ~             (p=0.095 n=5+5)
    
    name       old user-ns/op  new user-ns/op  delta
    Template        309M ± 1%       314M ± 2%    ~             (p=0.111 n=5+4)
    Unicode         165M ± 1%       172M ± 9%    ~             (p=0.151 n=5+5)
    GoTypes        1.14G ± 2%      1.12G ± 1%    ~             (p=0.063 n=5+4)
    Compiler       5.00G ± 1%      4.96G ± 1%    ~             (p=0.286 n=5+4)
    
    Change-Id: Icc570cc60ab014d8d9af6976f1f961ab8828cc47
    Reviewed-on: https://go-review.googlesource.com/34506
    Run-TryBot: Robert Griesemer <gri@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    Reviewed-by: 's avatarAustin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    472c792e
block.go 5.46 KB