写点什么

“单调是好事”,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:544753

评论

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

2021 OceanBase 年度报告 | 用技术让海量数据的管理和使用更简单!

OceanBase 数据库

开源 年度报告 oceanbase 成绩单

深入理解百度在离线混部技术

百度Geek说

云计算 云原生 后端

当技术重构遇上DDD,如何实现业务、技术双赢?

百度Geek说

架构 后端 DDD 技术债

技术干货 | ToB 业务场景下自动化测试的实践及探索

网易云信

运维 自动化

Linux之|etc|group文件

入门小站

Linux

Mysql的逻辑架构与存储引擎

编程江湖

MySQL

存储空间降为MySQL的十分之一,TDengine在货拉拉数据库监控场景的应用

TDengine

数据库 大数据 tdengine 物联网

InfoQ写作平台|Python板块试运行

IT蜗壳-Tango

InfoQ-Python板块

在线HTTP/HTTPS协议GET,POST,RESTful接口测试

入门小站

工具

JavaScript 浅拷贝与深拷贝

编程江湖

什么是生产管理?制造企业想要做好生产管理应该怎么做?

优秀

企业生产管理

面向对象

你?

[架构实战营] 模块九作业

张祥

架构实战营

Flutter:GridPaper 示例

坚果

flutter 1月月更

Spring Boot 实现通用 Auth 认证的 4 种方式

李尚智

Java springboot spring 5 1月月更

企业堡垒机搭建核心需求是什么?可以自己研发搭建吗?

行云管家

网络安全 信息安全 数据安全 IT资产

开源服务社会:EMQ 映云科技获评“优秀中国开源原生创企”

EMQ映云科技

物联网 开源项目 mqtt

某厂审批流引擎核心技术揭秘

空空

时空大数据 AI 研究院在京成立,助推时空产业高质量发展

百度大脑

人工智能

Hoo研究院调研报告 |从公链Terra生态看区块链稳定币的三大核心产品

区块链前沿News

Hoo 虎符交易所 虎符研究院

一个cpp协程库的前世今生(十六)读写锁

SkyFire

c++ cocpp

恒源云(GPUSHARE)_云GPU服务器如何使用iKataGo?

恒源云

运维 镜像 算力

建立堡垒机的原则有哪些?需要注意哪些方面?

行云管家

网络安全 数据安全 信息泄露 资产安全

Cloudera的企业数据云

郭华

云计算 大数据 数据仓库 云原生

大数据开发之SparkSQL面试篇

@零度

大数据 spark SQL

前端开发之JS数组去重方法

@零度

JavaScript 前端开发

FabEdge V0.4 新特性:支持多集群通讯

BoCloud博云

云原生 边缘计算 网络 开源社区

Linux云计算好学吗?Linux云计算运维学习资料 Linux基本操作命令

学神来啦

浅析SaaS软件和传统软件交付模式的区别

郑州埃文科技

IOS技术分享| anyRTC 互动白板场景实现

anyRTC开发者

ios 音视频 在线教育 视频会议 互动白板

一步一步理解Generator函数的原理

恒生LIGHT云社区

JavaScript 前端 Generator

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