2021年10月我关注的提交
这是一个从golang/go的主分支提交中,我个人感兴趣的事项列表。
以下是上次创建的清单。
虽然我在简要解释中添加了一些内容,但可能存在误解或错误。
主题 (zhǔ tí)
-
- ジェネリクスで使用するタイプパラメータに interface{} を省略してそのままタイプセットを書けるようになりました。
-
- 文字列を 2 つに分割する strings.Cut が追加されました。
-
- ビルドしたバイナリにバージョン管理情報やビルド時の指定が埋め込まれるようになりました。
-
- パフォーマンスを理由として wasm で使用される syscall/js から js.Wrapper が削除されました。
-
- Go に workspace サポートが追加されました。
- sync.Mutex にロックされている場合はブロックせずに戻ってくる TryLock メソッドが追加されました。
提交
2021年10月1日
通过省略使用泛型的类型参数中的 interface{} 来直接编写类型设置,这个变更使得代码更易理解,优于使用 constraints 包。
2021年10月2日
当发生诸如超时等问题导致名称解析失败时,将始终返回 net.DNSError,以便更容易调查错误的原因。
以下是中文的翻译版本:上下文值的提取由递归调用更改为循环。由于上下文容易嵌套,并且在短寿命的goroutine中,使用递归调用来更改堆栈大小似乎是具有相当大的成本。
2021年10月5日
据看起来,通过重新排列符号信息的布置,可以减少加载时间并降低链接时的内存消耗。
貌似Go协程在减少函数调用的开销方面进行了改进。
老实说,我并不太理解。
2021年10月6日
优化了与小尺寸常数的比较。4
当使用编码/二进制的字节序函数时,内联化变得更容易了。5
在处理ASCII字符时,使用字节或字符串进行截取的性能得到了显著改善。在8月的改进中,仅限于一个字符的情况已得到改善,现在也针对多个字符进行了改进。
新增了一个方法 Valid,用于检查 http.Cookie 的值是否有效。
通过添加和替换 strings.Cut 函数,文字列被分割为两部分。这似乎是在调查标准库的使用情况后,作为更易理解的函数来实现的。
在下面的文章中,提到了对 strings.SplitN 进行比较。
尽管补充的目的并不是为了提高效率,但结果似乎也改善了效率。
2021年10月7日
fastrand()函数用于获取小于指定值的随机整数,现在已经被更快的fastrandn()函数代替,两者都是在运行时定义的函数。fastrand()函数本身在部分CPU中已经从xorshift64+更改为wyrand。10 11
這是修復在32位環境中從uint64轉換為float32時產生捨入誤差的問題。這個提交似乎不足夠,進行了附加的修正。
当给出较大的参数时,wasm_exec.js存在一个容易被利用来修改wasm模块部分的安全漏洞。此修复已经被后续版本Go 1.17.2和Go 1.16.9进行了回溯。
2021年 10月8日
time.ParseDuration() 函数已修复了无法解析 int64 最小值的问题。虽然我认为很少有设置最小值的机会,但这个修复提升了性能,这很有趣。
2021年10月9日
在WaitGroup的Example Test中,包含的URL已经被修改为example.com。建议认真考虑写入文档的URL。
这似乎是与编码/二进制有关的优化。
将在amd64和arm64上使用2次swap指令复制8字节的数据替换为一个move指令。
2021年10月11日
正規表現中出现了作为 UTF-8 无效字符的行为已被修正。虽然之前似乎没有一致性,但现在已经统一认为与 U+FFFD 相同。
正确的情况本应不匹配 U+FFFD,但为了避免破坏现有的操作,只能达成妥协。
2021年10月12日 èr yī shí yuè shí èr rì)
为解决来自图片/gif生成的GIF图像兼容性问题,引入了压缩/ LZW进行修正。20 21
这是一个将 amd64 平台上的 ANDQ 语句替换为 ANDL 的修复程序,只有当常量可以适应 32 位时才进行替换。
据称,这将使 Linux x86_64 二进制文件减小 0.03%。
性能也会受到影响,但好的和坏的影响似乎混合在一起。
2021年10月14日
这是为了将版本控制信息和构建时的指定嵌入到构建的二进制文件中所做的修正。以前我们是使用ldflag等方法将git的提交哈希等信息嵌入进去,但现在可以从运行时获取这些信息。另外,添加了debug/buildinfo包,可以从执行文件的二进制中获取嵌入的信息。
看起来还将进行进一步的修正,最终似乎将支持 Git、Mercurial、Fossil 和 Bazaar。
当使用https服务器时,如果设置了ReadHeaderTimeout但没有设置ReadTimeout,则已修复TLS握手不会超时的问题。 23
2021年10月18日
似乎现在可以将包含有switch语句的函数也进行内联化了,共24个选项。
由于性能原因,wasm 中的 syscall/js 不再使用 js.Wrapper。 这是一个不兼容的更改,但是 syscall/js 被视为实验性的包,不需要保证兼容性。
2021年10月19日
通过省略在64位架构下使用WaitGroup进行的对齐检查,以提高性能。
这是有关文档的修改。
errors.Is会一直进行unwrap,直到找到匹配的错误,所以用户不应该调用errors.Unwrap,而应该实现Is方法。
这是为了添加对 workspace 的支持的更改。设置似乎需要写在一个名为 go.work 的文件中。
2021年10月25日
当 mask 是 image.Alpha 时,改进了 DrawMask 的性能。
2021年10月26日
现在构建的二进制文件中也包含了VCS的提交时间。
2021年10月27日
由于在泛型中,可以省略使用interface{}作为类型参数,直接编写类型集,因此constraints包中的Slice/Map/Chan被删除。
2021年10月28日
似乎现在可以将包含 “range” 的函数进行内联化。
2021年10月29日
如果sync.Mutex被锁定,TryLock方法将不会阻塞并立即返回。但是,通常情况下,不建议使用TryLock。
看起来在Windows环境下已经可以生成崩溃转储文件了。
这是为了重新设计决定何时执行GC的算法(GC Pacemaker)的修正的一部分。 32
个人看法。
由于Go 1.18是一个重要版本,所以在泛型相关的修复上有很多变动,但也进行了许多其他改进。
此外,虽然没有列在列表中,但是由于GOAMD64的指定,也有一些性能改进。
由于执行环境可能比构建环境更旧,所以自动配置可能会让人感到担忧,但是如果使用得当,就可以享受到新CPU的好处。
请查看以下链接:
1. https://github.com/golang/go/issues/48424
2. https://github.com/golang/go/issues/39178
3. https://github.com/golang/go/issues/47292
4. https://github.com/golang/go/issues/37275
5. https://github.com/golang/go/issues/42958
6. https://github.com/golang/go/issues/46446
7. https://github.com/golang/go/commit/5baf60d47245c792c50a349cd6b8586d23204895
8. https://github.com/golang/go/issues/46370
9. https://github.com/golang/go/issues/46336
10. https://github.com/golang/go/commit/483533df9e35eea46747c5545307b230eca997b6
11. https://github.com/wangyi-fudan/wyhash
12. https://github.com/golang/go/issues/48807
13. https://github.com/golang/go/commit/16a3cefc93d9b896b2053320e387d0e449904aba
14. https://github.com/golang/go/issues/48797
15. https://github.com/golang/go/issues/48629
16. https://github.com/golang/go/issues/48886
17. https://ja.wikipedia.org/wiki/Example.com
18. https://github.com/golang/go/issues/41684
19. https://github.com/golang/go/issues/48749
20. https://github.com/golang/go/issues/26108
21. https://github.com/golang/go/issues/33748
22. https://github.com/golang/go/issues/37475
23. https://github.com/golang/go/issues/48120
24. https://github.com/golang/go/issues/14768
25. https://github.com/golang/go/issues/44006
26. https://github.com/golang/go/issues/39740
27. https://pkg.go.dev/syscall/js
28. https://github.com/golang/go/issues/45713
29. https://github.com/golang/go/issues/46395
30. https://github.com/golang/go/issues/45435
31. https://github.com/golang/go/issues/20498
32. https://github.com/golang/go/issues/44167