「單調是好事」,Go語言開發負責人承諾未來的兼容性

2023-08-24     InfoQ

原標題:「單調是好事」,Go語言開發負責人承諾未來的兼容性

作者丨 Tim Anderson

譯者丨明知山

策劃丨Tina

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/

AIGC 是來顛覆還是加入低代碼的?

首次公開收購!OpenAI 選擇這家成立2年的8人團隊做什麼?

用 Rust 編寫核心組件!獨家揭露阿里雲開源 GraphScope 如何成為全球最快圖計算引擎

中國46歲程式設計師拒寫賭博程序遭拔14顆牙;小紅書被疑「偷」原畫師作品喂自家大模型;全面停止服務,俄遇「微軟危機」|Q資訊

文章來源: https://twgreatdaily.com/zh-my/84efa11fce1cda96a05342891a4da5ed.html