0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

蛰伏5年,Go 2.0终于要来了!

DPVg_AI_era 来源:lq 2018-12-03 09:46 次阅读

今年八月,Go团队发布Go 2.0的设计草案,征集意见。今天,提案收集完毕,团队负责人Robert Griesemer发布公开信,表示进入最重要阶段——确定更改提案阶段,并公布了提案评估流程。

蛰伏5年,Go 2.0终于要来了!

早在今年8月份,Go团队便提出了2.0版本的设计草案,包括两大主题:错误处理和泛型。而今天,团队开发人员发话了:“是时候采取行动了!”

Go 1和Go 2主要的区别在于决策的制定——Go 1的诞生是一个小团队的努力,而Go 2将更受其社区的影响。

目前在Go 2的提案中,大约有120个未解决的问题被标记为Go 2的提案,每一个问题都与重要的库或语言更改相关,而这些问题通常不能满足当前Go 1的兼容性。开发人员将这些提案分类为Go2Cleanup、NeedsDecision等,以便后续的执行操作。

在Go语言的生态中,拥有数以万计的程序员和代码,因此,所有的决策和改变必须谨慎,以免对稳定的生态造成破裂。因此,Go团队认为,需要实施新的提案评估流程。

提案评估流程

提案评估流程的目的是收集对少数选定提案的反馈意见,以便作出最终决定。该过程或多或少与发布周期并行进行,包括以下步骤:

1、提案选择。Go团队选择了少量似乎值得考虑接受、但有做出最终决定的Go 2提案。

2、提案反馈。 Go团队发出一份罗列选中提案的公告。 该公告向社群解释了推进所选提案的初步意图,并收集了每个提案的反馈意见。 这使社区可以有机会提出建议、表达想法。

3、实施。 根据这些反馈,提案得以实施。 这些重要的语言和库更改的目标是在即将到来的发布周期的第一天提交它们。

4、实施反馈。 在开发周期中,Go团队和社区有机会尝试新功能并收集进一步的反馈。

5、启动决策。在三个月的开发周期结束时,根据在发布周期中收集的经验和反馈,Go团队最终会决定是否发布每个更改。一旦发布,这些被发布的提案就成为语言和库的一部分。未被发布的提案可能会重新起草,也可能会被永久拒绝。

通过两轮的反馈过程,可以起到一个筛选的作用,防止“功能蔓延”,有助于保持语言的简洁性。

提案选择标准

一项提案至少满足以下条件:

1、解决大多数用户都觉得重要的问题;

2、不会对其他用户产生造成太大的影响;

3、提供一个清晰易懂的方案。

条件1确保了团队所做的任何更改都能帮助尽可能多的Go开发人员(使他们的代码更鲁棒,更容易编写等等)。条件2确保了团队的更改对少部分用户所带来的不便降到最低。

若是不满足条件3,提案将不会被实施。即便提案能够解决一个通用性的问题,思路很好,在没有实施方案的情况下,也会被拒绝,该提案需要重新起草。

提案

团队认为此次推出的更新很好,应该能够高效地为用户服务,但更重要的是,这只是一个起点。在使用过程中,仍发现有时无法正常工作情况,团队将根据需要进行进一步优化。但关键是,在实际使用之前,并不知道如何改进。

一种保险的做法是使用少量向后兼容的语言。团队已经有很长一段时间没有进行语言上的修改。此外,做出这些变化无需担心破坏现有代码,因此可以作为一种完美的试验方式。

尽管如此,团队为Go 1.13版本下(此为提案评估过程中的第1步)选择Go 2用户提出以下意见:

1.#20706 基于Unicode TR31的通用Unicode标识符:解决了使用非西文字母表的Go程序员的一个重要问题,并且对其他人都应该没什么影响。我们需要解决归一化问题,社区中反馈意见也很重要,但在此之后,实施路径获得了充分理解。请注意,标识符导出规则不会受到此变动的影响。

2.#19308,#28493二进制整形文字和对数字文字的支持:这些变化相对较小,在许多程序员中似乎非常受欢迎。这些问题可能还没有达到“重要问题”的程度(到目前为止,16进制数字运行良好)但是这一改动使得Go与大多数其他编程语言实现统一,并且解决了一些程序员的痛点。如果你并不在意Go对二进制整型文字或数字格式的支持,那这一点对你影响很小,且程序实现也很容易理解。

3.#19113允许将有符号整数作为移位计数:我们估计,所有非常数移位中有38%需要(人工)进行uint转换。这个提议将让不少代码变得更简洁,使得表达式可以更好地与索引表达式和内建函数cap和len同步。这一改动将主要对代码产生积极影响。其实现也很好理解。

下一步

现在是Go社区提供有关上述问题反馈的时候了。

对于团队已经明确并批准的每个反馈建议,我们将继续推进实施(即进入流程中的第3步)。因为希望在下一个发布周期的第一天(暂定于2019年2月1日)实施这些修订,所以这次可能会在稍早的时间开始推进,以留出两个月的意见反馈时间(自2018年12月至2019年1月)。

在为期3个月的开发周期(2019年2月至5月)中,被选中的功能已经陆续部署,每个人都有机会收集新功能的使用体验。这会为建议反馈提供另一个机会(评估流程中的第4步)。

最后,在很短的冻结期之后(2019年5月1日),Go开发团队会做出最终决定,是永久保留新功能(并保证这些功能与Go 1的兼容性),还是放弃这些功能(评估流程的最后一步)。

(因为在冻结期内很可能需要删除某个功能,所以新的实现必须做到禁用新功能后,也不会破坏系统其他部分的稳定性。对于语言的更改而言,这可能意味着所有与功能相关的代码都以“内部标记”加以保护。)

这将是Go团队第一次实施这一流程,因此冻结期也将是反思这一流程,并在必要时进行调整的好时机。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    705

    浏览量

    41248
  • go语言
    +关注

    关注

    1

    文章

    157

    浏览量

    8927

原文标题:等待5年,Go 2.0终于要来了!

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    苹果折叠屏iPhone新专利获批 苹果折叠屏手机要来了吗?

    苹果折叠屏iPhone新专利获批 苹果折叠屏手机要来了吗? 我们看到苹果公司折叠屏iPhone专利已经获批;果粉都在期待的苹果折叠屏手机要来了吗?新专利也显示苹果已经找到了提升折叠屏耐用耐摔性的方法
    的头像 发表于 04-17 17:05 574次阅读

    蛰伏新生 奇创笃行 | 2024阿普奇生态大会暨新品发布会圆满收官!

    2024年4月10日,由阿普奇主办、英特尔(中国)协办的“阿普奇生态大会暨新品发布会”在苏州相城区盛大举办。 大会以“蛰伏新生 奇创笃行”为主题,行业各大知名企业及其代表、行业大咖约200余人
    的头像 发表于 04-14 15:52 302次阅读
    <b class='flag-5'>蛰伏</b>新生 奇创笃行 | 2024阿普奇生态大会暨新品发布会圆满收官!

    展会回顾 |蛰伏新生,首“展”告捷!阿普奇AK系列震撼首发,智能制造未来已来

    新品首发 新生力量,迸发活力 在本次展会上,阿普奇AK系列智能控制器以全新的姿态亮相,象征着“蛰伏新生”的力量。经过长时间的技术积累和研发创新,AK系列终于来了它的首次登场。     这款集创新技术与卓越性能于一身的控制器,不
    的头像 发表于 03-11 08:51 117次阅读
    展会回顾 |<b class='flag-5'>蛰伏</b>新生,首“展”告捷!阿普奇AK系列震撼首发,智能制造未来已来

    SRAM主示例在SDK 1.3.4的USB 2.0模式下不起作用是为什么?

    ™ KIT_A2G_TC387_MOTORCTR 和自定义 TDA5235_915_5_BOARD 也是如此)。 PMODE 设置正常。 要对其进行测试/模拟,只需在此处将 USB 切换到 2.0: apiretStatus
    发表于 02-22 07:40

    CYT2B9根据I/O端口POWER_DRILL2GO源的不同,CAN操作是否有任何差异?

    (CAN0_0_TX)、P8.1 (CAN0_0_RX) 可用。 P2.0/P2.1的 POWER_DRILL2GO 源为VDDD,P8.0/P8.1的 POWER_DRILL2GO 源为VDDIO_1。 问:根据 I/O
    发表于 01-19 08:11

    MiniProg4在POWER_DRILL2GO周期后失去与PC的连接的原因?

    你好我使用 MiniProg4 作为 I2C 桥接器(通过 12 引脚)和 PSoC™ 编程器(通过 5 引脚端口)。 我正在用 Python 开发一个代码,以控制 MiniProg4 和用于
    发表于 01-19 07:55

    Go语言比Python强多少

    1.都说Go语言性能非常强大,那么到底比Python强多少? 为了比较Go语言和Python语言在单线程性能上的差距,我们可以做一个简单实验,从1亿减到1: Python代码(以下均分别提供图片和文
    的头像 发表于 11-02 14:05 280次阅读
    <b class='flag-5'>Go</b>语言比Python强多少

    如何让Python和Go互相调度

    我们曾经研究过如何让Python和Go互相调度,当时发现,将Go语言写的模块打包成动态链接库,就能在Python中进行调度: 优劣互补! Python+Go结合开发的探讨 Go的优势很
    的头像 发表于 11-02 11:24 247次阅读
    如何让Python和<b class='flag-5'>Go</b>互相调度

    Go必知的10个命令!

    如果你想检查一些与 Go 相关的环境变量,这个和开关很有关系,比如 GOROOT 或 GOPATH,直接执行命令 go env,查看这两个环境变量的配置。关于这两个环境变量的设置和说明,可查看这篇文章:理解了 GOPATH 和 GOROOT才能找出问题根源
    的头像 发表于 10-22 10:01 185次阅读

    Go语言中的整数类型

    Go 语言中,整型可以细分成两个种类十个类型。
    发表于 07-20 15:25 336次阅读

    Go语言常量的声明

    Go 语言中, 常量 表示的是固定的值,常量表达式的值在编译期进行计算,常量的值不可以修改。例如:3 、 Let's go 、 3.14 等等。常量中的数据类型只可以是 布尔型 、 数字型 (整数型、浮点型和复数)和 字符串型 。
    发表于 07-20 15:24 275次阅读

    Go语言简介和安装方法

    Go 又称 Golang ,是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计
    发表于 07-19 16:33 418次阅读

    Go 1.21的PGO正式GA,性能提升,更快更猛!

    Go 语言中,最初关于 PGO 的提案是建议向 Go GC 工具链增加对配置文件引导优化 (PGO) 的支持,以便工具链能根据运行时信息执行特定于应用程序和工作负载的优化。
    的头像 发表于 06-28 16:47 757次阅读
    <b class='flag-5'>Go</b> 1.21的PGO正式GA,性能提升,更快更猛!

    如何快速搭建一个现代化的Go开发环境?

    Go 源代码的安装目录,Mac 和 Windows 安装时会自动配置好,Linux 一般在 /usr/local/go 目录。
    的头像 发表于 05-22 16:53 582次阅读

    基于DWC2的USB驱动开发-0x02 DWC2 USB2.0 IP功能特征介绍

    DWC2即新思(Synopsys )的DesignWare® Cores USB 2.0 HiSpeed On-The-Go (OTG)控制器IP,被大量使用。从linux的内核源码驱动中就带DWC2的驱动(新思官方维护),可以看出其使用的非常多。
    的头像 发表于 05-09 10:09 6127次阅读
    基于DWC2的USB驱动开发-0x02 DWC2 USB<b class='flag-5'>2.0</b> IP功能特征介绍