写点什么

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

评论

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

[Pulsar] Broker 消息分发

Zike Yang

Apache Pulsar 12月日更

使用ABAP编程实现对微软Office Word文档的操作

汪子熙

数据库 死锁 28天写作 abap 12月日更

使用JDK自带的jmap和jhat监控处于运行状态的Java进程

汪子熙

Java jdk jmap 28天写作 12月日更

架构实战营-毕业设计

娜酱

秒杀系统架构设计

guangbao

电商秒杀系统设计

potti

Android C++系列:Linux线程(一)概念

轻口味

c++ android 28天写作 12月日更

为什么愿意奉献?(4/28)

赵新龙

28天写作

日常开发的一点实践记录(合集)

为自己带盐

内容合集 签约计划第二季

架构实战营 - 毕业设计

Alex.Wu

架构训练营|大作业

Frode

「架构实战营」

在主流的linux发行版里安装redis

为自己带盐

redis 28天写作 签约计划第二季 12月日更

git出现ssh: connect to host github.com port 22: Connection refused

ilinux

给弟弟的信第3封|你幸福吗?

大菠萝

28天写作

毕业总结

potti

架构实战营毕业总结

娜酱

【Redis权威指南】「特性分析」Sentinel的特性分析典籍指南(1)

洛神灬殇

redis哨兵模式 redis哨兵 redis sentinel Redis 核心技术与实战 12月日更

手把手带你玩转 Spring

4ye

Java spring 程序员 内容合集 签约计划第二季

《我和我的家乡》观后感

圣迪

amazing

Nydia

Android简介【Android专题1】

坚果

android 28天写作 12月日更

3.《重学JAVA》—Hello World

杨鹏Geek

Java 25 周年 28天写作 12月日更

前端开发: Vue封装复用思想的运用(其一)

三掌柜

28天写作 12月日更

第1周作业提交

cqyanbo

Go error 的四种处理方式

Rayjun

Go Error

4.《重学 JAVA》—基础语法

杨鹏Geek

Java 25 周年 28天写作 12月日更

Flutter 浅尝 Flare / Lottie / SVGA 多种动画模式

阿策小和尚

28天写作 内容合集 签约计划第二季 12月日更

【架构实战营】毕业总结与设计

聆息

架构实战训练营|毕业总结

Frode

「架构实战营」

工厂模式

李子捌

28天写作 12月日更

《网易公开课》也能被拿来练习python爬虫?离谱~

梦想橡皮擦

12月日更

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