设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 大数据 > 正文

Go 1.18 如何达成泛型?

发布时间:2022-03-03 15:07 所属栏目:125 来源:互联网
导读:Go 在 1.18 版本中初步支持了泛型(也称作类型参数)。泛型是 Go 1 发布以来 Go 语言最重要的变化,同时也是有史以来最大的单一语言特性变化。 近日开发团队介绍了他们如何通过字典 (dictionaries)和GC Shape Stenciling在 Go 1.18 中实现泛型。 泛型的编译
     Go 在 1.18 版本中初步支持了泛型(也称作类型参数)。泛型是 Go 1 发布以来 Go 语言最重要的变化,同时也是有史以来最大的单一语言特性变化。
 
      近日开发团队介绍了他们如何通过字典 (dictionaries)和GC Shape Stenciling在 Go 1.18 中实现泛型。
  
      泛型的编译器实现(在类型检查之后)主要侧重于创建泛型函数和方法的实例,这些实例将与具有具体类型的参数一起执行。为了避免针对泛型函数/方法的每一次调用创建不同的函数实例,并带有不同类型的参数(这种是纯粹的 stenciling 方案)。因此 Go 泛型在每次调用泛型函数/方法时都会传递一个字典。该字典提供了关于类型参数的相关信息,允许单个函数实例对许多不同的类型参数正确运行。
 
      但是,为了泛型的简洁(和性能),团队没有针对所有可能的类型参数进行单一的通用函数/方法编译。相反,他们在具有相同 gcshape 的类型参数集之间共享通用函数/方法的实例化。
 
gcshape (or gcshape grouping) 是类型的集合,当被指定为类型参数之一时,这些类型可以在泛型的实现中共享通用函数/方法的相同实例。
 
例如,在具有单一类型参数的泛型函数的场景中,只需要为同一 gcshape grouping 中的所有类型参数提供一个函数实例。同样的,对于具有单一类型参数的泛型类型的方法,只需要对同一 gcshape grouping 中的所有类型参数(泛型类型)进行一次实例化。gcshape 类型是团队实现泛型过程中使用的特定类型,他们使用这样的实例化来填充 gcshape grouping 中的所有类型。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读