最近我对程序设计语言又有了一些新的体会,大致说来是从数据处理的角度来看待语言的差异。我抽象出了一个概念-“数据亲和力(Data Affinity)”,它指的是语言的数据模型与某种数据形式之间的匹配程度。数据亲和力也是决定语言适用于哪些应用场合的重要因素。比如:
1. C语言的struct(语言的数据模型)和字节块(数据形式)之间可以建立起直接的映射关系,所以C语言具有较高的对字节块形式数据的亲和力,适用于需要进行直接内存操作的底层应用;
2. Javascript的对象(语言的数据模型)和JSON数据(数据形式)之间可以非常方便的相互转换,所以Javascript具有较高的对JSON数据的亲和力,适用于在分布式系统之间用JSON进行通信;
3. Shell对文本流形式的数据和文件具有较高的数据亲和力,适用于文本处理和文件操作应用.
我发现数据亲和力和语言的范式没有必然的联系,比如:一门语言是面向过程的并不意味着它拥有对字节块形式数据的亲和力;一门语言是OOP的也不意味着它有对JSON数据的亲和力。根本上讲,数据亲和力取决于语言的数据模型,但也可能会和语言的强/弱类型、动/静类型有关系。C语言拥有字节块亲和力用到了弱类型特性;Javascript拥有JSON亲和力的关键是其动态类型。
除了上面的例子,像SQL这样的DSL更是专门针对一种数据模型而量身定做的,所以DSL通常也会表现出某种数据亲和力。