源码兼容性和二进制兼容性

源码兼容性

源码兼容的两个库可以相互替换,不会新增加任何的编译错误和行为改变(不兼容的行为改变可能会引发对应的源码修改)。比如从 akka-actor 的 2.6.10 版本 升级到 2.6.11 版本 不会引入任何的编译错误、也不会引起语义改变,那么我们可以说 akka-actor 的 2.6.11 版本对其 2.6.10 版本是源码兼容的。

说明:这里的两个版本都使用Java 1.8 进行编译, 并且使用了相同的 Scala版本。

二进制兼容性

二进制兼容的两个库可以相互替换,而不会引发任何的链接错误(LinkageError)。比如 某个人对内提供的包在 1.3.13 到 1.3.14 的两个版本之间只是修改了某个方法的内部实现(逻辑优化)。此时我们说 1.3.13 和 1.3.14 这两个版本之间是二进制兼容的。

源码兼容和二进制兼容的关系

通常来说,破坏源码兼容性也会破坏二进制兼容性,而破坏二进制兼容性,则不一定破坏了破坏源码兼容性。比如在原来的某个方法基础上增加了一个参数,那么这个时候我同时破坏了源码兼容性和二进制兼容性。而如果我在不修改方法签名的情况下,在之前的版本使用Java 6编译,在新的版本实现中,我在内部实现利用了部分Java 8的特性和语法并使用Java 8 进行编译和发布。那么这个时候新的版本没有破坏源码兼容性,却破坏了二进制兼容性;此时在JVM 6 上运行会报错。

声明:本站内容来源于原创和互联网,尊重作者版权,转载请注明来源网址,欢迎收藏,谢谢!