
英特尔
如果非要挑出x86架构最令人震撼的一点,那无疑是它的历史兼容性。在x86体系中,只有新程序无法运行在老架构上的情况,而从未出现过老程序无法运行在新架构上的问题(最多只是环境不匹配,但这种问题通常很容易解决)。相比之下,某些其他架构已经需要借助模拟器才能运行32位程序,而x86-64至今仍然可以运行16位程序,至于8位程序,虽然我没亲自测试过,但理论上也完全有可能。当然,有人可能会把这种兼容性视为一种历史包袱。然而,兼容性这个东西,在你不需要的时候可能觉得它多余,但在真正需要时,如果没有它,就会让你无比头疼。至于它是否有用,这并不是硬件设计厂商能单方面决定的。回顾一下当年
英特尔推出的纯64位架构IA-64(即安腾架构),尽管其设计并不算差,甚至可以说比x86-64更先进,但由于市场用脚投票,最终还是失败了。生态系统的惯性是极其强大的,尤其是在生产力应用领域,随便打破兼容性几乎等于自寻死路。看看
手机等快消品领域的更新换代速度,它们可以轻松抛弃旧代码,但在真正的生产力工具中,几乎没人敢这样做,凡是尝试过的项目大多以失败告终。深入观察各大经典
计算机领域,你会发现这些领域的底层依赖往往源自几十年前的老代码。那个时代的程序员为了实现特定功能,比如计算POPCNT(即统计二进制中1的数量),会采用各种巧妙的方法。而POPCNT指令本身直到21世纪才被引入到指令集中。如果你破坏了指令集的兼容性,那些基于早期方法实现的代码很可能无法通过编译,即使勉强编译成功,也可能因为未定义行为(UB)而导致90%以上的代码不可靠。
计算机科学和工程一样,也是站在前人肩膀上的学科。废除历史兼容性意味着大量的底层代码需要重新编译甚至重写。例如,如果你取消对32位的支持,所有涉及位操作的代码都需要调整其中的32位立即数。你能保证这些新写的代码能达到经过数十年验证的老代码那样的稳定性和可靠性吗?谁又愿意承担如此高昂的成本?因此,x86的历史兼容性不仅是其成功的关键之一,也是整个行业发展的基石。