bytedance / sonic

A blazingly fast JSON serializing & deserializing library
Apache License 2.0
6.71k stars 333 forks source link

v1.10.0 中的 (ast.Node).UnsafeMap() 被注释了,为什么在同一个大版本内做不兼容升级? #562

Closed vaf714 closed 9 months ago

vaf714 commented 9 months ago

项目依赖了 A 和 B,A 依赖了 sonic@v1.5.0 并调用了 (ast.Node).UnsafeMap(),B 依赖了 sonic@1.10.2,通过 replace 将 sonic 强制降级后,又触发了一堆底层依赖的不兼容。 在同一个大版本中做不兼容升级是否违背了 go 的版本管理规则?

AsterDY commented 9 months ago
  1. 这个API只是为了提升性能做的一个 unmaintable API,没有必要为了它去搞个大版本
  2. 现在老版本的API实际是有bug的,通过升级v2并不能解决“依赖老版API用户会触发bug”这个问题,反而会让潜在风险对v1用户一直保留 —— 换言之,这次break change就是by desgin的,目的就是要告诉用户“这个API有bug别再用了
vaf714 commented 9 months ago

明白您的意思,但是造成的依赖冲突如何解决呢?只能推动被依赖方升级 sonic 吗?(强制降低不可行,因为 B 调用了 1.10.x 的新增的 struct:loader.CFunc)

vaf714 commented 9 months ago

update: 已经解决了,A 已经有适配了新版本的版本,升级 A 依赖即可。