哈哈,我是标题党,造个噱头而已。感觉对C、C++以前太崇拜了,现在逐渐认识到、听说到他们的不好,整理起来。
虽然找工作很不顺利,心烦气躁,只好写写代码顺顺气。嘻嘻
---------------------
原文也有些不妥之处,还得看回帖 哈哈。第一遍看完,觉得作者说的很有道理,尤其是“C++的面向接口编程”部分,仔细想想,其实自己还不完全明白。还得认真思考、亲手实践。
----------------------
1、什么是二进制兼容性问题?(Application Binary Interface Transition, ABI  transition  )
简单说,对于已经编译好的二进制文件,编译过程中依赖某些头文件和库文件,当这些文件有升级更新时,二进制还能不能正常运行?
当然,这里主要说的是有动态库连接的二进制文件。

2、C++兼容性问题会带来哪些麻烦?(未经实践证明,若有错请指正)
的确,一不小心,修改了例如某动态库的头文件就会产生这个问题,举例如下:
.虚函数的调用方式,通常是 vptr/vtbl 然后用 vtbl[offset] 来调用
.改变struct和class的布局,编译阶段,编译器将struct或class的对象对成员的访问通过偏移量来实现
.name mangling 名字粉碎(例如 void foo(int)被编译器命名为_foo_int来实现重载)
算了,懒得写了。这有KDE的一套规范,有空一定要翻译一下他!

3、如何避免这些麻烦?
知道为什么会造成ABI transition了就容易避免了。知道代码质量如何提高了吧!

4、其他语言或者系统如何避免这个问题?
JAVA,不存在include头文件就可以编译、运行时load动态库的问题,所以就没有这个问题。

等待我翻译KDE那篇文章的消息吧!