说一下我自己的一点想法吧:
我觉得有一定道理的是 Limitations of the Unix philosophy and the ultimate solution to parsing 里提到的 “universal binary format” 的想法。确实如文中所提到的,现在的大多数文本的数据,其实都只是不同数据类型(interger、boolean)的一种低效率表示。
但同时我也认为我们现在不应该切换到一个 universal binary format 上去。因为对于现在的计算机来说,计算速度足够快,一个文本的 parse 和一个二进制格式的 parse 在性能上并不能拉开很大的差距。而且即使是 universal binary format,也依然少不了 parse 的步骤, 依然存在文中提到的 “前一个程序编码,传到后一个程序马上又要解码” 的问题,只是解码的数据从文本变成了二进制,收获了一点点性能提升罢了(again,我们真的需要这些性能提升吗?)。
我觉得本质上是找错了问题。
interoperability 的突破,需要的是一个良好定义,并广泛接受的数据交换格式,重点在于这种格式需要「良好定义并且广泛接受」,而与这种交换格式的本质是二进制还是文本无关。
拿 web 界来说,以前的互联网数据交换有很多协议,基本上每一个应用都有自己的不同的协议,而今天,大多数事情都可以通过 http 来完成。大量的前后端交互和跨应用 api 采用 http + json 的形式,假设你开发一个新的应用,可以通过 http api 调用到很多现成的基础服务,从而实现灵活的交互组合。这就是一个「良好定义并且广泛接受」的数据传输格式的例子。
而 「http + json 是文本格式」这一点,并不影响它的广泛应用,也丝毫不降低它提供互用性的能力。
二进制比起文本的优点,可能是 parser 的实现会相对简单,但是对于大多数应用来说都会使用现成的 parser 库,而不会自己重新造轮子。而二进制格式的设计大概率也会需要通过 parser 库来解析,所以这个优点就显得不是特别明显(特别是考虑到现在的计算机)。
更好的问题应该是,“能不能找到一个抽象,使得应用之间交换的信息都能用这个抽象来描述”。举 SMTP 的例子,一封邮件需要知道送信人、收信人、标题、正文。这个就是一次信息传递(一封邮件)所含的信息的抽象描述。而具体传输是如何分行,如何存储标题,是文本还是二进制,使用什么编码,这些都是具体实现的细节,不会影响它携带的信息这个本质。
找到这个抽象的过程,其实也就是协议规范制定的一部分。“要传什么” 比 “怎么传” 更重要。
总之观点就是,将文本格式切换到二进制格式,不会带来很显著的好处,也并没有改变传递的信息的本质,也就没有提升程序交互性。