吐槽下 Google 开源的组件

315 天前
 Goooooos

每次升级依赖都要小心翼翼,一不小心就出现不兼容

2414 次点击
所在节点    Java
10 条回复
weijancc
315 天前
Google 的 gson 会将 json 中的数值解析成 double, 也是蛮坑的
kingmo888
315 天前
所以非升不可嘛?
Goooooos
315 天前
@kingmo888 总有时候不得不升
kingmo888
315 天前
@Goooooos 想起了前年 12 月吧,生产环境上 py311 ,赶上内存泄漏,日常 1G 内存,1 周跑到 32G.哈哈
nothingistrue
315 天前
如果你紧跟 Java 最新版本,那么可能会更容易碰见不兼容。当你依赖的基础组件是敏捷开发的,而你自己有不是敏捷开发,那被升级兼容性问题坑是早晚的事。

你最好也是跟着一起敏捷开发——这要求近乎 100%自动单元测试,虽然不能避免兼容性问题,但是能第一时间爆出问题让你去解决。
gongxuanzhang
315 天前
一切兼容问题都可以用测试解决
kuanat
315 天前
很多时候不兼容的改动都是“无意识”的,开发者以为修改是向后兼容的,但实际上不是。这种错误我犯过不知道多少次了……


关于向后兼容这个话题,我推荐两个讲座,都有视频和讲义:

- How to design a Linux kernel interface, https://archive.fosdem.org/2016/schedule/event/design_linux_kernel_api/

- Detecting incompatible changes, https://sourcegraph.com/blog/go/gophercon-2019-detecting-incompatible-api-changes

简单做个总结。Linux kernel-userspace API 早期的失误造成的影响已经持续了几十年,很多还将继续影响下去。这些失误的来源多数是设计者想象不到下游开发者会以什么样的方式去使用这些 API 。

规避的措施就是自动化测试,而自动化测试需要对 specification 进行规范化。实际上推动了开发流程的改变,即先公开规范和 API 设计,提供实例代码,接受反馈并修改设计方案,最后再实现功能和测试。而不是过去的先做实现,然后公开 API 接口的模式。

(这个事情做到极致大概类似于 amazon ,先开发布会,然后再开发)

第二个讲座虽然是 Golang 的,但指导意义很大。核心是如何从技术上自动判定某个改动是否会影响兼容性,进而对如何编写“面向未来可兼容扩展”的 API 接口提供理论支持。Golang 的开发团队为 Go1 的兼容性做了很大的努力,有非常多的案例经验可以参考借鉴。
Knife42
314 天前
@kuanat 大佬好,冒昧打扰了。v 站好像没有私信,我就直接在这说了。我是刚才看到你的回答 https://v2ex.com/t/1007645#r_14194875 感觉学到了很多,好奇之下看了你别的回答,意外发现对我来说都很有启发。想了解下大佬你有别的社交账号吗?或者 github id 是什么?想关注 🙏
kuanat
314 天前
@Knife42 #8

自我定位是 long time lurker 所以没有什么社交账号。

v2ex 发帖的初衷是想在 AI 生成内容的时代留下一点有价值的东西。
Knife42
314 天前
@kuanat 明白,那大佬有博客啥的吗?总之感谢你的分享,祝天天开心!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1007845

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX