仓库源文

.. Kenneth Lee 版权所有 2021

:Authors: Kenneth Lee :Version: 1.0

ABI

今天给人解释ABI是什么,陷入一个有点麻烦的描述陷阱,这是个挺好的用来解释“名和道” 关系的例子,我总结一下这个逻辑。

ABI,Application Binary Interface,是软件间的二进制接口。有一位管理者就问了:

    “ABI是指令架构定义的一部分吗?”

我们技术团队说:

    “不是,ABI是软件部件和软件部件之间的接口”

    “那不是API吗?”

    “不是,API是高级语言接口,APplication Interface;而ABI是二进制接口,
    Application Binary Interface。”

    “二进制接口不就是软件和硬件直接的接口吗?如果硬件修改了,二进制接口不就
    改变了吗?”

    “硬件修改了,ABI确实有可能修改,但这只说明ABI依赖软硬件接口,并不表示
    ABI本身是软硬件接口”

    “……(不知道你在说什么)”

    “比如说吧,你一个程序要调用一个函数,怎么把参数告诉函数呢?你定义第一个参数
    用寄存器1,第二个参数用寄存器2,这个定义本身,就是ABI。”

    “那不就是程序和硬件寄存器间的接口吗?还说不是软硬件的接口?”

    “……(不知道应该说什么)”

技术团队自己都觉得失去让人明白的信心了:知道细节的人,这个问题很简单,但怎么给 不知道细节的人说清楚?

我尝试这样解释:我们要跟别人说话,首先要能发出声音,我们通过喉咙,口腔这些“硬件 ”,才能发出声音,我们才能和别人交流,控制喉咙口腔的方法,我们说是我们大脑和硬件 的接口,这时才是“软硬件的接口”。然后我们和别人说话,我们还需要语言,比如普通话 ,要说普通话,你首先得能发声,但普通话不是大脑和硬件之间的接口,普通话是我们人 和人之间的接口。这是ABI的概念。你要说普通话,首先得能发出声音,但普通话本身,不 是怎么发出声音的方法,而是基于声音我们建立和人和人交流的方法。类比起来,没有软 硬件的接口,我们根本设计不了ABI,但ABI本身,不是软硬件的接口。

我也不知道人家听懂了没有。这是我能想到最好的表述了。

我想用这个例子来说明:

  1. 没有共同的细节观感的时候,高层抽象的交流是很难完成的,即使你觉得完成了,你也 不见得把有效的信息传递出去了。

  2. 高层抽象依赖下层抽象的概念空间,但高层抽象的概念空间是一个独立的存在。如果把 概念空间看做是无条件的信息,高层抽象和下层抽象是互相独立的信息集合。我强调这 一点,是要说明:ABI所产生的信息,和硬件Arch(本质是软硬件接口)定义的信息, 是两个独立的信息,前者并不包含后者。