Golang 中的 Hyrum 法则/阿贝内泽尔·贝拉乔夫

主要观点:作者在探索 Go 代码库时发现关于 Hyrum 定律的注释,该定律指出在有足够用户使用的 API 中,承诺的合约不重要,系统的所有可观察行为都会被人依赖。文中举例在 Go 的不同包中如net/http/request.gocrypto/rsainternal/weak等都有相关注释,说明一些代码行为不能随意更改,否则可能影响依赖这些行为的代码。同时提到 Hyrum 定律并非 Go 语言特有,在其他代码库中也有提及,这让作者联想到 JavaScript 因广泛依赖各种奇怪的意外行为而演变,最后强调要小心更改可能被他人依赖的代码,设计系统时要尽量减少意外行为被依赖的机会。

关键信息:

  • Hyrum 定律:有足够用户的 API 中,系统的可观察行为会被依赖。
  • Go 代码中的示例:net/http/request.go中错误消息不能改,crypto/rsa中的加密和解密相关代码,internal/weak中的禁止使用特定功能的注释。
  • 其他提及 Hyrum 定律的代码库:Python、C++等。
  • 相关讨论:在 Hacker News 上有讨论。

重要细节:

  • 作者之前未听说过 Hyrum 定律,通过搜索了解到其相关信息。
  • 举例说明更改错误消息可能导致依赖该消息的现有代码出错。
  • 提到 JavaScript 因依赖意外行为而演变的情况。
  • 给出关于设计系统的一些思考,如小心更改代码、减少意外行为被依赖等。
阅读 14
0 条评论