热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[译]Go语言增加泛型的提案

[译]Go语言增加泛型的提案,Go语言社区,Golang程序员人脉社


原文地址:https://blog.golang.org/generics-proposal


原文作者:Ian Lance Taylor


本文https://github.com/gocn/translator/blob/master/2021/w3_a_proposal_for_adding_generics_to_go.md


译者:cvley


校对:guzzsek



泛型提案




我们提出一个Go语言变更提案,用于让类型系统和函数支持类型参数,类型参数使通用编程模式成为可能。



为什么支持泛型?




泛型可以提供强大的构建代码块,让代码共享和程序构建更加简便。泛型编程意味着可以先实现功能和定义数据结构,而准确的类型可以留到后面指定。比如,一个操作某些任意数据类型切片的函数,当函数被调用时才会指定实际的数据类型。或者,一个存储任意类型的数据结构,当创建这个数据结构实例时,才会指定实际存储的类型。


自从Go在2009年首次发布后,泛型的支持一直都是最常见的语言特性需求之一。在之前的博文中,你可以了解更多泛型有用的原因。


尽管泛型有明确的使用场景,但将它融入到像Go一样的语言中是非常困难的。在Go中首次(有缺陷的)添加泛型的尝试可以追溯到2010年。在过去的十年中也有多次其他的尝试。


在过去的几年中,我们在设计草案上的一系列工作,最终形成了一个基于类型参数的设计方案。这份设计草案从Go编程社区博采众长,很多朋友在之前博文中提到的泛型游乐场中进行了体验。Ian Lance Taylor 在GopherCon 2019上的演讲中介绍了添加泛型的原因和我们现在遵循的策略。Robert Griesemer在之后GopherCon 2020的演讲中分享了设计上的变更和实现细节。语言的变更是完全后向兼容的,因此现有的Go程序将继续如现在一般正常运行。我们认为设计草案已经足够好也足够简单,是时候提议将它加入到Go中了。



现在的进度是什么?


语言变更提案流程是我们对Go语言进行变更的方法。现在我们已经开始了将泛型添加到Go的未来一个版本的流程。我们欢迎实质性的批评和建议,但请避免重复之前的评论,也请避免简单的加一和减一的评论。相反,你可以在赞同或反对的评论或者整个提案下添加thumbs-up/thumbs-down emoji表情。


和所有的语言变更提案一样,我们的目标是对加入泛型或终止这个提案达成共识。我们明白,这个量级的变更肯定无法让Go社区的每个人都满意,但我们期望可以达成所有人都能接受的决定。


如果通过了这个提案,那么在今年底或者作为Go 1.18 beta版本的一部分,我们将提供一个完备但可能并未完全优化的泛型实现供大家尝鲜。






推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 0引言在点云的配准算法中,完成初始同名点对的求解之后,即可得出一个粗配准矩阵。当配准的精度较高时,采用 1ICP泡泡点云讲解 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
书友49457861
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有