go cmd/compile/internal/types: lazy/incremental type expansion

0yg35tkg  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(44)

编译器现在支持用于包导出数据的索引数据格式,从而能够高效地随机访问包数据。我们已经使用这种方法来实现声明的延迟扩展和内联体,但我们仍然在引用类型时完全展开它们。我预计在大型项目中,许多深层次的细节永远不需要,我们可以避免将这些数据读入内存。
我认为主要步骤是:

  1. 将剩余的 Type 字段隐藏在 setter/getter 方法后面。
  2. 创建一个新的 TSTUB 类型,并提供一种注册扩展函数的方法,该函数将 Type 重写为实际的 Go 类型。
  3. 添加一个 Type.expand 方法,用于检查 Etype==TSTUB 并调用扩展函数。
  4. 在每个(?)公共 Type 方法的顶部插入对 expand() 的调用。
  5. 更新 iimport.go 以创建 TSTUB 类型而不是普通类型。
    另一个有用(但非关键)的步骤是审查 Type API,并尝试修剪/简化不必要的方法。这将减少我们需要用 expand 调用进行监控的地方数量。
wsxa1bj1

wsxa1bj11#

乐观地标记为1.11,但冻结还有一周的时间,所以这可能会滑落。

uqjltbpv

uqjltbpv2#

https://golang.org/cl/109138提到了这个问题:cmd/compile/internal/types: replace Type.Val with Type.Elem

bttbmeg0

bttbmeg03#

1.11版本不会发生这种情况。

bakd9h0s

bakd9h0s4#

对于1.12版本,这种情况也不会发生。

相关问题