自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 負責人說以后不會有 Go2 了

開發(fā) 前端
整體上 rsc 對破壞 Go1 兼容性做了很長時間規(guī)劃的回溯和規(guī)劃,釋出了一大堆手段,例如:GODEBUG、go.mod 版本約束等。

大家好,我是煎魚。

最近 Go 核心團隊負責人 @Russ Cox(下稱:rsc)專門寫了一篇文章《Backward Compatibility, Go 1.21, and Go 2[1]》為 Go 這門編程語言的 Go1 兼容性增強和 Go2 的情況說明做詮釋和宣傳。

今天希望能夠幫助你獲悉 Go 未來的規(guī)劃、方向以及 rsc 的思考。

Go1 破壞兼容性的往事

新增結構體字段

第一個案例,比較經典。在 Go1 的時候,這段代碼是可以正常運行的。如下演示代碼:

package main

import "net"

var myAddr = &net.TCPAddr{
    net.IPv4(18, 26, 4, 9),
    80,
}

但在 Go1.1,這段代碼就跑不起來。必須要改成如下代碼:

var myAddr = &net.TCPAddr{
    IP:   net.IPv4(18, 26, 4, 9),
    Port: 80,
}

因為在當時的新版本中,對 net.TCPAddr 新增了 Zone 字段。原先的未聲明值對應字段的方式就會出現一些問題。

后續(xù)在新版本的規(guī)范中,官方直接對標準庫提交的代碼增加了要求,賦值時必須聲明字段名。以此避免該問題的產生。

改進排序/壓縮的算法實現

第二個案例,Go1.6 時,官方修改了 Sort 的排序實現,使得運行速度提高了 10% 左右。以下是演示代碼,將根據名稱長度對顏色列表進行排序并輸出結果:

colors := strings.Fields(
    `black white red orange yellow green blue indigo violet`)
sort.Sort(ByLen(colors))
fmt.Println(colors)

一切聽起來是那么的美好。

真實世界是改變排序算法通常會改變相等元素的排序方式。導致了 Go1.5 和 Go1.6 所輸出的結果不一致:

Go 1.5:  [red blue green white black yellow orange indigo violet]
Go 1.6:  [red blue white green black orange yellow indigo violet]

按照順序排序后,結果集的差異點在于:

  • Go1.5 返回 green, white, black。
  • Go1.6 返回 white, green, black。

如果說程序依賴了結果集的輸出順序,這將是一個影響不小的兼容性破壞。

第三個案例,類似的還有在 Go1.8 中,官方改進了 compress/flate 的算法,達到了在 CPU 和 Memory 沒有什么明顯變化下,壓縮后的結果集更小了。聽起來是個很好的成果。

但實際上自己內部卻翻車了,因為 Google 內部有一個需要可重現歸檔構建的項目,依賴了原有的算法。最后自己 fork 了一份來解決。

Go1.21 起增強兼容性(GODEBUG)

從上面的部分破壞兼容性示例來看,可以知道 Go 官方也不是刻意破壞的。但又存在必然要修改的各種原因和考量。

為此在 Go1.21 起,正式輸出了 GODEBUG 的機制,相當于是開了個官方 “后門” 了。將其作為破壞性變更后的門把手。

允許設置 GODEBUG,來開關新功能特性。例如以下選項:

  • GODEBUG=asyncpreemptoff=1:禁用基于信號的 Goroutine 搶占,這偶爾會發(fā)現操作系統(tǒng)的錯誤。
  • GODEBUG=cgocheck=0:禁用運行時的 CGO 指針檢查。
  • GODEBUG=cpu.<extension>=off:在運行時禁止使用某個特定的 CPU 擴展。

也會根據根據 go.mod 中的 Go 版本號來設置對應 GODEBUG,以提供版本所約定的 Go1 兼容性保障策略。

如果對這塊感興趣,可以查看《加大力度!Go 將會增強 Go1 向后兼容性》,有完整的增強兼容性的規(guī)范說明。

Go2 的情況和規(guī)劃

Go 官方(via @rsc)正式回答了之前畫的餅,也就是什么時候可以看到 Go2 的規(guī)范推出,打破 Go1 程序?

答案是永遠不會。從與過去決裂、不再編譯舊程序的意義上來說,Go 2 永遠不會出現。從 Go 在 2017 年開始對 Go 1 進行重大修訂的意義上來說,Go 2 已經發(fā)生了。

簡而言之,透露出來的意思是:硬要說的話,Go2 已經套殼 Go1 上市了。

在未來規(guī)劃上,不會出現破壞 Go1 程序的 Go2。工作方向會往將加倍努力保證兼容性的基礎上,開展新工作。

總結

整體上 rsc 對破壞 Go1 兼容性做了很長時間規(guī)劃的回溯和規(guī)劃,釋出了一大堆手段,例如:GODEBUG、go.mod 版本約束等。

從而引導了 Go2 直接可以借殼上的方向,也更好兌現了 Go1 兼容性保障的規(guī)范承諾。單從這方面來講,還是非常的深思熟慮的。

也可能會有同學說,看 Go 現在這樣,說不定下次就變了。這可能比較難,其實 rsc 才上任做團隊負責人沒幾年,工作履歷上和其他幾位骨干大佬在 Google 已經有非常長年的在職經驗了。

圖片圖片

我目測一時半會是不會變的了。

想變,得等 Go 核心團隊這一班子換了才有可能了。阻力也會很多,因為社區(qū)人多,一般會比較注重規(guī)范。

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2023-01-27 23:14:26

Go2兼容性Go1

2022-07-25 19:48:47

Go

2024-08-26 08:55:19

2014-05-21 16:04:38

面試面試規(guī)則

2020-12-10 10:20:32

CentOS 8RHELLinux

2022-07-19 14:23:47

谷歌GO

2013-04-23 11:32:32

Internet2大數據SDN

2013-04-19 09:17:28

Internet2大數據SDN

2009-04-17 15:24:20

人生撤銷耍賴

2012-12-13 11:12:24

戴爾

2013-08-22 10:37:59

2011-08-23 17:02:37

FedoraLinux 20周年

2022-09-05 08:55:15

Go2提案語法

2015-11-16 10:16:56

技術蛻變創(chuàng)業(yè)

2009-07-16 08:19:46

魔獸網易

2014-06-27 14:49:41

SDN

2017-03-13 15:30:22

慕尼黑WindowsLiMux

2023-09-11 11:14:54

IT團隊CIO

2009-09-15 10:45:52

Linux驅動Linux微軟

2016-01-15 10:47:08

技術團隊能力
點贊
收藏

51CTO技術棧公眾號