10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

“单调是好事”,Go 语言开发负责人承诺未来的兼容性

  • 2023-09-12
    北京
  • 本文字数:898 字

    阅读完需:约 3 分钟

大小:466.15K时长:02:39
“单调是好事”,Go语言开发负责人承诺未来的兼容性

Go 语言技术负责人、谷歌杰出工程师 Russ Cox 承诺“不会出现与 Go 1 程序不兼容的 Go 2。”


Cox 还介绍了刚刚发布的 Go 1.21 对向前兼容性的改进。


在 Go 语言官网的一篇博文中,Cox 提出了一种观点,即兼容性“远比任何可能的与过去不兼容的东西更有价值”。对兼容性的承诺对 Go 语言来说并不是什么新鲜事:早在 2012 年 Go 1.0 发布时,其文档中就写道:“按照 Go 1 规范编写的程序在该规范的整个生命周期内都可以正确编译和运行,不会发生任何改变。”当然,这个承诺是针对源代码而不是二进制文件的兼容性。


文档中所指的是未来可能出现基于新规范的 Go 2,兼容性可能不太高,但 Cox 现在表示“不会出现与 Go 1 程序不兼容的 Go 2。”


尽管有这些承诺,但兼容性并不是绝对的,Cox 解释了几种新版本可能会破坏已有代码的情况。修复错误行为就是其中的一个例子。另一个则是时间的精度问题。现在函数变多了,那么第三种情况就是随着排序优化的实现,相等结果的排序发生了变化。第四种情况是默认协议发生变化,例如从 HTTP/1.1 变到 HTTP/2。这些情况意味着对 Go 语言的修改仍然会破坏已有的代码。Go 语言开发团队通过在谷歌内部运行 Go 代码测试来缓解这一问题。Cox 还提到了 Kubernetes 团队使用 ParseIP 函数的分叉版本,其中使用了更为严格的解析器,否则保存的配置可能会损坏。


Go 1.21 中的一些新特性进一步提高了兼容性,比如工具链管理,go 命令(自动下载、构建、安装和测试 Go 语言包)不会试图构建更新版本的代码,相反,它会自动下载更新的版本,但不会覆盖已安装的版本。


还有对 GODEBUG 的扩展使用,一个键值对,可以设置为环境变量。一般来说,如果变更确实破坏了兼容性,“我们将定义一个新的 GODEBUG 设置,允许个体程序不包含新的行为”。


Go 的兼容性真的像声称的那么好吗?一位开发者在 Hacker News 上表示:“我在大部分 Go 语言升级过程中都遇到过严重的故障。我在 Rust 升级和 gcc 升级时遇到的问题要少得多。”一些人也遇到了 Cox 所描述的一些问题。不过总体的反应是积极的。另外也有人说:“我两年前开始在工作中使用 Go,我很喜欢它,尤其是它的向后兼容性。”


原文链接:https://devclass.com/2023/08/16/boring-is-good-says-go-tech-lead-promising-future-compatibility/

2023-09-12 18:544640

评论

发布
暂无评论
发现更多内容

架构实战营模块二作业:微信朋友圈高性能复杂度

融冰

【Go实现】实践GoF的23种设计模式:抽象工厂模式

元闰子

Go 设计模式 抽象工厂模式

在操作系统这条赛道上,为什么Laxcus和Windows、MacOS不一样

LAXCUS分布式操作系统

大数据 容器 虚拟化 并行计算 分布式操作系统

FacadePattern-门面模式

梁歪歪 ♚

设计模式

分析朋友圈的高性能复杂度

小马

#架构实战营

密码学系列之:PEM和PKCS7,PKCS8,PKCS12

程序那些事

密码学 程序那些事 5月月更

微信朋友圈高性能复杂度分析

Justin1024

SpringCloud Alibaba Sentinel 限流详解

牧小农

sentinel springcloudAlibaba

软件构建

GalaxyCreater

架构 敏捷 软件设计

架构实战营模块 2 作业

Naoki

架构实战营

ProxyPattern-代理模式

梁歪歪 ♚

设计模式

一文读懂AQUANEE的开创性特点与未来

小哈区块

electron打包vue cli项目的配置问题

空城机

Electron 5月月更

BuilderPattern-建造者模式

梁歪歪 ♚

设计模式

# 继续前行github star突破8k即时通讯IM开源项目OpenIM版本发布计划

Geek_1ef48b

海洋元宇宙AQUANEE最新进展一览

股市老人

[Day48]-[递归]-基本计算器 II

方勇(gopher)

递归 LeetCode

Flutter 利用 StreamProvider 一起玩 WebSocket

岛上码农

flutter ios 前端 安卓开发 5月月更

一个程序员眼中的元宇宙

总师

程序员 元宇宙

AdapterPattern-适配器模式

梁歪歪 ♚

设计模式

DecoratorPattern-装饰者模式

梁歪歪 ♚

设计模式

架构实战营 - 模块 2 作业

Gavin.Yang

【LeetCode】判断一个数的数字计数是否等于数位的值Java题解

Albert

LeetCode 5月月更

Apipost——中文版的Postman?

Xd

API 接口测试工具

leetcode 540. Single Element in a Sorted Array 有序数组中的单一元素

okokabcd

LeetCode 查找

6点下班不是梦,Apipost帮您轻松完成接口测试及接口文档

Xd

接口测试 apipost

[Day47]-[递归]-基本计算器

方勇(gopher)

递归 LeetCode

从发电到深空探索:微藻带来的可持续未来

脑极体

如何提高技术部的信任值

石云升

项目管理 职场经验 5月月更 跨部门沟通

SDN系统方法 | 1. 概述

俞凡

架构 网络 sdn SDN系统方法

一文读懂AQUANEE的开创性特点与未来

西柚子

“单调是好事”,Go语言开发负责人承诺未来的兼容性_编程语言_Tim Anderson_InfoQ精选文章